From ae0b2e2a24a9c3c4b1e47ce66ecccdbf7cd1bfc6 Mon Sep 17 00:00:00 2001 From: Ewoud Date: Wed, 26 Jul 2023 12:17:13 +0200 Subject: [PATCH] Limit WS calls to work with standard msg queue of 32 ;-) + improvements index.js: limit ws calls, group them in uiFunCommands SysModSystem: clean up reset restart reasons SysModUI - processJson: uiFun is now an array of grouped objects instead of one by one SysModWeb - refactor: use web->getResponseDoc(); to get the task dependent responseDoc, make responseDoc0 and responseDoc1 private --- data/app.js | 3 +- data/index.css | 43 ++-- data/index.js | 36 ++- src/AppModLeds.h | 6 +- src/SysModFiles.cpp | 1 - src/SysModModel.cpp | 4 +- src/SysModModel.h | 4 +- src/SysModSystem.cpp | 72 +++--- src/SysModSystem.h | 1 + src/SysModUI.cpp | 55 ++-- src/SysModUI.h | 3 +- src/SysModWeb.cpp | 36 ++- src/SysModWeb.h | 8 +- src/html_ui.h | 601 ++++++++++++++++++++++--------------------- 14 files changed, 464 insertions(+), 409 deletions(-) diff --git a/data/app.js b/data/app.js index fb1a7a9f..a47c7d5e 100644 --- a/data/app.js +++ b/data/app.js @@ -174,7 +174,8 @@ function preview3D(node, leds) { } if (jsonValues.pview) { - renderer.setSize( gId("pview").width, gId("pview").height); + if (renderer.width != gId("pview").width || renderer.height != gId("pview").height) + renderer.setSize( gId("pview").width, gId("pview").height); //light up the cube let firstLed = 4; var i = 1; diff --git a/data/index.css b/data/index.css index cce2399b..9d1a0655 100644 --- a/data/index.css +++ b/data/index.css @@ -9,10 +9,32 @@ comment { margin-left: 6px; /*space before*/ } -text { /*currently onlu for buttonSaveNode and buttonCancelNode*/ +text { /*currently only for buttonSaveNode and buttonCancelNode*/ font-size: 10px; } - + +/* For textarea objects */ +textarea { + width: 100%; + height: 100%; +} + +/* for toggleModal */ +.modal { + position:fixed; + left: 0px; + bottom: 0px; + right: 0px; + top: 0px; + /* calc(var(--th) - 1px); */ + background-color: var(--c-o); + transform: translateY(100%); + transition: transform 0.4s; + padding: 8px; + font-size: 18px; /* WLEDMM: smaller is better (was 20px)*/ + overflow: auto; +} + /*table layout */ .table-style { font-family: Arial, Helvetica, sans-serif; @@ -87,7 +109,7 @@ text { /*currently onlu for buttonSaveNode and buttonCancelNode*/ --c-l: #48a; --c-y: #a90; --t-b: 0.5; - --c-o: rgba(34, 34, 34, 0.9); + --c-o: rgba(195, 145, 145, 0.9); /* used for modal background, changed to more readable*/ --c-tb : rgba(34, 34, 34, var(--t-b)); --c-tba: rgba(102, 102, 102, var(--t-b)); --c-tbh: rgba(51, 51, 51, var(--t-b)); @@ -112,18 +134,3 @@ text { /*currently onlu for buttonSaveNode and buttonCancelNode*/ z-index: -2; } -/* for toggleModal */ -.modal { - position:fixed; - left: 0px; - bottom: 0px; - right: 0px; - top: 0px; - /* calc(var(--th) - 1px); */ - background-color: var(--c-o); - transform: translateY(100%); - transition: transform 0.4s; - padding: 8px; - font-size: 18px; /* WLEDMM: smaller is better (was 20px)*/ - overflow: auto; -} diff --git a/data/index.js b/data/index.js index b4c28188..daa02cdc 100644 --- a/data/index.js +++ b/data/index.js @@ -6,6 +6,7 @@ let nrOfColumns = 4; let userFunId = ""; let htmlGenerated = false; let jsonValues = {}; +let uiFunCommands = []; function gId(c) {return d.getElementById(c);} function cE(e) { return d.createElement(e); } @@ -41,6 +42,10 @@ function makeWS() { console.log("WS receive generateHTML", json); generateHTML(null, json); //no parentNode htmlGenerated = true; + //send request for uiFun + if (uiFunCommands.length) { //flush commands not already send + flushUIFunCommands(); + } } else console.log("Error: no array", json); @@ -179,7 +184,7 @@ function generateHTML(parentNode, json) { newNode.appendChild(spanNode); } } - else { //not ro + else { //not ro or button newNode = cE("p"); let buttonSaveNode = null; let buttonCancelNode = null; @@ -221,16 +226,24 @@ function generateHTML(parentNode, json) { //call ui Functionality, if defined (to set label, comment, lov etc) if (json.uiFun >= 0) { //>=0 as element in object - var command = {}; - command["uiFun"] = json.id; //ask to run uiFun for object (to add the options) - requestJson(command); + uiFunCommands.push(json.id); + if (uiFunCommands.length > 8) { //every 10 objects (to respect responseDoc size) check WS_EVT_DATA info + flushUIFunCommands(); + } } - + if (json.n) generateHTML(newNode, json.n); //details (e.g. module) - } } +function flushUIFunCommands() { + var command = {}; + command["uiFun"] = uiFunCommands; //ask to run uiFun for object (to add the options) + console.log("uiFunCommands", command); + requestJson(command); + uiFunCommands = []; +} + function processUpdate(json) { // console.log("processUpdate", json); for (var key of Object.keys(json)) { @@ -271,7 +284,7 @@ function processUpdate(json) { } if (json[key].lov) { console.log("processUpdate lov", key, json[key].lov); - if (gId(key).nodeName.toLocaleLowerCase() == "span") { //readonly tbd: only the displayed value needs to be in the lov + if (gId(key).nodeName.toLocaleLowerCase() == "span") { //readonly. tbd: only the displayed value needs to be in the lov var index = 0; for (var value of json[key].lov) { if (parseInt(gId(key).textContent) == index) { @@ -290,8 +303,6 @@ function processUpdate(json) { gId(key).remove(0); } for (var value of json[key].lov) { - if (key=="reset0") - console.log("processUpdate lov3", value, gId(key), gId(key).textContent, index); let optNode = cE("option"); optNode.value = index; optNode.text = value; @@ -317,9 +328,9 @@ function processUpdate(json) { gId(key).replaceChild(tbodyNode, gId(key).lastChild); //replace } if (json[key].value && !overruleValue) { //after lov, in case used - if (key=="ledFix" || key =="ledFixGen" || key =="reset0") + if (key=="ledFix" || key =="ledFixGen") console.log("processUpdate value", key, json[key].value, gId(key)); - if (gId(key).nodeName.toLocaleLowerCase() == "span") //display + if (gId(key).nodeName.toLocaleLowerCase() == "span") //read only objects gId(key).textContent = json[key].value; else if (gId(key).nodeName.toLocaleLowerCase() == "canvas") { userFunId = key; //prepare for websocket data @@ -337,7 +348,7 @@ function processUpdate(json) { //we need to send a request which the server can handle using request variable let url = `http://${window.location.hostname}/file`; - fetchAndExecute(url, json[key].file, jsonValues, function(jsonValues,text) { + fetchAndExecute(url, json[key].file, key, function(key,text) { //send key as parameter // console.log("fetchAndExecute", text); //in case of invalid json var ledmapJson = JSON.parse(text); jsonValues[key] = ledmapJson; @@ -427,7 +438,6 @@ function toggleModal(element) { modalPlaceHolder.width = element.width; modalPlaceHolder.height = element.height; - console.log("replaceChild", element, element.parentNode, modalPlaceHolder); element.parentNode.replaceChild(modalPlaceHolder, element); gId('modalView').appendChild(element); diff --git a/src/AppModLeds.h b/src/AppModLeds.h index 8a7c2310..9290980e 100644 --- a/src/AppModLeds.h +++ b/src/AppModLeds.h @@ -296,8 +296,10 @@ class AppModLeds:public Module { mdl->setValueI("nrOfLeds", nrOfLeds); //send to pview a message to get file filename - JsonVariant responseVariant = (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?web->responseDoc0:web->responseDoc1)->as(); - (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?web->responseDoc0:web->responseDoc1)->clear(); + JsonDocument *responseDoc = web->getResponseDoc(); + responseDoc->clear(); //needed for deserializeJson? + JsonVariant responseVariant = responseDoc->as(); + web->addResponse("pview", "file", fileName); web->sendDataWs(responseVariant); print->printJson("ledfix chFun send ws done", responseVariant); //during server startup this is not send to a client, so client refresh should also trigger this diff --git a/src/SysModFiles.cpp b/src/SysModFiles.cpp index 41f13fb3..aa7a70cd 100644 --- a/src/SysModFiles.cpp +++ b/src/SysModFiles.cpp @@ -68,7 +68,6 @@ void SysModFiles::loop(){ filesChanged = false; ui->processUiFun("flist"); - } } } diff --git a/src/SysModModel.cpp b/src/SysModModel.cpp index 68a76918..6cb433d4 100644 --- a/src/SysModModel.cpp +++ b/src/SysModModel.cpp @@ -173,7 +173,7 @@ JsonObject SysModModel::setValueB(const char * id, bool value) { } //Set value with argument list -JsonObject SysModModel::setValueV(const char * id, const char * format, ...) { //static to use in *Fun +JsonObject SysModModel::setValueV(const char * id, const char * format, ...) { va_list args; va_start(args, format); @@ -210,7 +210,7 @@ JsonVariant SysModModel::getValue(const char * id) { } } -JsonObject SysModModel::findObject(const char * id, JsonArray parent) { //static for processJson +JsonObject SysModModel::findObject(const char * id, JsonArray parent) { JsonArray root; // print ->print("findObject %s %s\n", id, parent.isNull()?"root":"n"); if (parent.isNull()) { diff --git a/src/SysModModel.h b/src/SysModModel.h index bf6dcefd..5f8a62b0 100644 --- a/src/SysModModel.h +++ b/src/SysModModel.h @@ -27,7 +27,7 @@ class SysModModel:public Module { static JsonObject setValueB(const char * id, bool value); //Set value with argument list - static JsonObject setValueV(const char * id, const char * format, ...); + static JsonObject setValueV(const char * id, const char * format, ...); //static to use in *Fun //Set value with argument list and print JsonObject setValueP(const char * id, const char * format, ...); @@ -35,7 +35,7 @@ class SysModModel:public Module { JsonVariant getValue(const char * id); //returns the object defined by id (parent to recursively call findObject) - static JsonObject findObject(const char * id, JsonArray parent = JsonArray()); + static JsonObject findObject(const char * id, JsonArray parent = JsonArray()); //static for processJson private: static bool doWriteModel; diff --git a/src/SysModSystem.cpp b/src/SysModSystem.cpp index 915cce65..69eb1ded 100644 --- a/src/SysModSystem.cpp +++ b/src/SysModSystem.cpp @@ -31,29 +31,20 @@ void SysModSystem::setup() { }); ui->initSelect(parentObject, "reset0", (int)rtc_get_reset_reason(0), true, [](JsonObject object) { //uiFun - web->addResponse(object["id"], "comment", "Reset reason core 0"); + web->addResponse(object["id"], "label", "Reset 0"); + web->addResponse(object["id"], "comment", "Reason Core 0"); sys->addResetReasonsLov(web->addResponseA(object["id"], "lov")); }); if (ESP.getChipCores() > 1) ui->initSelect(parentObject, "reset1", (int)rtc_get_reset_reason(1), true, [](JsonObject object) { //uiFun - web->addResponse(object["id"], "comment", "Reset reason core 1"); + web->addResponse(object["id"], "label", "Reset 1"); + web->addResponse(object["id"], "comment", "Reason Core 1"); sys->addResetReasonsLov(web->addResponseA(object["id"], "lov")); }); ui->initSelect(parentObject, "restartReason", (int)esp_reset_reason(), true, [](JsonObject object) { //uiFun - web->addResponse(object["id"], "comment", "Restart reason"); - JsonArray lov = web->addResponseA(object["id"], "lov"); - lov.add("ESP_RST_UNKNOWN");// //!< Reset reason can not be determined - lov.add("ESP_RST_POWERON");// //!< Reset due to power-on event - lov.add("ESP_RST_EXT");// //!< Reset by external pin (not applicable for ESP32) - lov.add("ESP_RST_SW");// //!< Software reset via esp_restart - lov.add("ESP_RST_PANIC");// //!< Software reset due to exception/panic - lov.add("ESP_RST_INT_WDT");// //!< Reset (software or hardware) due to interrupt watchdog - lov.add("ESP_RST_TASK_WDT");// //!< Reset due to task watchdog - lov.add("ESP_RST_WDT");// //!< Reset due to other watchdogs - lov.add("ESP_RST_DEEPSLEEP");////!< Reset after exiting deep sleep mode - lov.add("ESP_RST_BROWNOUT");// //!< Brownout reset (software or hardware) - lov.add("ESP_RST_SDIO");// //!< Reset over SDIO - + web->addResponse(object["id"], "label", "Restart"); + web->addResponse(object["id"], "comment", "Reason restart"); + sys->addRestartReasonsLov(web->addResponseA(object["id"], "lov")); }); // static char msgbuf[32]; @@ -92,21 +83,38 @@ void SysModSystem::loop() { } } +//replace code by sentence as soon it occurs, so we know what will happen and what not void SysModSystem::addResetReasonsLov(JsonArray lov) { - lov.add("NO_MEAN"); // 0, - lov.add("POWERON_RESET"); // 1, /**<1, Vbat power on reset*/ - lov.add("SW_RESET"); // 3, /**<3, Software reset digital core*/ - lov.add("OWDT_RESET"); // 4, /**<4, Legacy watch dog reset digital core*/ - lov.add("DEEPSLEEP_RESET"); // 5, /**<3, Deep Sleep reset digital core*/ - lov.add("SDIO_RESET"); // 6, /**<6, Reset by SLC module, reset digital core*/ - lov.add("TG0WDT_SYS_RESET"); // 7, /**<7, Timer Group0 Watch dog reset digital core*/ - lov.add("TG1WDT_SYS_RESET"); // 8, /**<8, Timer Group1 Watch dog reset digital core*/ - lov.add("RTCWDT_SYS_RESET"); // 9, /**<9, RTC Watch dog Reset digital core*/ - lov.add("INTRUSION_RESET"); //10, /**<10, Instrusion tested to reset CPU*/ - lov.add("TGWDT_CPU_RESET"); //11, /**<11, Time Group reset CPU*/ - lov.add("SW_CPU_RESET"); //12, /**<12, Software reset CPU*/ - lov.add("RTCWDT_CPU_RESET"); //13, /**<13, RTC Watch dog Reset CPU*/ - lov.add("EXT_CPU_RESET"); //14, /**<14, for APP CPU, reseted by PRO CPU*/ - lov.add("RTCWDT_BROWN_OUT_RESET"); //15, /**<15, Reset when the vdd voltage is not stable*/ - lov.add("RTCWDT_RTC_RESET"); //16 /**<16, RTC Watch dog reset digital core and rtc module*/ + lov.add("NO_MEAN"); // 0, + lov.add("POWERON_RESET"); // 1, /**<1, Vbat power on reset*/ + lov.add("SW_RESET (2)"); // 2, /**<3, Software reset digital core*/ + lov.add("SW_RESET (3)"); // 3, /**<3, Software reset digital core*/ + lov.add("OWDT_RESET"); // 4, /**<4, Legacy watch dog reset digital core*/ + lov.add("DEEPSLEEP_RESET"); // 5, /**<3, Deep Sleep reset digital core*/ + lov.add("SDIO_RESET"); // 6, /**<6, Reset by SLC module, reset digital core*/ + lov.add("TG0WDT_SYS_RESET"); // 7, /**<7, Timer Group0 Watch dog reset digital core*/ + lov.add("TG1WDT_SYS_RESET"); // 8, /**<8, Timer Group1 Watch dog reset digital core*/ + lov.add("RTCWDT_SYS_RESET"); // 9, /**<9, RTC Watch dog Reset digital core*/ + lov.add("INTRUSION_RESET"); //10, /**<10, Instrusion tested to reset CPU*/ + lov.add("TGWDT_CPU_RESET"); //11, /**<11, Time Group reset CPU*/ + lov.add("SW reset CPU (12)");//SW_CPU_RESET"); //12, /**<12, */ + lov.add("RTCWDT_CPU_RESET"); //13, /**<13, RTC Watch dog Reset CPU*/ + lov.add("EXT_CPU_RESET"); //14, /**<14, for APP CPU, reseted by PRO CPU*/ + lov.add("RTCWDT_BROWN_OUT_RESET"); //15, /**<15, Reset when the vdd voltage is not stable*/ + lov.add("RTCWDT_RTC_RESET"); //16 /**<16, RTC Watch dog reset digital core and rtc module*/ } + +//replace code by sentence as soon it occurs, so we know what will happen and what not +void SysModSystem::addRestartReasonsLov(JsonArray lov) { + lov.add("ESP_RST_UNKNOWN");// //!< Reset reason can not be determined + lov.add("ESP_RST_POWERON");// //!< Reset due to power-on event + lov.add("ESP_RST_EXT");// //!< Reset by external pin (not applicable for ESP32) + lov.add("ESP_RST_SW");// //!< Software reset via esp_restart + lov.add("SW reset due to exception/panic (4)");//ESP_RST_PANIC");// //!< + lov.add("ESP_RST_INT_WDT");// //!< Reset (software or hardware) due to interrupt watchdog + lov.add("ESP_RST_TASK_WDT");// //!< Reset due to task watchdog + lov.add("ESP_RST_WDT");// //!< Reset due to other watchdogs + lov.add("ESP_RST_DEEPSLEEP");////!< Reset after exiting deep sleep mode + lov.add("ESP_RST_BROWNOUT");// //!< Brownout reset (software or hardware) + lov.add("ESP_RST_SDIO");// //!< Reset over SDIO +} \ No newline at end of file diff --git a/src/SysModSystem.h b/src/SysModSystem.h index d3a889e8..c058f9aa 100644 --- a/src/SysModSystem.h +++ b/src/SysModSystem.h @@ -15,6 +15,7 @@ class SysModSystem:public Module { unsigned long loopCounter = 0; void addResetReasonsLov(JsonArray lov); + void addRestartReasonsLov(JsonArray lov); }; diff --git a/src/SysModUI.cpp b/src/SysModUI.cpp index a3f94135..81684d18 100644 --- a/src/SysModUI.cpp +++ b/src/SysModUI.cpp @@ -197,8 +197,9 @@ void SysModUI::setChFunAndWs(JsonObject object, const char * value) { //value: b print->print("setChFunAndWs function nr %s outside bounds %d >= %d\n", object["id"].as(), funNr, ucFunctions.size()); } - JsonVariant responseVariant = (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?web->responseDoc0:web->responseDoc1)->as(); - (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?web->responseDoc0:web->responseDoc1)->clear(); + JsonDocument *responseDoc = web->getResponseDoc(); + responseDoc->clear(); //needed for deserializeJson? + JsonVariant responseVariant = responseDoc->as(); if (value) web->addResponse(object["id"], "value", value); @@ -221,7 +222,7 @@ void SysModUI::setChFunAndWs(JsonObject object, const char * value) { //value: b web->sendDataWs(responseVariant); } -const char * SysModUI::processJson(JsonVariant &json) { //static for setupJsonHandlers +const char * SysModUI::processJson(JsonVariant &json) { if (json.is()) //should be { for (JsonPair pair : json.as()) { //iterate json elements @@ -231,23 +232,28 @@ const char * SysModUI::processJson(JsonVariant &json) { //static for setupJsonHa // commands if (pair.key() == "uiFun") { //JsonString can do == //find the select object and collect it's options... - JsonObject object = mdl->findObject(value); //value is the id - if (!object.isNull()) { - //call ui function... - if (!object["uiFun"].isNull()) {//isnull needed here! - size_t funNr = object["uiFun"]; - if (funNr < ucFunctions.size()) - ucFunctions[funNr](object); - else - print->print("processJson function nr %s outside bounds %d >= %d\n", object["id"].as(), funNr, ucFunctions.size()); - if (object["type"] == "select") - web->addResponseI(object["id"], "value", object["value"]); //temp assume int only - - // print->printJson("PJ Command", responseDoc); + if (value.is()) { //should be + for (JsonVariant value2: value.as()) { + JsonObject object = mdl->findObject(value2); //value is the id + if (!object.isNull()) { + //call ui function... + if (!object["uiFun"].isNull()) {//isnull needed here! + size_t funNr = object["uiFun"]; + if (funNr < ucFunctions.size()) + ucFunctions[funNr](object); + else + print->print("processJson function nr %s outside bounds %d >= %d\n", object["id"].as(), funNr, ucFunctions.size()); + if (object["type"] == "select") + web->addResponseI(object["id"], "value", object["value"]); //temp assume int only + + // print->printJson("PJ Command", responseDoc); + } + } + else + print->print("processJson Command %s object %s not found\n", key, value2.as().c_str()); } - } - else - print->print("PJ Command %s object %s not found\n", key, value.as().c_str()); + } else + print->print("processJson value not array?\n", key, value.as().c_str()); } else { //normal change if (!value.is()) { //no objects (inserted by uiFun responses) @@ -283,13 +289,14 @@ const char * SysModUI::processJson(JsonVariant &json) { //static for setupJsonHa } void SysModUI::processUiFun(const char * id) { - JsonVariant responseVariant = (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?web->responseDoc0:web->responseDoc1)->as(); - (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?web->responseDoc0:web->responseDoc1)->clear(); //needed for deserializeJson? + JsonDocument *responseDoc = web->getResponseDoc(); + responseDoc->clear(); //needed for deserializeJson? + JsonVariant responseVariant = responseDoc->as(); - responseVariant["uiFun"] = id; + JsonArray array = responseVariant.createNestedArray("uiFun"); + array.add(id); processJson(responseVariant); //this calls uiFun command, which might change objectLoopsChanged //this also updates uiFun stuff - not needed! - // print->printJson("oloops change response", responseVariant); - web->sendDataWs(responseVariant); + web->sendDataWs(*responseDoc); } \ No newline at end of file diff --git a/src/SysModUI.h b/src/SysModUI.h index 9e28cf03..d292208f 100644 --- a/src/SysModUI.h +++ b/src/SysModUI.h @@ -87,8 +87,9 @@ class SysModUI:public Module { static void setChFunAndWs(JsonObject object, const char * value = nullptr); //interpret json and run commands or set values - static const char * processJson(JsonVariant &json); + static const char * processJson(JsonVariant &json); //static for setupJsonHandlers + //called to rebuild selects and tables (tbd: also label and comments is done again, that is not needed) void processUiFun(const char * id); private: diff --git a/src/SysModWeb.cpp b/src/SysModWeb.cpp index c8af0544..e0b23a44 100644 --- a/src/SysModWeb.cpp +++ b/src/SysModWeb.cpp @@ -133,9 +133,11 @@ void SysModWeb::wsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, } if (processWSFunc) { //processJson defined - DeserializationError error = deserializeJson(strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?*responseDoc0:*responseDoc1, data, len); //data to responseDoc - JsonVariant responseVariant = (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?responseDoc0:responseDoc1)->as(); - // print->print("response wsevent core %d %s\n", xPortGetCoreID(), pcTaskGetTaskName(NULL)); + JsonDocument *responseDoc = web->getResponseDoc(); + responseDoc->clear(); //needed for deserializeJson? + JsonVariant responseVariant = responseDoc->as(); + + DeserializationError error = deserializeJson(*responseDoc, data, len); //data to responseDoc if (error || responseVariant.isNull()) { print->print("wsEvent deserializeJson failed with code %s %s\n", error.c_str(), data); @@ -143,8 +145,10 @@ void SysModWeb::wsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, } else { const char * error = processWSFunc(responseVariant); //processJson, adds to responsedoc + if (responseVariant.size()) { - print->printJson("WS_EVT_DATA send response", responseVariant); + print->printJson("WS_EVT_DATA json", responseVariant); + print->printJDocInfo("WS_EVT_DATA info", *responseDoc); //uiFun only send to requesting client if (responseVariant["uiFun"].isNull()) @@ -177,7 +181,8 @@ void SysModWeb::wsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, if((info->index + len) == info->len){ if(info->final){ if(info->message_opcode == WS_TEXT) { - client->text(F("{\"error\":9}")); //we do not handle split packets right now + // client->text(F("{\"error\":9}")); //we do not handle split packets right now + print->print("WS multipart message: we do not handle split packets right now\n"); } } } @@ -363,8 +368,9 @@ bool SysModWeb::setupJsonHandlers(const char * uri, const char * (*processFunc)( //URL handler AsyncCallbackJsonWebHandler *handler = new AsyncCallbackJsonWebHandler("/json", [processFunc](AsyncWebServerRequest *request, JsonVariant &json) { - JsonVariant responseVariant = (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?responseDoc0:responseDoc1)->as(); - (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?responseDoc0:responseDoc1)->clear(); + JsonDocument *responseDoc = web->getResponseDoc(); + responseDoc->clear(); //needed for deserializeJson? + JsonVariant responseVariant = responseDoc->as(); print->printJson("AsyncCallbackJsonWebHandler", json); const char * pErr = processFunc(json); //processJson @@ -383,13 +389,13 @@ bool SysModWeb::setupJsonHandlers(const char * uri, const char * (*processFunc)( } void SysModWeb::addResponse(const char * id, const char * key, const char * value) { - JsonVariant responseVariant = (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?responseDoc0:responseDoc1)->as(); + JsonVariant responseVariant = getResponseDoc()->as(); if (responseVariant[id].isNull()) responseVariant.createNestedObject(id); responseVariant[id][key] = (char *)value; //copy!! } void SysModWeb::addResponseV(const char * id, const char * key, const char * format, ...) { - JsonVariant responseVariant = (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?responseDoc0:responseDoc1)->as(); + JsonVariant responseVariant = getResponseDoc()->as(); if (responseVariant[id].isNull()) responseVariant.createNestedObject(id); va_list args; va_start(args, format); @@ -404,17 +410,17 @@ void SysModWeb::addResponseV(const char * id, const char * key, const char * for } void SysModWeb::addResponseI(const char * id, const char * key, int value) { //temporary, use overloading - JsonVariant responseVariant = (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?responseDoc0:responseDoc1)->as(); + JsonVariant responseVariant = getResponseDoc()->as(); if (responseVariant[id].isNull()) responseVariant.createNestedObject(id); responseVariant[id][key] = value; } void SysModWeb::addResponseB(const char * id, const char * key, bool value) { //temporary, use overloading - JsonVariant responseVariant = (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?responseDoc0:responseDoc1)->as(); + JsonVariant responseVariant = getResponseDoc()->as(); if (responseVariant[id].isNull()) responseVariant.createNestedObject(id); responseVariant[id][key] = value; } JsonArray SysModWeb::addResponseA(const char * id, const char * key) { - JsonVariant responseVariant = (strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?responseDoc0:responseDoc1)->as(); + JsonVariant responseVariant = getResponseDoc()->as(); if (responseVariant[id].isNull()) responseVariant.createNestedObject(id); return responseVariant[id].createNestedArray(key); } @@ -433,3 +439,9 @@ void SysModWeb::clientsToJson(JsonArray array, bool nameOnly, const char * filte } } } + +JsonDocument * SysModWeb::getResponseDoc() { + // print->print("response wsevent core %d %s\n", xPortGetCoreID(), pcTaskGetTaskName(NULL)); + + return strncmp(pcTaskGetTaskName(NULL), "loopTask", 8) != 0?web->responseDoc0:web->responseDoc1; +} diff --git a/src/SysModWeb.h b/src/SysModWeb.h index 080643da..e05e4acd 100644 --- a/src/SysModWeb.h +++ b/src/SysModWeb.h @@ -8,8 +8,6 @@ class SysModWeb:public Module { public: // TODO: which of these fields should be private? static AsyncWebSocket *ws; - static DynamicJsonDocument *responseDoc0; - static DynamicJsonDocument *responseDoc1; SysModWeb(); @@ -60,6 +58,9 @@ class SysModWeb:public Module { JsonArray addResponseA(const char * id, const char * key); void clientsToJson(JsonArray array, bool nameOnly = false, const char * filter = nullptr); + + //gets the right responseDoc, depending on which task you are in + JsonDocument * getResponseDoc(); private: bool modelUpdated = false; @@ -68,6 +69,9 @@ class SysModWeb:public Module { static AsyncWebServer *server; static const char * (*processWSFunc)(JsonVariant &); + static DynamicJsonDocument *responseDoc0; + static DynamicJsonDocument *responseDoc1; + }; static SysModWeb *web; \ No newline at end of file diff --git a/src/html_ui.h b/src/html_ui.h index 20c2b550..c3e8e999 100644 --- a/src/html_ui.h +++ b/src/html_ui.h @@ -7,304 +7,307 @@ */ // Autogenerated from data/index.htm, do not edit!! -const uint16_t PAGE_index_L = 4763; +const uint16_t PAGE_index_L = 4812; const uint8_t PAGE_index[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xd5, 0x3b, 0x5d, 0x73, 0xdb, 0x38, - 0x92, 0xef, 0xf9, 0x15, 0x34, 0xbd, 0xeb, 0x25, 0x2d, 0x9a, 0xa2, 0x64, 0x3b, 0x1f, 0x54, 0x68, - 0x57, 0xe2, 0x78, 0x26, 0xd9, 0x4a, 0x26, 0xa9, 0x49, 0x66, 0x52, 0x5b, 0x19, 0xdf, 0x0d, 0x44, - 0x42, 0x12, 0x27, 0x14, 0xc0, 0x23, 0x21, 0x5b, 0x1a, 0x59, 0x8f, 0xf7, 0x78, 0x0f, 0x57, 0x75, - 0x6f, 0x77, 0x55, 0xfb, 0xdf, 0xee, 0x17, 0xec, 0x4f, 0xb8, 0x6e, 0x00, 0xfc, 0x14, 0xe5, 0x38, - 0x33, 0xbb, 0x75, 0x77, 0x95, 0x8a, 0x0d, 0x02, 0x8d, 0xee, 0x46, 0xa3, 0xbb, 0xd1, 0xdd, 0x80, - 0x9f, 0xee, 0xbd, 0x78, 0x7b, 0xf1, 0xe1, 0x2f, 0xef, 0x2e, 0x8d, 0x99, 0x98, 0x27, 0x67, 0xc6, - 0xd3, 0xe2, 0x17, 0x25, 0x11, 0xfc, 0x12, 0xb1, 0x48, 0xe8, 0xd9, 0x7b, 0x41, 0xb2, 0x37, 0x3c, - 0x32, 0xc6, 0x2b, 0xe3, 0x0d, 0xe7, 0x0c, 0x9a, 0x8b, 0x84, 0xe6, 0x4f, 0xfb, 0x6a, 0xd4, 0x78, - 0x3a, 0xa7, 0x82, 0x18, 0x0f, 0xc2, 0x19, 0xc9, 0x72, 0x2a, 0x02, 0x73, 0x21, 0x26, 0x47, 0x8f, - 0x4d, 0xe8, 0xcf, 0xc5, 0x0a, 0xc6, 0x1f, 0x24, 0x64, 0x4c, 0x93, 0xf5, 0x9c, 0x64, 0xd3, 0x98, - 0x1d, 0x65, 0xf1, 0x74, 0x26, 0xfc, 0x87, 0xe9, 0x72, 0x13, 0xf2, 0xf9, 0x9c, 0x32, 0xb1, 0x9e, - 0x70, 0x26, 0x8e, 0xf2, 0xf8, 0x57, 0xea, 0x0f, 0xbc, 0x74, 0x39, 0x52, 0x9f, 0x38, 0xd3, 0x8f, - 0x05, 0x49, 0xe2, 0x70, 0xa4, 0x67, 0x26, 0x74, 0xa2, 0x26, 0x0a, 0xba, 0x6c, 0xcf, 0xda, 0xb8, - 0x82, 0x8c, 0x13, 0xaa, 0xe6, 0xa9, 0xb1, 0x09, 0x99, 0xc7, 0xc9, 0xca, 0x7f, 0x96, 0xc5, 0x24, - 0x71, 0x5e, 0xd2, 0xe4, 0x9a, 0x8a, 0x38, 0x24, 0x4e, 0x4e, 0x58, 0x7e, 0x94, 0xd3, 0x2c, 0x9e, - 0x8c, 0xc6, 0x3c, 0x8b, 0x68, 0x76, 0x14, 0xf2, 0x24, 0x21, 0x69, 0x4e, 0xfd, 0xa2, 0x31, 0xba, - 0x89, 0x23, 0x31, 0x03, 0xbc, 0xde, 0x1f, 0x0b, 0x98, 0x8c, 0x44, 0xf1, 0x22, 0xf7, 0xdd, 0x53, - 0x3a, 0x6f, 0x90, 0x32, 0x44, 0xe4, 0x34, 0xbf, 0x67, 0x6b, 0x35, 0xc5, 0x1f, 0xa4, 0x4b, 0x23, - 0xe7, 0x49, 0x1c, 0x19, 0xfb, 0x9e, 0xe7, 0x8d, 0x52, 0x12, 0x45, 0x31, 0x9b, 0xca, 0x05, 0x34, - 0x67, 0x64, 0x3e, 0x13, 0xb3, 0xa3, 0x70, 0x16, 0x27, 0x91, 0x45, 0xaf, 0x29, 0xb3, 0xd7, 0x63, - 0x12, 0x7e, 0x9e, 0x66, 0x7c, 0xc1, 0x22, 0x64, 0x8e, 0x67, 0xfe, 0xfe, 0x64, 0x88, 0xff, 0xb6, - 0x26, 0xce, 0xf8, 0x35, 0xcd, 0x3a, 0xc0, 0xa3, 0x28, 0xda, 0xb4, 0xd9, 0x42, 0xa9, 0x1d, 0x81, - 0x3c, 0xa7, 0xcc, 0x47, 0x49, 0x8e, 0xb6, 0x67, 0x3d, 0x7c, 0x84, 0xff, 0x46, 0x05, 0xc9, 0xc9, - 0x64, 0xe3, 0x86, 0x20, 0x49, 0x12, 0x33, 0x20, 0x12, 0xc5, 0x79, 0x9a, 0x90, 0x95, 0x3f, 0xcd, - 0xe2, 0x68, 0x84, 0x3f, 0x8e, 0x04, 0x9d, 0x43, 0x8f, 0xa0, 0x38, 0x7d, 0x31, 0x67, 0xb9, 0x9f, - 0xd1, 0x94, 0x12, 0x61, 0x9d, 0x38, 0x83, 0x49, 0x66, 0x6f, 0xdc, 0x31, 0x5f, 0x16, 0xb2, 0x38, - 0xae, 0x64, 0xf1, 0xf0, 0xe1, 0xc3, 0x51, 0x27, 0xc3, 0x1d, 0xa2, 0x2e, 0x85, 0x26, 0x15, 0x43, - 0xa9, 0x81, 0x6a, 0x87, 0x8b, 0x2c, 0x87, 0x79, 0x73, 0x58, 0xbf, 0x24, 0xb4, 0x53, 0x12, 0x9e, - 0x37, 0xd6, 0x0b, 0x41, 0x1e, 0x77, 0xf1, 0xf3, 0x05, 0xca, 0x6d, 0x6a, 0x2e, 0x12, 0x73, 0x34, - 0x4e, 0x57, 0x51, 0xae, 0x10, 0x47, 0x5c, 0x08, 0xaa, 0x30, 0x6f, 0xfc, 0x8c, 0x73, 0xb1, 0x3e, - 0x3a, 0x0a, 0x8f, 0x06, 0xfe, 0xfe, 0x60, 0x30, 0x18, 0x61, 0x73, 0x22, 0x85, 0x2b, 0x9b, 0x43, - 0x7f, 0x7f, 0x38, 0x1c, 0xca, 0xe6, 0xb1, 0xbf, 0x7f, 0x7c, 0x7c, 0x2c, 0x9b, 0x27, 0xfe, 0xfe, - 0xc9, 0xc9, 0x89, 0x6c, 0x9e, 0xfa, 0xfb, 0xa7, 0xa7, 0xa7, 0xb2, 0xf9, 0xd0, 0x97, 0xcc, 0x62, - 0xf3, 0xb1, 0xbf, 0xff, 0xf8, 0xf1, 0x63, 0xd9, 0x1c, 0xfb, 0xfb, 0xe3, 0xf1, 0x58, 0x36, 0x43, - 0x7f, 0x3f, 0x0c, 0x43, 0xd9, 0xa4, 0xfe, 0x3e, 0xa5, 0x54, 0x36, 0x23, 0x25, 0x5d, 0x6c, 0x82, - 0x3c, 0xc2, 0x63, 0x45, 0x6d, 0x0a, 0x84, 0x43, 0xc5, 0x4e, 0x02, 0xd4, 0x1e, 0x13, 0xd9, 0x5c, - 0xf9, 0xfb, 0xe4, 0x89, 0x07, 0x4d, 0x01, 0x78, 0x3d, 0x57, 0xd1, 0xe5, 0x7e, 0x36, 0x1d, 0x13, - 0xeb, 0xf8, 0xc4, 0x31, 0x8a, 0xff, 0x9e, 0xfb, 0xc4, 0x96, 0x63, 0x62, 0xbc, 0x3d, 0x78, 0x4d, - 0x32, 0x4b, 0x62, 0xb0, 0x0b, 0x18, 0xa2, 0x80, 0x06, 0xde, 0xd0, 0x31, 0xaa, 0x1f, 0xdb, 0x70, - 0x33, 0x05, 0x77, 0x3a, 0x70, 0x8c, 0xe2, 0x7f, 0x13, 0x08, 0xac, 0xf2, 0x11, 0x6e, 0x08, 0xb4, - 0xd2, 0xa2, 0x05, 0xb3, 0x1e, 0x1e, 0xab, 0xbe, 0x71, 0xea, 0x0f, 0x4e, 0x60, 0x07, 0xd4, 0x0f, - 0x4f, 0xb7, 0x10, 0x06, 0x46, 0x9e, 0xc0, 0xa7, 0x67, 0x3c, 0xc2, 0x9f, 0x72, 0x56, 0xe4, 0x33, - 0xce, 0x50, 0x44, 0xf9, 0x34, 0xf5, 0xcd, 0x71, 0xc2, 0xc3, 0xcf, 0x26, 0x0e, 0xcc, 0x85, 0x8f, - 0x0e, 0x65, 0x1f, 0x54, 0x9f, 0xc5, 0x2c, 0x5a, 0xa7, 0x3c, 0x8f, 0x45, 0xcc, 0x99, 0x3f, 0x89, - 0x97, 0x14, 0xb5, 0x54, 0x08, 0x3e, 0xf7, 0x43, 0x92, 0x84, 0x96, 0x62, 0x6e, 0x3c, 0xb3, 0x8d, - 0x9e, 0x71, 0x9a, 0x2e, 0xed, 0x91, 0x74, 0x51, 0x48, 0xb2, 0x50, 0x1f, 0xe8, 0x6d, 0x69, 0x97, - 0xec, 0xd9, 0x52, 0x53, 0x94, 0xfa, 0xaf, 0x47, 0x40, 0x8e, 0x2e, 0xfd, 0x23, 0xb0, 0xf3, 0x39, - 0x8f, 0x48, 0xd2, 0x26, 0x2d, 0xb1, 0x7b, 0x05, 0x07, 0xde, 0x48, 0xb9, 0x52, 0x6f, 0x24, 0x78, - 0x8a, 0xdd, 0x6d, 0xa4, 0x8a, 0x3b, 0xd8, 0x3f, 0x7b, 0x24, 0x32, 0xf0, 0x7a, 0x13, 0x9e, 0xcd, - 0x7d, 0xd9, 0x42, 0xab, 0xfd, 0x8b, 0x85, 0xfe, 0x4d, 0x0f, 0x29, 0x2a, 0x25, 0x94, 0xe1, 0x9e, - 0xe4, 0xe5, 0x12, 0x1e, 0x97, 0x3e, 0x59, 0x3a, 0x5b, 0xfc, 0x44, 0x8d, 0x9f, 0x24, 0xfc, 0xc6, - 0x27, 0x0b, 0xc1, 0x37, 0x0f, 0x9e, 0xf6, 0x95, 0xa3, 0x07, 0x87, 0x1f, 0x66, 0x71, 0x2a, 0xce, - 0x1e, 0x00, 0x69, 0x23, 0xcd, 0xe8, 0x75, 0xcc, 0x17, 0xf9, 0x37, 0x0b, 0x16, 0x22, 0x7a, 0x27, - 0xa3, 0xb0, 0xbc, 0x8c, 0x66, 0x01, 0x5b, 0x24, 0x89, 0x93, 0x87, 0x94, 0x51, 0xd5, 0x0c, 0xc9, - 0x9c, 0x66, 0x44, 0xb6, 0x47, 0x13, 0x0d, 0x6d, 0x2c, 0xc0, 0x47, 0xc3, 0x54, 0x8b, 0x3a, 0xb9, - 0xbd, 0x8e, 0x27, 0x96, 0x99, 0x5e, 0xc7, 0xf4, 0xc6, 0x0c, 0x02, 0x7a, 0x70, 0xf0, 0x4b, 0xce, - 0xd9, 0x8f, 0x24, 0x59, 0xd0, 0xdc, 0x95, 0xbd, 0xf6, 0x3a, 0xa1, 0xc2, 0x00, 0x6c, 0xf4, 0xc6, - 0xf8, 0x21, 0x66, 0xe2, 0xf1, 0xb3, 0x2c, 0x23, 0x2b, 0x2b, 0xb7, 0x1d, 0x16, 0x4c, 0x5f, 0x45, - 0xc5, 0x5c, 0x7b, 0x04, 0x78, 0xda, 0x73, 0x5d, 0x86, 0xf3, 0x61, 0xb3, 0xc1, 0x1f, 0x50, 0x37, - 0xe1, 0x53, 0xcb, 0x04, 0x3f, 0x96, 0x90, 0x10, 0x9d, 0x26, 0x35, 0x42, 0xc2, 0xae, 0x49, 0xbe, - 0x67, 0xe2, 0xde, 0x22, 0x89, 0xf0, 0xd2, 0x32, 0x55, 0x1f, 0x74, 0x51, 0x57, 0x9e, 0x14, 0x01, - 0x53, 0xbf, 0x1d, 0xea, 0xce, 0x28, 0xee, 0x09, 0x74, 0xa8, 0x86, 0xc3, 0xdc, 0x94, 0xc0, 0xba, - 0xc5, 0x77, 0x3c, 0xa2, 0xae, 0xc6, 0x7b, 0xa1, 0x3c, 0xbd, 0xc3, 0x90, 0x3d, 0xf8, 0xe5, 0xc6, - 0x51, 0xa0, 0x39, 0x84, 0x0f, 0x90, 0xfa, 0x25, 0x1c, 0x02, 0xe2, 0x75, 0x9c, 0x0b, 0x90, 0x50, - 0x06, 0xe4, 0xe0, 0x0c, 0xfc, 0x6c, 0x3a, 0x34, 0x38, 0x5b, 0x0b, 0x3e, 0x9d, 0x26, 0xf4, 0x0d, - 0x2a, 0x87, 0x45, 0xc1, 0xc1, 0x67, 0x53, 0x2a, 0xec, 0x8d, 0xbd, 0xc9, 0xa8, 0x58, 0x64, 0xcc, - 0x18, 0x04, 0xc1, 0xd6, 0xf2, 0x22, 0x9a, 0x8a, 0xd9, 0xb9, 0xdc, 0x0c, 0x7a, 0x33, 0x7c, 0x61, - 0x31, 0x87, 0xda, 0xbe, 0xfe, 0x3c, 0x56, 0x9f, 0xce, 0x9e, 0xb7, 0x41, 0x09, 0x8f, 0x39, 0xc9, - 0x22, 0x94, 0xf0, 0x4e, 0x79, 0x8e, 0xf4, 0xc4, 0xe7, 0x08, 0x69, 0x49, 0xd1, 0xaa, 0x49, 0x36, - 0xa0, 0xd1, 0x5c, 0xec, 0x0d, 0x36, 0xe5, 0x26, 0x56, 0x64, 0xe5, 0x36, 0x22, 0x56, 0x58, 0xb2, - 0x0b, 0x5c, 0x5f, 0x80, 0x46, 0xc1, 0x81, 0x64, 0x99, 0x43, 0x9c, 0x9c, 0x04, 0x27, 0xb8, 0x37, - 0xcc, 0x0d, 0x13, 0x4a, 0xb2, 0xef, 0x69, 0x28, 0x2c, 0xcf, 0xf1, 0x1c, 0xda, 0x92, 0xab, 0xed, - 0x74, 0xef, 0x3c, 0x09, 0xde, 0x10, 0x31, 0x73, 0xe7, 0x31, 0xa8, 0x8b, 0x9a, 0xd2, 0xdf, 0x92, - 0x43, 0x13, 0xd3, 0xf6, 0x78, 0x41, 0x21, 0x53, 0xb8, 0x40, 0xbd, 0x79, 0x66, 0x15, 0xe8, 0x8e, - 0xc8, 0x61, 0x37, 0x42, 0xbb, 0x3f, 0xec, 0xd6, 0x2a, 0xbe, 0x10, 0xe9, 0x42, 0xe4, 0x36, 0x98, - 0x13, 0xba, 0x09, 0x83, 0x1b, 0x7c, 0x62, 0xec, 0x84, 0x02, 0x0c, 0xdc, 0x4d, 0x68, 0x54, 0xc1, - 0xc7, 0x08, 0xaf, 0xfb, 0xf2, 0x4f, 0xc9, 0x55, 0x0f, 0x7e, 0xf4, 0x06, 0xea, 0xd7, 0xf0, 0xea, - 0x6c, 0xe8, 0x1d, 0x1c, 0x80, 0xb8, 0x26, 0x71, 0x92, 0xbc, 0x47, 0xdb, 0x0b, 0x7e, 0x06, 0xcf, - 0x69, 0xfd, 0x61, 0x8d, 0xa0, 0x1b, 0x47, 0xfe, 0x06, 0xe8, 0xa2, 0x35, 0xbc, 0xda, 0xd8, 0x3f, - 0x83, 0x6e, 0x8d, 0x29, 0x1c, 0xa0, 0xef, 0x60, 0x79, 0x96, 0x8d, 0x9a, 0x96, 0x85, 0x56, 0xfc, - 0xc9, 0xbb, 0x3a, 0xdc, 0xb5, 0xb8, 0x6d, 0x21, 0xa1, 0x0b, 0xe8, 0x65, 0x4e, 0xfc, 0x69, 0xd0, - 0x39, 0x6b, 0x97, 0x6c, 0x71, 0x9a, 0xe3, 0x9e, 0x1c, 0x12, 0xd8, 0xd3, 0xe1, 0xa1, 0x94, 0xef, - 0xbb, 0x57, 0xc8, 0x02, 0xf2, 0x6f, 0xd9, 0xb0, 0xff, 0xbd, 0xe0, 0x78, 0x44, 0x93, 0x1c, 0xec, - 0xad, 0x6e, 0x88, 0xa5, 0xfa, 0xd4, 0x24, 0x67, 0x30, 0x6e, 0xa0, 0x54, 0xcc, 0x6d, 0x5d, 0xd8, - 0xea, 0x51, 0x2e, 0xe5, 0xfe, 0x78, 0xf5, 0x76, 0xdc, 0x1f, 0x75, 0x97, 0x33, 0x09, 0xc0, 0x00, - 0xb6, 0x2c, 0xe0, 0xf8, 0x45, 0xe9, 0xc8, 0xac, 0xbd, 0xc2, 0x11, 0xde, 0xde, 0xb6, 0xe7, 0x6f, - 0xbb, 0x36, 0xe9, 0x9e, 0x60, 0xaf, 0xbb, 0xf8, 0x3f, 0x7e, 0x61, 0x84, 0x19, 0x44, 0x5c, 0xd4, - 0x40, 0x43, 0x2d, 0xb0, 0x82, 0x39, 0x35, 0x80, 0xc7, 0x14, 0x74, 0x8a, 0x9a, 0x68, 0xe7, 0x95, - 0x07, 0x06, 0xf8, 0x0f, 0x2f, 0xbf, 0xbf, 0xbc, 0x74, 0x3f, 0xd2, 0xf1, 0xb7, 0xaf, 0xbf, 0xd7, - 0xfd, 0xd6, 0x5a, 0xb9, 0x36, 0x9f, 0x3a, 0x84, 0x09, 0x88, 0x9b, 0x63, 0x68, 0xef, 0x79, 0x0e, - 0x49, 0xd2, 0x19, 0x81, 0xc6, 0xa6, 0x85, 0x9a, 0x4c, 0x04, 0xd0, 0xab, 0x63, 0x76, 0x21, 0x01, - 0xb8, 0x40, 0x1b, 0x7e, 0x86, 0x53, 0x2c, 0xaf, 0x63, 0xe4, 0x02, 0x0f, 0x27, 0x34, 0x6f, 0xdb, - 0xb1, 0x0a, 0xcf, 0x5f, 0xb2, 0xf3, 0x8e, 0x66, 0x79, 0x0a, 0xe6, 0x1f, 0x5f, 0xd3, 0x0b, 0x39, - 0x66, 0x9d, 0x9c, 0x3a, 0x43, 0x67, 0xe0, 0x9c, 0x7a, 0x9e, 0x6d, 0xbb, 0xc5, 0x81, 0x88, 0xc8, - 0xa4, 0x87, 0x78, 0x74, 0x6a, 0xeb, 0xe3, 0x03, 0x38, 0xe2, 0x9f, 0x9f, 0xa9, 0x5e, 0x44, 0xad, - 0xcf, 0x97, 0x12, 0xf3, 0x7b, 0xfc, 0xb6, 0xdd, 0xea, 0x94, 0x94, 0x3b, 0xb8, 0xbd, 0xb1, 0x3b, - 0xb6, 0x60, 0x8d, 0x46, 0xc9, 0x82, 0xa3, 0xd3, 0x43, 0xab, 0xdb, 0x58, 0x8e, 0x06, 0xe0, 0x0b, - 0xc0, 0x91, 0x75, 0x42, 0x28, 0xc3, 0x50, 0x20, 0xbc, 0x1b, 0x44, 0xfa, 0x69, 0x09, 0x81, 0xfe, - 0x64, 0xc7, 0x76, 0xe3, 0x72, 0xaa, 0x99, 0xf7, 0xd1, 0xd3, 0x2d, 0x47, 0x14, 0x7f, 0xc9, 0x11, - 0xc5, 0x4d, 0x47, 0x44, 0x10, 0x5e, 0xf7, 0xc9, 0x63, 0xb2, 0x38, 0x18, 0xb4, 0x58, 0xd3, 0x19, - 0xec, 0xee, 0xb7, 0x94, 0x43, 0x0e, 0x98, 0xad, 0xac, 0x81, 0x73, 0x0c, 0xbb, 0xf5, 0xd0, 0x76, - 0xf2, 0x1a, 0xcc, 0x1b, 0x9a, 0xcf, 0x9e, 0x93, 0x3c, 0x0e, 0xc1, 0xf2, 0x29, 0xa6, 0x63, 0xd6, - 0x5a, 0x86, 0x1a, 0xea, 0x68, 0x44, 0x05, 0xe3, 0x29, 0x09, 0x63, 0xb1, 0x82, 0xd0, 0x1b, 0x54, - 0x2c, 0x6e, 0x4d, 0x95, 0x96, 0x33, 0x8a, 0x9b, 0x9b, 0xcf, 0x7a, 0xa7, 0x87, 0x04, 0x9c, 0x17, - 0xb8, 0x0e, 0x6c, 0x0c, 0xae, 0x1c, 0x2e, 0x1b, 0xc3, 0x2b, 0x5b, 0x85, 0x16, 0x78, 0x90, 0x5a, - 0xb1, 0xbd, 0xd9, 0x69, 0xfd, 0xc7, 0xff, 0x20, 0xaf, 0x72, 0xfc, 0x0f, 0xf3, 0x2a, 0x1d, 0xe7, - 0x8c, 0xbd, 0xae, 0xdb, 0xd7, 0x7b, 0xf0, 0xb3, 0x56, 0x3d, 0xe0, 0xd1, 0xa7, 0x5e, 0xa3, 0x4b, - 0x1f, 0x74, 0x3a, 0x9e, 0x39, 0x19, 0xe1, 0x26, 0x67, 0xc1, 0xe0, 0x5e, 0xa7, 0xd8, 0xef, 0x51, - 0x9e, 0xec, 0xa9, 0xda, 0x17, 0x99, 0xe8, 0x02, 0xd7, 0xd0, 0xcb, 0xa6, 0x62, 0x06, 0xbe, 0xad, - 0xd9, 0xff, 0x29, 0xbb, 0x72, 0xaf, 0xe3, 0x3c, 0x86, 0xe4, 0x35, 0xc8, 0x3f, 0x1d, 0x1f, 0x66, - 0x3d, 0x8a, 0xc7, 0x9e, 0x6c, 0xa8, 0x13, 0x50, 0x35, 0xe1, 0x14, 0x1c, 0x78, 0xce, 0xce, 0xb9, - 0x9d, 0x78, 0xe7, 0x5a, 0x01, 0x5d, 0x19, 0x21, 0xd7, 0xf4, 0x4c, 0x39, 0x25, 0xd3, 0x2c, 0xb0, - 0x5f, 0xf5, 0x87, 0xa7, 0xa7, 0x4e, 0xf5, 0x0d, 0x84, 0xdb, 0x3d, 0x43, 0xd9, 0x63, 0xc3, 0xe9, - 0x95, 0xf5, 0x7a, 0xa3, 0xff, 0x7f, 0x6a, 0xb6, 0x51, 0xe2, 0xc9, 0xb8, 0x20, 0xd2, 0xaa, 0x96, - 0xbd, 0xc0, 0xf5, 0x06, 0x4e, 0xab, 0x77, 0xa5, 0x7a, 0x4b, 0x2d, 0x53, 0x0d, 0x25, 0x5a, 0xed, - 0x79, 0xed, 0xad, 0xd3, 0x4e, 0x85, 0x87, 0x5f, 0x0a, 0xf9, 0xb6, 0x62, 0xb6, 0x61, 0x15, 0x9e, - 0x0d, 0xc0, 0x85, 0xf3, 0xce, 0x48, 0x6c, 0x78, 0x98, 0x60, 0xd0, 0x05, 0x5e, 0xe2, 0x64, 0x84, - 0x6a, 0xf6, 0xe5, 0x98, 0x71, 0x15, 0x40, 0x22, 0xbb, 0x7a, 0x3a, 0xf0, 0x46, 0xab, 0x5e, 0x4f, - 0xaa, 0xe6, 0x12, 0x7b, 0x96, 0x4f, 0x87, 0xa3, 0x25, 0x74, 0xe4, 0x9f, 0x62, 0x54, 0xaa, 0x58, - 0xe9, 0x56, 0x7c, 0x77, 0x74, 0x15, 0xeb, 0x98, 0x2a, 0x2e, 0xa3, 0xab, 0xf8, 0x8e, 0xe8, 0x6a, - 0x79, 0x98, 0xf4, 0xb8, 0xb3, 0x3a, 0x4c, 0x30, 0xf8, 0x49, 0x76, 0x05, 0x3f, 0x31, 0x04, 0x3f, - 0x32, 0x89, 0x52, 0xc9, 0x53, 0x95, 0x45, 0xa1, 0xec, 0xa2, 0x20, 0xe2, 0xe1, 0x02, 0xeb, 0x64, - 0xce, 0x4d, 0xae, 0xd3, 0x25, 0x59, 0x76, 0xf8, 0x2e, 0x0b, 0x3c, 0x87, 0x65, 0x6f, 0x27, 0x17, - 0xaa, 0xfa, 0x12, 0x9c, 0x38, 0x3a, 0x65, 0x7a, 0x05, 0xe9, 0x84, 0xe9, 0x60, 0x1d, 0xef, 0x5b, - 0x4c, 0x20, 0x40, 0xe5, 0x23, 0xf0, 0x1e, 0x35, 0x25, 0x08, 0xd6, 0x9b, 0x2a, 0xcf, 0x42, 0xdf, - 0x40, 0xd1, 0x8d, 0xc8, 0x0c, 0x22, 0xc2, 0x8d, 0xba, 0x4c, 0x28, 0x12, 0x7c, 0xbe, 0x92, 0x43, - 0xd5, 0xee, 0x42, 0xee, 0x53, 0x87, 0x54, 0xb1, 0x87, 0x06, 0x6e, 0x00, 0xce, 0x08, 0x8b, 0x12, - 0xfa, 0x23, 0x1a, 0x62, 0x9c, 0x80, 0x5f, 0xbf, 0x80, 0x8e, 0x29, 0xb5, 0x5a, 0x69, 0x56, 0x37, - 0x94, 0x59, 0xc3, 0xc3, 0xd9, 0x6b, 0x4e, 0x22, 0x98, 0x37, 0x27, 0x9f, 0xe9, 0xc7, 0xf7, 0x20, - 0xd7, 0x98, 0xc5, 0x42, 0x2f, 0x18, 0xbe, 0xa2, 0x8e, 0x6c, 0xe9, 0xba, 0xc4, 0x17, 0x2a, 0x7c, - 0x4e, 0x37, 0x1d, 0x67, 0x6f, 0x50, 0xa3, 0x54, 0x10, 0xc0, 0x00, 0xed, 0x06, 0x7c, 0x95, 0x5c, - 0xa3, 0x76, 0x91, 0xc0, 0xa9, 0x10, 0x69, 0xee, 0x43, 0x66, 0x74, 0x03, 0x19, 0x3a, 0xbf, 0x01, - 0xf6, 0x43, 0x65, 0x1d, 0x29, 0xd8, 0x09, 0x87, 0xfd, 0x38, 0x37, 0x6f, 0xf2, 0xdc, 0xf4, 0xe1, - 0xa7, 0x69, 0xf7, 0x4c, 0xbf, 0xdf, 0x37, 0x7b, 0x6d, 0xd0, 0x19, 0xcf, 0x05, 0x03, 0x7b, 0xe9, - 0x99, 0x7d, 0x80, 0x1a, 0x35, 0x24, 0xa1, 0xa8, 0x1b, 0x8b, 0x2c, 0x91, 0xc1, 0xd4, 0x8d, 0x3a, - 0x3c, 0x21, 0x34, 0x7b, 0xcf, 0xc3, 0xcf, 0x14, 0x65, 0x0b, 0x7d, 0xee, 0x38, 0x66, 0x24, 0x5b, - 0x7d, 0x58, 0xa5, 0x34, 0x30, 0x09, 0x26, 0x64, 0xe3, 0xc5, 0x64, 0x82, 0xf1, 0x17, 0x8c, 0x71, - 0x36, 0xa7, 0x79, 0x4e, 0xa6, 0x34, 0xc0, 0x34, 0x11, 0x16, 0x41, 0xdd, 0x88, 0x08, 0x62, 0xc4, - 0x70, 0x5e, 0x13, 0x16, 0x52, 0x70, 0xc3, 0x32, 0x87, 0x7b, 0x2e, 0xa7, 0xd8, 0x45, 0x72, 0x5d, - 0x6a, 0x8c, 0xa3, 0xe0, 0x31, 0xd2, 0xac, 0x6b, 0x91, 0x2d, 0xfd, 0xcf, 0x5a, 0x9e, 0x1f, 0xba, - 0x1e, 0x02, 0x27, 0x88, 0xcc, 0xf6, 0x6b, 0x91, 0x94, 0x74, 0x9e, 0x81, 0x59, 0xd4, 0x1b, 0x12, - 0xdb, 0x1c, 0x29, 0xb3, 0xff, 0xf3, 0xfb, 0xb7, 0xdf, 0x61, 0x02, 0x9c, 0x53, 0xcd, 0x8f, 0x3d, - 0x6a, 0xa8, 0x25, 0xa4, 0xa5, 0x3c, 0x04, 0xbe, 0x7f, 0x48, 0x61, 0x90, 0x5a, 0xcc, 0xf6, 0x25, - 0x93, 0x6e, 0x9c, 0xab, 0x84, 0x93, 0xd9, 0xe7, 0xcd, 0x48, 0x08, 0x84, 0x94, 0xd1, 0x90, 0x42, - 0x74, 0x68, 0x4c, 0x35, 0x92, 0x97, 0x1f, 0xde, 0xbc, 0x36, 0x31, 0x97, 0xae, 0x77, 0x58, 0xd2, - 0x50, 0xa0, 0xb3, 0x65, 0x05, 0x9e, 0xed, 0x37, 0xf0, 0x5d, 0x66, 0x19, 0xcf, 0x7c, 0xf4, 0x9e, - 0x52, 0xa0, 0x88, 0x67, 0xb3, 0x51, 0xf2, 0x0c, 0x13, 0x9e, 0x2b, 0x69, 0xb6, 0x39, 0x90, 0x23, - 0x06, 0x28, 0x15, 0xf0, 0x02, 0x31, 0x8f, 0xdc, 0xb2, 0xaf, 0x93, 0x50, 0x66, 0x9b, 0x0e, 0x1c, - 0xd7, 0x1f, 0xe2, 0x39, 0x05, 0xaf, 0x6d, 0xa9, 0xed, 0x77, 0x06, 0x18, 0xe3, 0x16, 0x56, 0xae, - 0xb9, 0xe0, 0x29, 0x65, 0x9d, 0x4c, 0xe0, 0x00, 0x52, 0xae, 0xa5, 0x1a, 0x0d, 0x01, 0x60, 0x79, - 0x01, 0xf5, 0xa0, 0x2d, 0xd0, 0xf2, 0x68, 0x16, 0x70, 0x34, 0x83, 0x8f, 0xcb, 0x79, 0x26, 0x2c, - 0xab, 0xc0, 0xa1, 0xa6, 0x69, 0x0b, 0xa7, 0x2e, 0x3f, 0x62, 0x2e, 0xdf, 0x80, 0x8b, 0x82, 0x79, - 0x2d, 0xec, 0x42, 0xab, 0x06, 0xf2, 0x2a, 0x6b, 0x32, 0x16, 0x0d, 0xb4, 0x10, 0xd0, 0x3a, 0xcd, - 0x5e, 0xe1, 0xa5, 0xec, 0xca, 0x5f, 0x59, 0x45, 0xab, 0x37, 0xb0, 0xff, 0x58, 0x73, 0x5d, 0xb6, - 0x8c, 0x41, 0xb8, 0x3a, 0xf0, 0x50, 0x73, 0x84, 0x2c, 0xb3, 0xc8, 0x6b, 0x03, 0x55, 0xb4, 0x11, - 0x6e, 0xcc, 0x80, 0x3c, 0xd2, 0x0e, 0xa4, 0x0b, 0x20, 0xa9, 0x85, 0x75, 0x13, 0xdb, 0x31, 0xe7, - 0xf2, 0x32, 0x02, 0x6c, 0x93, 0xb9, 0x02, 0x4c, 0xc3, 0x5e, 0x5b, 0x5c, 0xce, 0x8e, 0xe2, 0x6b, - 0x13, 0x32, 0x86, 0x18, 0xe2, 0x7c, 0xf8, 0xe1, 0x70, 0x37, 0xca, 0xc8, 0x74, 0x8a, 0x25, 0xf1, - 0x00, 0x03, 0x4e, 0x38, 0x35, 0x48, 0x9e, 0x7f, 0x07, 0x06, 0x19, 0x98, 0x63, 0xbe, 0x34, 0x6b, - 0xe5, 0x9d, 0xd9, 0x50, 0x96, 0x76, 0x76, 0x51, 0xe4, 0x2e, 0x49, 0x41, 0xf8, 0x91, 0x2e, 0xe3, - 0xd8, 0x35, 0x8e, 0x53, 0x98, 0x58, 0x67, 0xd5, 0xbc, 0x64, 0x48, 0x50, 0x21, 0x4f, 0x24, 0x48, - 0xcc, 0xe0, 0x90, 0xc6, 0x6a, 0x52, 0xc9, 0x59, 0x22, 0xf9, 0x0e, 0xcc, 0x70, 0x46, 0xc3, 0xcf, - 0xc8, 0x8a, 0x23, 0x1a, 0x14, 0x12, 0x45, 0x81, 0xa8, 0xd2, 0x93, 0xba, 0x33, 0x01, 0x04, 0xa4, - 0x4e, 0xe7, 0xe3, 0xab, 0x77, 0xed, 0x69, 0xa4, 0xcd, 0x29, 0x9c, 0x84, 0xa0, 0x73, 0x8b, 0xf4, - 0x39, 0x5f, 0x5a, 0x5c, 0xc7, 0xc5, 0x58, 0xf5, 0x91, 0xd7, 0x04, 0x35, 0xf9, 0x55, 0xbc, 0xa6, - 0x92, 0xcf, 0x16, 0x0e, 0xda, 0x62, 0xce, 0xd1, 0xf2, 0x56, 0x68, 0x1a, 0x12, 0xaf, 0x89, 0xb8, - 0x76, 0x17, 0x61, 0xd6, 0x96, 0x23, 0xf0, 0x9a, 0x09, 0x82, 0x81, 0x48, 0x7d, 0x65, 0x72, 0x5d, - 0x75, 0xfc, 0x5b, 0xf2, 0xde, 0x5a, 0x96, 0x9c, 0x38, 0xe6, 0xd1, 0x0a, 0x68, 0x57, 0x8b, 0xca, - 0x69, 0x02, 0x01, 0x41, 0xb5, 0x2a, 0x59, 0x5c, 0xca, 0x78, 0xa9, 0x1d, 0x29, 0x72, 0xda, 0x5c, - 0x59, 0x4d, 0x03, 0x20, 0x33, 0x61, 0x4a, 0x07, 0xf4, 0x5a, 0x98, 0x7b, 0x8d, 0x27, 0x27, 0x6a, - 0x79, 0x4d, 0xec, 0xba, 0x77, 0x5b, 0x25, 0x24, 0x1f, 0xf7, 0x24, 0xa5, 0x18, 0xad, 0x13, 0xa3, - 0x5d, 0x35, 0x40, 0x7d, 0x96, 0x6d, 0xb9, 0x02, 0x35, 0xdf, 0x28, 0xc7, 0xe5, 0x26, 0xbf, 0x97, - 0x9d, 0xf5, 0x0a, 0x61, 0x37, 0x8b, 0x52, 0x54, 0xba, 0x9a, 0x59, 0x29, 0x00, 0x1a, 0xe3, 0x6f, - 0x50, 0x80, 0xa2, 0x2a, 0x5a, 0xd7, 0x80, 0xdf, 0x52, 0xcc, 0x04, 0x83, 0x90, 0x22, 0xfe, 0x00, - 0xb1, 0x62, 0x2f, 0x30, 0xff, 0xf6, 0xd7, 0xff, 0xf8, 0x37, 0xb3, 0xa6, 0xad, 0xd0, 0x0b, 0x69, - 0x23, 0xa9, 0xf8, 0xb5, 0x92, 0x5d, 0x62, 0xde, 0xad, 0xab, 0x05, 0x92, 0x06, 0xb3, 0xd0, 0x11, - 0xbd, 0x65, 0xc9, 0x2a, 0x40, 0x4d, 0xf9, 0xad, 0xcc, 0x57, 0x9a, 0xc2, 0xbb, 0x34, 0xa5, 0x63, - 0x6d, 0xa3, 0x62, 0x6d, 0x48, 0xf6, 0xe0, 0xc0, 0x1c, 0x2f, 0x84, 0xe0, 0xcc, 0xdc, 0xab, 0xa9, - 0x6e, 0x69, 0xa3, 0xd4, 0x65, 0x3c, 0xa2, 0x68, 0x52, 0xae, 0xe0, 0xaf, 0x21, 0xb4, 0x48, 0xe8, - 0x6b, 0x7e, 0x43, 0xb3, 0x0b, 0x02, 0x47, 0xac, 0xad, 0x6c, 0x57, 0x68, 0xcb, 0x52, 0xbe, 0x48, - 0xaf, 0x6e, 0xb7, 0x03, 0xa5, 0x10, 0x87, 0x66, 0xb9, 0x90, 0x22, 0xaa, 0x37, 0x9b, 0xa2, 0xfc, - 0x1a, 0x8d, 0xfe, 0xbb, 0x18, 0x0f, 0xaf, 0x14, 0x50, 0x95, 0xa2, 0xf1, 0x40, 0x4f, 0xd4, 0x11, - 0xd1, 0x16, 0xd1, 0xc1, 0x01, 0xef, 0x62, 0x87, 0x34, 0x1c, 0x2e, 0x29, 0xf9, 0x21, 0xca, 0xe1, - 0xaa, 0xb9, 0x4e, 0xe5, 0x77, 0x0b, 0x8d, 0x3a, 0xb7, 0x2a, 0x8e, 0x89, 0x2b, 0x87, 0x69, 0x54, - 0xf1, 0x4b, 0xbe, 0xc2, 0x3c, 0x15, 0xc2, 0x9e, 0xd9, 0xb2, 0xcf, 0x0b, 0x4d, 0xb2, 0xae, 0x39, - 0xb6, 0x5f, 0x2c, 0xab, 0x9b, 0x0f, 0xd9, 0xfa, 0x02, 0x17, 0x95, 0x7a, 0x76, 0x33, 0xa1, 0xc7, - 0x25, 0x0f, 0xcf, 0x25, 0xb1, 0x26, 0x07, 0x5f, 0x4d, 0xf0, 0xeb, 0x96, 0xfd, 0x0a, 0xb7, 0xa2, - 0x61, 0x2d, 0x9f, 0xa4, 0x29, 0x9a, 0x8e, 0x99, 0xc2, 0x49, 0x71, 0xc3, 0xb3, 0x08, 0x9a, 0x6c, - 0x31, 0x1f, 0x43, 0x54, 0x7b, 0x05, 0xba, 0x12, 0x26, 0x8b, 0x88, 0xe6, 0x1a, 0x9d, 0x2d, 0x63, - 0x8c, 0xc2, 0x7c, 0xf1, 0xc6, 0xa1, 0x7e, 0x02, 0xfe, 0xf7, 0x7f, 0xfd, 0xab, 0xd9, 0xed, 0x39, - 0xef, 0x2b, 0x14, 0xf4, 0x3c, 0x75, 0xf4, 0x49, 0x1d, 0xfd, 0xdf, 0xfe, 0xfa, 0x9f, 0xff, 0x6e, - 0x42, 0xd7, 0xef, 0xc2, 0x6f, 0x97, 0x8b, 0x0b, 0x4a, 0xcd, 0x05, 0x41, 0x83, 0x64, 0x9e, 0x09, - 0x91, 0xc5, 0xb0, 0xfd, 0x14, 0xcc, 0x27, 0xfe, 0x15, 0x04, 0x66, 0x9e, 0x98, 0x28, 0xf2, 0x39, - 0x59, 0xaa, 0x2a, 0x49, 0x70, 0x62, 0x77, 0x9c, 0x84, 0x5b, 0x9a, 0x8f, 0x1e, 0xa6, 0xdd, 0x97, - 0xd8, 0x58, 0x38, 0x02, 0xcf, 0xd2, 0xf4, 0x86, 0x1c, 0x7d, 0xd5, 0x22, 0x86, 0x48, 0xff, 0x2c, - 0xf0, 0x94, 0xd3, 0x27, 0x98, 0x18, 0x12, 0xd5, 0xa9, 0x4c, 0x25, 0xa3, 0xff, 0x02, 0xf9, 0xa2, - 0xf8, 0x33, 0xa4, 0x8e, 0x40, 0x6f, 0xc3, 0x5c, 0x76, 0x70, 0xd0, 0x08, 0x04, 0x39, 0x20, 0x61, - 0x76, 0xa3, 0xde, 0x5d, 0x8f, 0xe8, 0xe1, 0x34, 0x29, 0xe2, 0x4d, 0x86, 0xa5, 0xa0, 0xb7, 0xe3, - 0x5f, 0xe0, 0x60, 0x72, 0x3f, 0xd3, 0x55, 0x0e, 0x63, 0xd2, 0xb5, 0x49, 0x6a, 0x68, 0xca, 0xf8, - 0x85, 0x11, 0x24, 0xd3, 0x7e, 0x0c, 0x93, 0x56, 0x8c, 0xfd, 0xe8, 0x27, 0x76, 0xe5, 0xca, 0x58, - 0x50, 0xfb, 0xb7, 0x51, 0xab, 0x1c, 0x52, 0x23, 0x68, 0xa8, 0x98, 0xd1, 0x61, 0x4e, 0x6d, 0x96, - 0x23, 0x82, 0xea, 0x90, 0x53, 0x14, 0xee, 0x74, 0xa3, 0xb7, 0xb7, 0xa5, 0xbf, 0xbd, 0x07, 0xf4, - 0xb9, 0x86, 0x29, 0xae, 0x3b, 0xdf, 0xc7, 0xe3, 0x24, 0x66, 0xd3, 0x9a, 0x2b, 0xf5, 0xd1, 0x19, - 0x7f, 0x0d, 0x2e, 0xbf, 0x40, 0x59, 0x5d, 0x1d, 0x56, 0xd8, 0x1a, 0xae, 0xbc, 0x5a, 0xe5, 0xa6, - 0x90, 0x94, 0x8e, 0x10, 0xef, 0x21, 0xab, 0x22, 0x96, 0x2c, 0xa4, 0x55, 0xcc, 0xfc, 0x5f, 0x91, - 0xd7, 0xf6, 0x9a, 0xa5, 0x0f, 0xe7, 0x81, 0x70, 0x41, 0x05, 0xb3, 0x95, 0x0a, 0x69, 0xb0, 0x46, - 0x57, 0x85, 0xc0, 0xfc, 0xf6, 0xb6, 0x88, 0x3d, 0x8a, 0xbe, 0x56, 0x10, 0xcc, 0xa5, 0xd5, 0xb4, - 0xe4, 0xa5, 0x81, 0x4b, 0x89, 0x25, 0xfc, 0xda, 0xde, 0x2e, 0xb9, 0x37, 0xb4, 0x8a, 0x5f, 0x57, - 0x3a, 0x05, 0xd0, 0x8e, 0x3a, 0xe4, 0xee, 0xb5, 0x5e, 0x65, 0x5a, 0x22, 0xf0, 0x46, 0x8d, 0xab, - 0xc0, 0x12, 0x97, 0x4c, 0x8f, 0x5f, 0x31, 0xa1, 0x75, 0xdf, 0x45, 0xef, 0x23, 0x2b, 0x65, 0xb0, - 0x13, 0x41, 0x20, 0xc0, 0x43, 0x6c, 0x0f, 0x04, 0x60, 0xbc, 0xa2, 0xd7, 0x1b, 0x61, 0x46, 0xab, - 0x8e, 0x4b, 0xc4, 0x8d, 0x34, 0x34, 0x2c, 0x4f, 0xd1, 0x18, 0x73, 0x30, 0xd6, 0xc6, 0xb7, 0x2e, - 0xb9, 0x9e, 0x79, 0x23, 0x5b, 0x0f, 0x64, 0x14, 0x1f, 0xb5, 0x58, 0x9e, 0xbd, 0x83, 0xbb, 0xb5, - 0x99, 0x51, 0xf0, 0x4f, 0x1e, 0x7a, 0xac, 0x83, 0x83, 0xbb, 0x45, 0x74, 0x6c, 0x3a, 0xdc, 0x51, - 0x78, 0x9d, 0x6d, 0x9e, 0x9d, 0x46, 0x90, 0xa0, 0x18, 0x92, 0x61, 0x82, 0x3a, 0x67, 0x04, 0x38, - 0x6f, 0x84, 0x0e, 0x0a, 0x14, 0x6d, 0xbf, 0x06, 0xeb, 0xdd, 0x94, 0x5b, 0x26, 0xf5, 0xad, 0x55, - 0x4e, 0x6a, 0xf2, 0xa3, 0x34, 0xb2, 0xd8, 0x34, 0x05, 0x5f, 0xcb, 0xd4, 0x74, 0xc6, 0x50, 0xae, - 0x3a, 0x29, 0x57, 0xad, 0x51, 0x57, 0xac, 0xca, 0xac, 0xa4, 0x51, 0xd0, 0x4e, 0x8a, 0xb2, 0xa6, - 0x1c, 0x86, 0xfc, 0x65, 0xc4, 0x6a, 0x3a, 0x46, 0x5a, 0x61, 0x27, 0xb8, 0x47, 0xd1, 0x0e, 0x71, - 0x4a, 0xe9, 0xd7, 0x1e, 0x04, 0x88, 0x62, 0xe1, 0x90, 0x35, 0x29, 0x53, 0xb7, 0xcb, 0xf5, 0xea, - 0x53, 0x79, 0x2f, 0x02, 0x75, 0x30, 0x13, 0x1a, 0x7d, 0x13, 0x2f, 0xd1, 0x65, 0x42, 0xb4, 0xa8, - 0x3e, 0xbe, 0xa5, 0x4c, 0x7f, 0xeb, 0xed, 0x82, 0x8f, 0xdb, 0xdb, 0x3b, 0xc4, 0x23, 0x11, 0x96, - 0xe2, 0x91, 0x5f, 0x9a, 0xfc, 0x57, 0x29, 0xf7, 0x79, 0x87, 0x6e, 0x56, 0x18, 0xfd, 0xaf, 0x72, - 0x23, 0xe7, 0x55, 0xe1, 0x89, 0xf9, 0xf5, 0xa8, 0xac, 0xa0, 0x81, 0x21, 0x91, 0x6e, 0x17, 0x41, - 0x59, 0x8d, 0x96, 0x1e, 0x51, 0xda, 0x54, 0xf5, 0xdb, 0x6a, 0x85, 0x58, 0xfc, 0xdc, 0xbe, 0x45, - 0xad, 0x4b, 0x04, 0x21, 0x4a, 0x81, 0xe0, 0x47, 0x29, 0x8f, 0xaa, 0x70, 0x0a, 0x43, 0x41, 0x39, - 0xae, 0x31, 0x4f, 0xe2, 0x2f, 0x68, 0x22, 0x02, 0x94, 0x88, 0xf1, 0xa3, 0x44, 0x3c, 0xa1, 0x22, - 0x9c, 0x3d, 0x63, 0xd1, 0xe5, 0x92, 0x86, 0x78, 0xf6, 0xff, 0x8c, 0x75, 0x46, 0xbf, 0xdf, 0xff, - 0xc3, 0x7a, 0x57, 0xf1, 0x70, 0xd3, 0x47, 0x04, 0x3f, 0xd7, 0x70, 0x55, 0xcc, 0x39, 0xf5, 0x2a, - 0x8e, 0x50, 0x6e, 0x87, 0xd7, 0x4b, 0x70, 0x58, 0xb2, 0xc1, 0x15, 0x70, 0x35, 0x5d, 0x5e, 0x2a, - 0x79, 0xcd, 0x0b, 0xdd, 0x16, 0x47, 0x3a, 0x6c, 0xd9, 0x74, 0x5e, 0xa2, 0xd5, 0xd7, 0x18, 0x47, - 0x06, 0xe3, 0xc2, 0x98, 0x60, 0xad, 0xcb, 0x88, 0x59, 0x25, 0xcc, 0x5a, 0x89, 0xb5, 0x1e, 0x4b, - 0x50, 0x59, 0x9b, 0xfa, 0xba, 0xa2, 0xd9, 0xca, 0x36, 0x9d, 0xbd, 0x66, 0x6d, 0x56, 0x57, 0x18, - 0x73, 0x08, 0x9e, 0xd8, 0x34, 0x9e, 0xac, 0xb0, 0x1a, 0xd3, 0x7a, 0xc9, 0x53, 0xd2, 0xd4, 0x95, - 0x55, 0x88, 0xb6, 0x18, 0x48, 0xff, 0xf6, 0xf6, 0x4f, 0x6b, 0xf3, 0xda, 0xf4, 0x45, 0xb6, 0xa0, - 0x9b, 0x3f, 0xd5, 0xb8, 0xac, 0xc2, 0xd4, 0xe2, 0xca, 0x17, 0x62, 0x22, 0xf6, 0x09, 0xb3, 0x19, - 0xd8, 0x7b, 0x6d, 0x29, 0xf5, 0xa5, 0xb0, 0xe6, 0xe4, 0x2a, 0xb4, 0xef, 0x9c, 0xaf, 0x15, 0xf7, - 0x2e, 0x0c, 0x45, 0x60, 0xfe, 0xdb, 0xe8, 0x17, 0xa9, 0xff, 0xfd, 0x67, 0xa3, 0x20, 0xe5, 0x73, - 0xb3, 0x77, 0xe8, 0x8b, 0x5e, 0xf2, 0x24, 0xa2, 0x99, 0x13, 0xe7, 0x32, 0xb5, 0xc5, 0x10, 0xac, - 0xc4, 0xde, 0x48, 0x79, 0x61, 0x03, 0x0b, 0x10, 0xdd, 0x28, 0xe6, 0x9c, 0x5b, 0x6d, 0x6c, 0xe8, - 0x27, 0xbf, 0x90, 0xb9, 0x3a, 0xed, 0x39, 0xfa, 0x65, 0x55, 0x71, 0x9b, 0xb3, 0x35, 0xac, 0x1f, - 0x5a, 0x15, 0xb7, 0x3c, 0x4e, 0xd7, 0x03, 0x2e, 0xe9, 0x44, 0x61, 0xdf, 0xc1, 0x21, 0x57, 0x61, - 0xc5, 0x16, 0x2a, 0xbb, 0x31, 0xdc, 0xf4, 0xc9, 0x5b, 0x72, 0x29, 0x4a, 0xbd, 0x72, 0xe0, 0x47, - 0x75, 0xa1, 0xda, 0x3a, 0xa8, 0x8a, 0x47, 0x61, 0xda, 0x86, 0xe5, 0xc1, 0xf0, 0xb1, 0xf9, 0x3c, - 0xac, 0x3e, 0xf4, 0x52, 0xdd, 0x52, 0xf9, 0xc5, 0x05, 0x57, 0xb0, 0xb5, 0x54, 0xc8, 0x95, 0x9e, - 0xa3, 0x3d, 0x80, 0x8e, 0x5f, 0x24, 0x31, 0xf0, 0x29, 0xef, 0xba, 0xec, 0xf6, 0x9b, 0xb3, 0x7b, - 0xcf, 0xd3, 0x12, 0xdb, 0x82, 0xdf, 0xfd, 0x52, 0x6d, 0x4b, 0x64, 0x1d, 0x52, 0x50, 0xd6, 0x5b, - 0x3e, 0x21, 0x0c, 0x0a, 0x6d, 0x30, 0x6b, 0x2f, 0x0e, 0xbd, 0x74, 0x69, 0x9b, 0xbe, 0xd9, 0x7e, - 0x83, 0x68, 0x56, 0x1a, 0x5c, 0xd4, 0x26, 0xca, 0x7b, 0x26, 0x53, 0x19, 0x37, 0x1c, 0x68, 0xe8, - 0xff, 0xf1, 0x90, 0x3e, 0x37, 0x4d, 0xbf, 0xe4, 0xd0, 0xea, 0x7f, 0xfa, 0xe9, 0xe3, 0x3f, 0x5f, - 0xf5, 0xa7, 0x8e, 0x69, 0x98, 0x76, 0xd5, 0x6b, 0xfd, 0xd3, 0x4f, 0x37, 0xeb, 0xc1, 0xc6, 0xbe, - 0xb5, 0x7e, 0xca, 0x7b, 0xaa, 0x09, 0x30, 0x90, 0xa4, 0xa1, 0xfa, 0xfd, 0x00, 0x1b, 0x56, 0x28, - 0xde, 0x06, 0xcd, 0x04, 0x4b, 0xc3, 0xef, 0xb3, 0xf0, 0xb2, 0xf6, 0xfc, 0xb0, 0x71, 0xd1, 0xb4, - 0x2e, 0xee, 0xe0, 0x9a, 0xb1, 0xe8, 0xb3, 0x24, 0xb1, 0xcc, 0xea, 0x89, 0xb4, 0xa1, 0x1f, 0x04, - 0x03, 0x1f, 0x20, 0x81, 0x4b, 0x12, 0xce, 0xea, 0x85, 0x75, 0x7b, 0xdd, 0x95, 0x9d, 0x22, 0x65, - 0x7c, 0x4d, 0x59, 0xdc, 0x52, 0xbd, 0x80, 0xef, 0xb7, 0xd7, 0x4a, 0x29, 0xbb, 0xa1, 0xa1, 0xa3, - 0x09, 0x7e, 0x89, 0x1d, 0xbb, 0xe1, 0x13, 0x4a, 0xae, 0x69, 0x1d, 0xfe, 0x35, 0x76, 0xec, 0x82, - 0xe7, 0x69, 0x05, 0xca, 0x53, 0x99, 0xb3, 0x16, 0x45, 0x63, 0x48, 0xc4, 0x9b, 0xae, 0xa6, 0xec, - 0xbd, 0xaf, 0x78, 0xf0, 0x38, 0xdf, 0x21, 0x9b, 0xb2, 0x32, 0xad, 0x0e, 0x9c, 0x2d, 0x32, 0x77, - 0xc9, 0x2f, 0x17, 0x24, 0x13, 0xf5, 0x15, 0xe2, 0x9f, 0x2b, 0x88, 0xdd, 0x12, 0xf9, 0xbf, 0x24, - 0x6f, 0xc4, 0x1f, 0x35, 0xb1, 0x47, 0xf7, 0xdd, 0x9b, 0xd6, 0x75, 0x6b, 0xb9, 0x72, 0x94, 0x95, - 0x98, 0xc5, 0xb9, 0x36, 0x49, 0xfd, 0xb6, 0x26, 0x30, 0x3d, 0xf7, 0xc4, 0x74, 0x4a, 0x55, 0x0f, - 0x10, 0x44, 0x5f, 0xfb, 0x7d, 0x90, 0x56, 0x0b, 0x2e, 0x80, 0x4e, 0x26, 0xb0, 0x75, 0xb0, 0x71, - 0xe0, 0x9a, 0xa3, 0xc0, 0xc4, 0xdc, 0xc0, 0x6c, 0xc3, 0xc0, 0x96, 0xbc, 0x80, 0x6f, 0x55, 0x27, - 0xe9, 0xe3, 0x05, 0x9b, 0xe9, 0x48, 0x72, 0x65, 0x08, 0xdc, 0x7a, 0x25, 0xd6, 0x62, 0x4f, 0x41, - 0x4b, 0xaf, 0x5c, 0xc7, 0x6b, 0xdf, 0x4d, 0x07, 0xec, 0x3a, 0x66, 0x05, 0xa1, 0xa8, 0x11, 0x56, - 0x20, 0x97, 0x0a, 0x3b, 0x2c, 0x57, 0x29, 0x4a, 0x6b, 0xe5, 0x03, 0x58, 0xf7, 0xef, 0x56, 0x51, - 0xaa, 0xee, 0x33, 0x70, 0x47, 0x8a, 0xb4, 0xc9, 0x94, 0xaa, 0x24, 0xad, 0xe4, 0xef, 0xe4, 0x21, - 0xee, 0x20, 0xd1, 0xb5, 0xdf, 0xa0, 0x2d, 0x16, 0xed, 0xbc, 0x56, 0xd7, 0xa3, 0x85, 0xb0, 0xf1, - 0x1d, 0x5e, 0x53, 0x4e, 0xd8, 0xdf, 0x89, 0x13, 0xcd, 0xa1, 0x76, 0xcf, 0x4f, 0x65, 0xa6, 0x0e, - 0x2b, 0x7b, 0x41, 0x27, 0x64, 0x91, 0xc0, 0x01, 0xe2, 0xd4, 0x5f, 0xf8, 0xb6, 0xec, 0xa2, 0xd4, - 0xbd, 0x6a, 0x21, 0xf8, 0x0e, 0xab, 0x58, 0x45, 0xc7, 0x34, 0x69, 0x1e, 0x1d, 0xd3, 0x5a, 0xeb, - 0xdf, 0x9a, 0xc9, 0x53, 0x1d, 0x45, 0xe2, 0x6e, 0xf3, 0xf4, 0x1d, 0x74, 0x90, 0xa9, 0x8c, 0x96, - 0xf1, 0x61, 0x40, 0xa1, 0xe5, 0x7b, 0x81, 0xd4, 0xf3, 0x1d, 0x22, 0x42, 0x8b, 0x2a, 0x41, 0x77, - 0xa8, 0xe5, 0x48, 0xbd, 0x79, 0x63, 0x41, 0x09, 0x08, 0x4c, 0x72, 0x46, 0xf1, 0x9c, 0xb4, 0xf6, - 0x20, 0x71, 0x2e, 0x5d, 0x14, 0xdb, 0x16, 0x32, 0x74, 0x69, 0x8d, 0xad, 0xaa, 0x99, 0xc5, 0x0d, - 0x69, 0xfb, 0x6e, 0x1b, 0xba, 0x41, 0x54, 0xa6, 0x9e, 0xd1, 0xcc, 0x20, 0x6d, 0x5f, 0x76, 0xd6, - 0x4e, 0xe8, 0x98, 0x41, 0xb6, 0x24, 0x9e, 0xcb, 0xb7, 0x9d, 0x16, 0x53, 0x73, 0x18, 0x18, 0x8a, - 0x2e, 0xa7, 0xd4, 0x44, 0x50, 0x48, 0xb2, 0xeb, 0x7d, 0x76, 0x3b, 0x03, 0xa1, 0x10, 0xb3, 0x0b, - 0xc8, 0xe2, 0x55, 0xa1, 0xdd, 0x5e, 0xcb, 0x71, 0x8b, 0xf6, 0x98, 0xb3, 0x9e, 0x53, 0x31, 0xe3, - 0x91, 0x6f, 0x42, 0x54, 0x61, 0x6e, 0x20, 0x1b, 0x9b, 0x51, 0x50, 0x59, 0x3c, 0x4f, 0xf9, 0xe7, - 0x73, 0x95, 0xba, 0x5b, 0x10, 0xc4, 0x80, 0xba, 0x7f, 0x03, 0x69, 0x89, 0x61, 0xf6, 0x58, 0xcf, - 0xac, 0x72, 0x02, 0x58, 0x95, 0x89, 0x97, 0x06, 0xc5, 0xac, 0x35, 0x87, 0x74, 0x17, 0x5d, 0xbd, - 0x0b, 0x09, 0x4e, 0xdb, 0x0a, 0x92, 0x83, 0x83, 0x04, 0x86, 0xd5, 0xe5, 0xbc, 0x01, 0xf4, 0x04, - 0x2c, 0x08, 0x31, 0x36, 0xfd, 0x8a, 0x3c, 0x29, 0x20, 0x09, 0x62, 0x24, 0x49, 0x56, 0x96, 0x65, - 0x03, 0xd6, 0x8d, 0xdd, 0xf1, 0x8e, 0xc6, 0x78, 0x90, 0x67, 0x61, 0xa0, 0xdf, 0x70, 0xf4, 0xfb, - 0x61, 0xc4, 0x7e, 0x41, 0x3d, 0xe3, 0x8b, 0x68, 0x92, 0x80, 0x3c, 0xb1, 0x1c, 0xd4, 0x27, 0xbf, - 0x90, 0x65, 0x3f, 0x89, 0xc7, 0x79, 0x5f, 0xcc, 0x32, 0x4a, 0x21, 0xbf, 0xeb, 0x67, 0x83, 0xe1, - 0x63, 0xfd, 0x35, 0x8f, 0x19, 0xf4, 0x98, 0xc6, 0x83, 0x39, 0x59, 0x1e, 0xe1, 0x1b, 0x0b, 0xf3, - 0xf1, 0xc3, 0x13, 0xcf, 0x33, 0xcf, 0x6a, 0xb4, 0xfa, 0xfa, 0x0f, 0xe6, 0xb0, 0xae, 0x60, 0x70, - 0x96, 0x70, 0x02, 0xfe, 0xb3, 0x78, 0xbf, 0x82, 0x7f, 0x0b, 0x37, 0x1b, 0x9c, 0x3d, 0xd8, 0xf5, - 0x77, 0x74, 0x30, 0x66, 0x3c, 0x8d, 0xe2, 0x6b, 0x43, 0xaa, 0x7f, 0x60, 0x96, 0x0e, 0xc3, 0xd4, - 0xfd, 0xf8, 0x17, 0x02, 0x4a, 0x6d, 0x3c, 0x60, 0xa3, 0x84, 0x92, 0x7a, 0x84, 0xc4, 0x01, 0x66, - 0x0b, 0x72, 0x60, 0x1a, 0x77, 0x01, 0x3e, 0xa8, 0x20, 0x87, 0x77, 0x43, 0x56, 0x80, 0xc7, 0x3b, - 0x01, 0x1f, 0x6c, 0x4f, 0x50, 0x69, 0xdd, 0xd9, 0xc1, 0xfe, 0x93, 0x47, 0x4f, 0xbc, 0x51, 0x7b, - 0xbc, 0x0a, 0x1d, 0x0b, 0x94, 0xb2, 0x07, 0x65, 0x5a, 0x20, 0x44, 0x51, 0x4a, 0xc9, 0xe2, 0x5f, - 0x24, 0xfe, 0x0f, 0xe8, 0xdd, 0x77, 0xcd, 0xa8, 0x38, 0x00, 0x00 + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xd5, 0x3b, 0x5d, 0x73, 0xdc, 0x38, + 0x72, 0xef, 0xfe, 0x15, 0x14, 0x75, 0xa7, 0x23, 0x3d, 0x14, 0xe7, 0x43, 0x92, 0x2d, 0x73, 0x4c, + 0xbb, 0x6c, 0x59, 0xbb, 0xf6, 0x95, 0xbd, 0x76, 0xad, 0xbd, 0xeb, 0xba, 0xd2, 0x2a, 0x59, 0x0c, + 0x89, 0x99, 0xc1, 0x9a, 0x03, 0x30, 0x24, 0x46, 0xd2, 0xec, 0x68, 0x1e, 0xf3, 0x98, 0x87, 0x54, + 0xe5, 0x2d, 0xa9, 0xba, 0xff, 0x96, 0x5f, 0x70, 0x3f, 0x21, 0xdd, 0x00, 0xf8, 0x39, 0x1c, 0x5b, + 0xde, 0xbd, 0xab, 0x24, 0xe5, 0xb2, 0x04, 0x02, 0x8d, 0xee, 0x46, 0xa3, 0x3f, 0x01, 0xe8, 0xf1, + 0xde, 0x8b, 0xb7, 0x67, 0x1f, 0xfe, 0xf2, 0xee, 0xdc, 0x9a, 0xcb, 0x45, 0xf2, 0xc4, 0x7a, 0x5c, + 0xfc, 0xa2, 0x24, 0x86, 0x5f, 0x92, 0xc9, 0x84, 0x3e, 0x79, 0x2f, 0x49, 0xf6, 0x46, 0xc4, 0xd6, + 0x64, 0x65, 0xbd, 0x11, 0x82, 0x43, 0x73, 0x99, 0xd0, 0xfc, 0x71, 0x5f, 0x8f, 0x5a, 0x8f, 0x17, + 0x54, 0x12, 0xeb, 0x5e, 0x34, 0x27, 0x59, 0x4e, 0x65, 0x68, 0x2f, 0xe5, 0xf4, 0xf0, 0xd4, 0x86, + 0xfe, 0x5c, 0xae, 0x60, 0xfc, 0x5e, 0x42, 0x26, 0x34, 0x59, 0x2f, 0x48, 0x36, 0x63, 0xfc, 0x30, + 0x63, 0xb3, 0xb9, 0x0c, 0x1e, 0xa4, 0x37, 0x9b, 0x48, 0x2c, 0x16, 0x94, 0xcb, 0xf5, 0x54, 0x70, + 0x79, 0x98, 0xb3, 0x5f, 0x69, 0x30, 0x1c, 0xa4, 0x37, 0x63, 0xfd, 0x89, 0x33, 0x03, 0x26, 0x49, + 0xc2, 0xa2, 0xb1, 0x99, 0x99, 0xd0, 0xa9, 0x9e, 0x28, 0xe9, 0x4d, 0x7b, 0x96, 0xea, 0x23, 0x19, + 0x25, 0xeb, 0x6b, 0x16, 0xcb, 0x39, 0xf4, 0x0d, 0xfe, 0x38, 0x9e, 0x53, 0x45, 0x0b, 0xdb, 0x1b, + 0x7f, 0x21, 0x62, 0x92, 0xac, 0x53, 0x91, 0x33, 0xc9, 0x04, 0x0f, 0xa6, 0xec, 0x86, 0xc6, 0x63, + 0x85, 0x72, 0x30, 0x9e, 0x08, 0x29, 0xc5, 0x02, 0x1a, 0x9a, 0xb9, 0xc1, 0x58, 0x8a, 0x14, 0xbb, + 0x49, 0xf4, 0x69, 0x96, 0x89, 0x25, 0x8f, 0x0f, 0x23, 0x91, 0x88, 0x2c, 0xb8, 0x22, 0x99, 0x73, + 0x78, 0x18, 0x1d, 0x0a, 0x77, 0x2c, 0x33, 0xc2, 0xf3, 0xa9, 0xc8, 0x16, 0x81, 0x6a, 0x25, 0x44, + 0xd2, 0xbf, 0x38, 0x48, 0xc9, 0x0c, 0x69, 0x2a, 0x25, 0x94, 0xe5, 0x1f, 0xe7, 0xe3, 0x94, 0xc4, + 0x31, 0xe3, 0xb3, 0xe0, 0xb4, 0x5c, 0xa5, 0x62, 0x1f, 0x3f, 0xc5, 0x15, 0xcd, 0xa6, 0x89, 0xb8, + 0x0e, 0xc8, 0x52, 0x8a, 0x8d, 0x2f, 0xc9, 0x24, 0xa1, 0x5a, 0x08, 0x7a, 0xa1, 0x53, 0xb2, 0x60, + 0xc9, 0x2a, 0x78, 0x96, 0x31, 0x92, 0x78, 0x2f, 0x69, 0x72, 0x45, 0x25, 0x8b, 0x88, 0x97, 0x03, + 0xfa, 0xc3, 0x9c, 0x66, 0x6c, 0x0a, 0x6b, 0xc8, 0x62, 0x9a, 0x21, 0xa3, 0x09, 0x49, 0x73, 0x1a, + 0x14, 0x8d, 0x71, 0x4d, 0x20, 0x06, 0x26, 0x23, 0x31, 0x5b, 0xe6, 0x81, 0x7f, 0x42, 0x17, 0x0d, + 0x52, 0x96, 0x8c, 0xbd, 0xe6, 0xf7, 0x7c, 0xad, 0xa7, 0x04, 0xc3, 0xf4, 0xc6, 0xca, 0x45, 0xc2, + 0x62, 0x6b, 0x7f, 0x30, 0x18, 0x94, 0x2b, 0xc1, 0xdd, 0x68, 0xce, 0xc8, 0x02, 0x2e, 0xe7, 0x87, + 0xd1, 0x9c, 0x25, 0xb1, 0x43, 0xaf, 0x28, 0x77, 0xd7, 0x5b, 0x52, 0xdc, 0x9f, 0x8e, 0xf0, 0xdf, + 0xd6, 0xc4, 0x39, 0x0a, 0xa1, 0x03, 0x3c, 0x8e, 0xe3, 0x4d, 0x9b, 0x2d, 0xdc, 0xee, 0x43, 0x50, + 0x8e, 0x19, 0x0f, 0x70, 0x0f, 0xb7, 0xb7, 0x6a, 0xff, 0xc1, 0x43, 0xfc, 0x37, 0x2e, 0x48, 0x4e, + 0xa7, 0x1b, 0x3f, 0x02, 0x49, 0x12, 0xc6, 0x81, 0x48, 0xcc, 0xf2, 0x34, 0x21, 0xab, 0x60, 0x96, + 0xb1, 0x78, 0x8c, 0x3f, 0x0e, 0x25, 0x5d, 0xa4, 0xb8, 0x89, 0x38, 0x7d, 0xb9, 0xe0, 0x79, 0x90, + 0xd1, 0x94, 0x12, 0xe9, 0x1c, 0x7b, 0xc3, 0x69, 0xe6, 0x6e, 0xfc, 0x89, 0xb8, 0x29, 0x64, 0x71, + 0x54, 0xc9, 0xe2, 0xc1, 0x83, 0x07, 0xe3, 0x4e, 0x86, 0x3b, 0x44, 0x5d, 0x0a, 0x4d, 0x69, 0xb9, + 0xd6, 0x69, 0xdd, 0x8e, 0x96, 0x59, 0x0e, 0xf3, 0x16, 0xb0, 0x7e, 0x45, 0x68, 0xa7, 0x24, 0x06, + 0x83, 0x89, 0x59, 0x08, 0xf2, 0xb8, 0x8b, 0x9f, 0x2f, 0x50, 0x6e, 0x53, 0xf3, 0x91, 0x98, 0x67, + 0x70, 0xfa, 0x9a, 0x72, 0x85, 0x38, 0x06, 0xd3, 0xa0, 0x1a, 0xf3, 0x26, 0xc8, 0x84, 0x90, 0x6b, + 0x34, 0x80, 0x61, 0xb0, 0x3f, 0x1c, 0x0e, 0xc7, 0xd8, 0x9c, 0x2a, 0xe1, 0xaa, 0xe6, 0x28, 0xd8, + 0x1f, 0x8d, 0x46, 0xaa, 0x79, 0x14, 0xec, 0x1f, 0x1d, 0x1d, 0xa9, 0xe6, 0x71, 0xb0, 0x7f, 0x7c, + 0x7c, 0xac, 0x9a, 0x27, 0xc1, 0xfe, 0xc9, 0xc9, 0x89, 0x6a, 0x3e, 0x08, 0x14, 0xb3, 0xd8, 0x3c, + 0x0d, 0xf6, 0x4f, 0x4f, 0x4f, 0x55, 0x73, 0x12, 0xec, 0x4f, 0x26, 0x13, 0xd5, 0x8c, 0x82, 0xfd, + 0x28, 0x8a, 0x54, 0x93, 0x06, 0xfb, 0x94, 0x52, 0xd5, 0x8c, 0xb5, 0x74, 0xb1, 0x09, 0xf2, 0x88, + 0x8e, 0x34, 0xb5, 0x19, 0x10, 0x8e, 0x34, 0x3b, 0x09, 0x50, 0x3b, 0x25, 0xaa, 0xb9, 0x0a, 0xf6, + 0xc9, 0xa3, 0x01, 0x34, 0x25, 0xe0, 0x1d, 0xf8, 0x9a, 0xae, 0x08, 0xb2, 0xd9, 0x84, 0x38, 0xc3, + 0x47, 0x27, 0x9e, 0x35, 0x3c, 0x2e, 0x7e, 0x0c, 0xfc, 0x47, 0xae, 0x1a, 0x96, 0x13, 0x3d, 0x7e, + 0x74, 0xec, 0x59, 0xc5, 0x7f, 0x6d, 0xf5, 0x80, 0xc4, 0x2d, 0x60, 0x88, 0x41, 0x32, 0x18, 0xc1, + 0xfc, 0xf2, 0xc7, 0x36, 0xdc, 0x5c, 0xc3, 0x9d, 0x0c, 0x3d, 0xab, 0xf8, 0xdf, 0x04, 0x02, 0xc3, + 0x7c, 0x88, 0x7b, 0x02, 0xad, 0xb4, 0x68, 0xc1, 0xac, 0x07, 0x47, 0xba, 0x6f, 0x92, 0x06, 0xc3, + 0x63, 0xd8, 0x04, 0xfd, 0x63, 0x60, 0x5a, 0x08, 0x03, 0x23, 0x8f, 0xe0, 0x73, 0x60, 0x3d, 0xc4, + 0x9f, 0x6a, 0x56, 0x1c, 0x70, 0xc1, 0x51, 0x4a, 0xf9, 0x2c, 0x0d, 0xec, 0x49, 0x22, 0xa2, 0x4f, + 0x36, 0x0e, 0x2c, 0xc0, 0xa1, 0x81, 0x99, 0xee, 0x83, 0xf6, 0x73, 0xc6, 0xe3, 0xb6, 0x0b, 0x34, + 0xbe, 0x2f, 0x22, 0x49, 0xe4, 0x68, 0xe6, 0x26, 0x73, 0xd7, 0xea, 0x59, 0x27, 0xe9, 0x8d, 0xab, + 0xfd, 0x23, 0x92, 0x2c, 0x34, 0x08, 0x7a, 0x5b, 0x0a, 0xa6, 0x7a, 0xb6, 0x34, 0x15, 0x05, 0xff, + 0xeb, 0x21, 0x90, 0xa3, 0x37, 0xc1, 0xe1, 0x68, 0x73, 0xef, 0x71, 0x5f, 0xc7, 0x02, 0x88, 0x09, + 0x51, 0xc6, 0x52, 0xf9, 0xe4, 0x1e, 0xd0, 0xb2, 0xd2, 0x8c, 0x5e, 0x31, 0xb1, 0xcc, 0xbf, 0x59, + 0xf2, 0x08, 0x59, 0xf2, 0x32, 0x0a, 0x33, 0x32, 0x9a, 0x85, 0x7c, 0x99, 0x24, 0x5e, 0x1e, 0x51, + 0x4e, 0x75, 0x33, 0x22, 0x0b, 0x9a, 0x11, 0xd5, 0x1e, 0x4f, 0x0d, 0xb4, 0xb5, 0x04, 0xcf, 0x07, + 0x53, 0x1d, 0xea, 0xe5, 0xee, 0x9a, 0x4d, 0x1d, 0x3b, 0xbd, 0x62, 0xf4, 0xda, 0x0e, 0x43, 0x7a, + 0x70, 0xf0, 0x4b, 0x2e, 0xf8, 0x8f, 0x24, 0x59, 0xd2, 0xdc, 0x57, 0xbd, 0xee, 0x3a, 0xa1, 0xd2, + 0x02, 0x6c, 0xf4, 0xda, 0xfa, 0x81, 0x71, 0x79, 0xfa, 0x2c, 0xcb, 0xc8, 0xca, 0xc9, 0x5d, 0x8f, + 0x87, 0xb3, 0x57, 0x71, 0x31, 0xd7, 0x1d, 0x03, 0x9e, 0xf6, 0x5c, 0x9f, 0xe3, 0x7c, 0x90, 0x1f, + 0x58, 0x19, 0xf5, 0x13, 0x31, 0x73, 0x6c, 0xf0, 0x0e, 0x09, 0x89, 0xd0, 0x15, 0x51, 0x2b, 0x22, + 0xfc, 0x8a, 0xe4, 0x7b, 0x36, 0x8a, 0x0b, 0x49, 0x44, 0xe7, 0x8e, 0xad, 0xfb, 0xa0, 0x8b, 0xfa, + 0xca, 0xff, 0x86, 0x5c, 0xff, 0xf6, 0xa8, 0xaf, 0xa3, 0x12, 0x74, 0xe8, 0x86, 0xc7, 0xfd, 0x14, + 0x02, 0x17, 0x97, 0xdf, 0x89, 0x98, 0xfa, 0x06, 0xef, 0x99, 0xf6, 0x9f, 0x1e, 0x47, 0xf6, 0xe0, + 0x97, 0xcf, 0xe2, 0xd0, 0x70, 0x08, 0x1f, 0xb0, 0x17, 0xe7, 0xe0, 0x5a, 0xe5, 0x6b, 0x96, 0x4b, + 0x90, 0x50, 0x06, 0xe4, 0x20, 0x4c, 0x7e, 0xb2, 0x3d, 0x1a, 0x3e, 0x59, 0x4b, 0x31, 0x9b, 0x25, + 0xf4, 0x0d, 0x46, 0x3b, 0x87, 0x82, 0xdb, 0xcc, 0x66, 0x54, 0xba, 0x1b, 0x77, 0x93, 0x51, 0xb9, + 0xcc, 0xb8, 0x35, 0x0c, 0xc3, 0xad, 0xe5, 0xc5, 0x34, 0x95, 0xf3, 0xa7, 0x6a, 0x33, 0xe8, 0xf5, + 0xe8, 0x85, 0xc3, 0x3d, 0xea, 0x06, 0xe6, 0xf3, 0x48, 0x7f, 0x7a, 0x7b, 0x83, 0x0d, 0x4a, 0x78, + 0x22, 0x48, 0x16, 0xa3, 0x84, 0x77, 0xca, 0x73, 0x6c, 0x26, 0x3e, 0x47, 0x48, 0x47, 0x89, 0x56, + 0x4f, 0x72, 0x01, 0x8d, 0xe1, 0x62, 0x6f, 0xb8, 0x29, 0x37, 0xb1, 0x22, 0xab, 0xb6, 0x11, 0xb1, + 0xc2, 0x92, 0x7d, 0xe0, 0xfa, 0x0c, 0xdc, 0x35, 0xb8, 0x79, 0xc7, 0x1e, 0xe1, 0xe4, 0x24, 0x3c, + 0xc6, 0xbd, 0xe1, 0x7e, 0x94, 0x50, 0x92, 0x7d, 0x4f, 0x23, 0xe9, 0x0c, 0xbc, 0x81, 0x47, 0x5b, + 0x72, 0x75, 0xbd, 0xee, 0x9d, 0xcf, 0xc2, 0x37, 0x44, 0xce, 0xfd, 0x05, 0x03, 0x75, 0xd1, 0x53, + 0xfa, 0x5b, 0x72, 0x68, 0x62, 0xda, 0x1e, 0x2f, 0x28, 0x10, 0x8d, 0x0b, 0xe2, 0xb5, 0xc8, 0x9c, + 0x02, 0xdd, 0x61, 0x76, 0xbf, 0x1b, 0xa1, 0xdb, 0x1f, 0x75, 0x6b, 0x95, 0x58, 0xca, 0x74, 0x29, + 0x73, 0x17, 0xf2, 0x03, 0xb4, 0x3c, 0x4b, 0x58, 0x62, 0x6a, 0xed, 0x84, 0x02, 0x0c, 0xc2, 0x4f, + 0x68, 0x5c, 0xc1, 0x33, 0x84, 0x37, 0x7d, 0xf9, 0x45, 0x72, 0xd9, 0x83, 0x1f, 0xbd, 0xa1, 0xfe, + 0x35, 0xba, 0x7c, 0x32, 0x1a, 0x1c, 0x1c, 0x80, 0xb8, 0xa6, 0x2c, 0x49, 0xde, 0xa3, 0xed, 0x85, + 0x3f, 0x83, 0x33, 0x72, 0xfe, 0xb0, 0x46, 0xd0, 0x8d, 0xa7, 0x7e, 0x03, 0x74, 0xd1, 0x1a, 0x5d, + 0x6e, 0xdc, 0x9f, 0x41, 0xb7, 0x26, 0x14, 0xc2, 0xd2, 0x3b, 0x58, 0x9e, 0xe3, 0xa2, 0xa6, 0x65, + 0x91, 0xc3, 0x2e, 0x06, 0x97, 0xf7, 0x77, 0x2d, 0x6e, 0x5b, 0x48, 0x98, 0xd3, 0xf4, 0x88, 0xc7, + 0x2e, 0x86, 0x9d, 0xb3, 0x76, 0xc9, 0x16, 0xa7, 0x79, 0xfe, 0xf1, 0xfd, 0x0c, 0xf6, 0x74, 0x74, + 0x5f, 0xc9, 0xf7, 0xdd, 0x2b, 0x64, 0x01, 0xf9, 0x77, 0x5c, 0xd8, 0xff, 0x5e, 0x78, 0x34, 0xa6, + 0x49, 0x0e, 0xf6, 0x56, 0x37, 0xc4, 0x52, 0x7d, 0x6a, 0x92, 0xb3, 0xb8, 0xb0, 0x50, 0x2a, 0xf6, + 0xb6, 0x2e, 0x6c, 0xf5, 0x68, 0x97, 0x72, 0x77, 0xbc, 0x66, 0x3b, 0xee, 0x8e, 0xba, 0xcb, 0x99, + 0x84, 0x60, 0x00, 0x5b, 0x16, 0x70, 0xf4, 0xa2, 0x74, 0x64, 0xce, 0x5e, 0xe1, 0x08, 0x6f, 0x6f, + 0xdb, 0xf3, 0xb7, 0x5d, 0x9b, 0x72, 0x4f, 0xb0, 0xd7, 0x5d, 0xfc, 0x1f, 0xbd, 0xb0, 0x22, 0xc8, + 0x8a, 0x25, 0xb5, 0xd0, 0x50, 0x0b, 0xac, 0x60, 0x4e, 0x0d, 0xe0, 0x09, 0x05, 0x9d, 0xa2, 0x36, + 0xda, 0x79, 0xe5, 0x81, 0x01, 0xfe, 0xc3, 0xcb, 0xef, 0xcf, 0xcf, 0xfd, 0x8f, 0x74, 0xf2, 0xed, + 0xeb, 0xef, 0x4d, 0xbf, 0xb3, 0xd6, 0xae, 0x2d, 0xa0, 0x1e, 0xe1, 0x12, 0xb2, 0x51, 0x06, 0xed, + 0xbd, 0x81, 0x47, 0x92, 0x74, 0x4e, 0xa0, 0xb1, 0x69, 0xa1, 0x26, 0x53, 0x09, 0xf4, 0xea, 0x98, + 0x7d, 0xa8, 0x11, 0xce, 0xd0, 0x86, 0x9f, 0xe1, 0x14, 0x67, 0xd0, 0x31, 0x72, 0x86, 0x41, 0x04, + 0xcd, 0xdb, 0xf5, 0x9c, 0xc2, 0xf3, 0x97, 0xec, 0xbc, 0xa3, 0x59, 0x9e, 0x82, 0xf9, 0xb3, 0x2b, + 0x7a, 0xa6, 0xc6, 0x1c, 0x88, 0xe0, 0x23, 0x6f, 0xe8, 0x9d, 0x0c, 0x06, 0xae, 0xeb, 0x17, 0xe1, + 0x0d, 0x91, 0x29, 0x0f, 0xf1, 0xf0, 0xc4, 0x35, 0xe1, 0x03, 0x38, 0x12, 0x9f, 0x9e, 0xe9, 0x5e, + 0x44, 0x6d, 0xe2, 0x4b, 0x89, 0xf9, 0x3d, 0x7e, 0xbb, 0x7e, 0x15, 0xcd, 0xd4, 0x0e, 0x6e, 0x6f, + 0xec, 0x8e, 0x2d, 0x58, 0xa3, 0x51, 0xf2, 0xf0, 0xf0, 0xe4, 0xbe, 0xd3, 0x6d, 0x2c, 0x87, 0x43, + 0xf0, 0x05, 0xe0, 0xc8, 0x3a, 0x21, 0xb4, 0x61, 0x68, 0x10, 0xd1, 0x0d, 0xa2, 0xfc, 0xb4, 0x82, + 0x40, 0x7f, 0xb2, 0x63, 0xbb, 0x71, 0x39, 0xd5, 0xcc, 0xbb, 0xe8, 0xe9, 0x96, 0x23, 0x62, 0x5f, + 0x72, 0x44, 0xac, 0xe9, 0x88, 0x32, 0x84, 0x37, 0x7d, 0x2a, 0x4c, 0x16, 0x81, 0xc1, 0x88, 0x35, + 0x9d, 0xc3, 0xee, 0x7e, 0x4b, 0x05, 0x94, 0x89, 0xd9, 0xca, 0x19, 0x7a, 0x47, 0xb0, 0x5b, 0x0f, + 0x5c, 0x2f, 0xaf, 0xc1, 0xbc, 0xa1, 0xf9, 0xfc, 0x39, 0xc9, 0x59, 0x04, 0x96, 0x4f, 0xb1, 0xc8, + 0x71, 0xd6, 0xaa, 0x76, 0xd2, 0xa1, 0x11, 0x15, 0x4c, 0xa4, 0x24, 0x62, 0x72, 0x05, 0x09, 0x2d, + 0xa8, 0x18, 0x6b, 0x4d, 0x55, 0x96, 0x33, 0x66, 0xcd, 0xcd, 0xe7, 0xbd, 0x93, 0xfb, 0x19, 0x38, + 0x2f, 0x70, 0x1d, 0xd8, 0x18, 0x5e, 0x7a, 0x42, 0x35, 0x46, 0x97, 0xae, 0x4e, 0x2d, 0x30, 0x90, + 0x3a, 0xcc, 0xdd, 0xec, 0xb4, 0xfe, 0xa3, 0x7f, 0x90, 0x57, 0x39, 0xfa, 0x87, 0x79, 0x95, 0x8e, + 0x38, 0xe3, 0xae, 0x4b, 0xfb, 0xd2, 0xa9, 0x48, 0x23, 0xdf, 0xd1, 0x7d, 0x07, 0x07, 0x25, 0x8c, + 0x49, 0x4f, 0x9a, 0x40, 0xba, 0xf3, 0xf6, 0xb6, 0x6e, 0xa9, 0xef, 0xc1, 0x63, 0x3b, 0xdb, 0xa8, + 0xbc, 0x8e, 0x89, 0x45, 0x66, 0x74, 0x3c, 0x46, 0x75, 0x21, 0xe1, 0xf0, 0x4e, 0xf1, 0xf0, 0xf7, + 0xa8, 0x21, 0x79, 0xac, 0x77, 0x58, 0x15, 0xa2, 0xc0, 0x35, 0xf4, 0xf2, 0x19, 0xae, 0xd3, 0x69, + 0xf6, 0x5f, 0x90, 0x4b, 0xff, 0x8a, 0xe5, 0x0c, 0x8a, 0xcb, 0x30, 0xbf, 0x38, 0xba, 0x4f, 0x7a, + 0x14, 0x03, 0xa8, 0x6a, 0xe8, 0x58, 0xaa, 0x9b, 0x10, 0x4f, 0x87, 0x03, 0x6f, 0xe7, 0xdc, 0x4e, + 0xbc, 0x0b, 0xa3, 0xca, 0xbe, 0xca, 0x89, 0x6b, 0x1a, 0xab, 0xdd, 0x9b, 0x6d, 0x17, 0xd8, 0x2f, + 0xfb, 0xa3, 0x93, 0x13, 0xaf, 0xfa, 0x06, 0xc2, 0xed, 0x9e, 0x91, 0xea, 0x71, 0x21, 0x0e, 0x92, + 0x5e, 0x6f, 0xfc, 0xff, 0x4f, 0x61, 0x37, 0x5a, 0x3c, 0x99, 0x90, 0x44, 0xd9, 0xe7, 0x4d, 0x2f, + 0xf4, 0x07, 0x43, 0xaf, 0xd5, 0xbb, 0xd2, 0xbd, 0xa5, 0x96, 0xe9, 0x86, 0x16, 0xad, 0xf1, 0xe1, + 0xee, 0x56, 0xdc, 0xd4, 0x89, 0xe6, 0x97, 0x92, 0xc7, 0xad, 0xec, 0x6f, 0x54, 0x25, 0x7a, 0x43, + 0x08, 0x06, 0xa2, 0x33, 0xa7, 0x1b, 0xdd, 0x4f, 0x30, 0x7d, 0x03, 0x7f, 0x73, 0x3c, 0x46, 0x35, + 0xfb, 0x72, 0xf6, 0xb9, 0x0a, 0xa1, 0xd0, 0x5c, 0x3d, 0x1e, 0x0e, 0xc6, 0xab, 0x5e, 0x4f, 0xa9, + 0xe6, 0x0d, 0xf6, 0xdc, 0x3c, 0x1e, 0x8d, 0x6f, 0xa0, 0x23, 0xbf, 0x60, 0xa8, 0x54, 0x4c, 0xeb, + 0x16, 0xfb, 0x7c, 0x9e, 0xc6, 0x4c, 0x76, 0xc6, 0xca, 0x3c, 0x8d, 0x7d, 0x26, 0x4f, 0xbb, 0xb9, + 0x9f, 0xf4, 0x84, 0xb7, 0xba, 0x9f, 0x60, 0x1a, 0x95, 0xec, 0x4a, 0xa3, 0x18, 0xa4, 0x51, 0xaa, + 0x1c, 0xd3, 0x65, 0x58, 0x55, 0x8f, 0xa1, 0xec, 0xe2, 0x30, 0x16, 0xd1, 0x12, 0x0f, 0xe5, 0xbc, + 0xeb, 0xdc, 0x14, 0x5e, 0xea, 0x58, 0xe0, 0xbb, 0x2c, 0x1c, 0x78, 0x3c, 0x7b, 0x3b, 0x3d, 0xd3, + 0xa7, 0x23, 0xe1, 0xb1, 0x67, 0x8a, 0xaf, 0x57, 0x50, 0x98, 0xd8, 0x1e, 0x1e, 0x1a, 0x7e, 0x8b, + 0xa5, 0x08, 0xa8, 0x7c, 0x0c, 0x7e, 0xa8, 0xa6, 0x04, 0xe1, 0x7a, 0xe3, 0x2d, 0x19, 0x40, 0x9e, + 0x89, 0xc5, 0x82, 0xf0, 0x38, 0x0f, 0x2f, 0x2e, 0xab, 0x12, 0x0e, 0x9d, 0x05, 0x45, 0x0f, 0xa5, + 0x8a, 0x93, 0x18, 0x77, 0xee, 0x3c, 0xa1, 0xc8, 0xc1, 0xf3, 0x95, 0x1a, 0xaa, 0xb6, 0x1b, 0xca, + 0xaa, 0x3a, 0xa4, 0x4e, 0x6b, 0x0c, 0x70, 0x03, 0x70, 0x0e, 0x54, 0x12, 0xfa, 0x23, 0x5a, 0x26, + 0x4b, 0x20, 0x64, 0x9c, 0x41, 0xc7, 0x8c, 0x3a, 0xad, 0x0a, 0xae, 0x1b, 0xca, 0xae, 0xe1, 0x11, + 0xfc, 0xb5, 0x20, 0x31, 0xcc, 0x5b, 0x90, 0x4f, 0xf4, 0xe3, 0x7b, 0x10, 0x34, 0xe3, 0x4c, 0x1a, + 0x09, 0xc0, 0x57, 0xdc, 0x51, 0x88, 0x5d, 0x95, 0xf8, 0x22, 0x8d, 0xcf, 0xeb, 0xa6, 0xe3, 0xed, + 0x0d, 0x6b, 0x94, 0x0a, 0x02, 0x98, 0xfb, 0x5d, 0xe7, 0xae, 0x5e, 0xa3, 0xf1, 0x99, 0xc0, 0xa9, + 0x94, 0x69, 0x1e, 0x40, 0xd1, 0x75, 0x0d, 0xf5, 0xb4, 0xb8, 0x06, 0xf6, 0x23, 0x6d, 0x2e, 0x29, + 0x18, 0x8e, 0x80, 0x0d, 0x7a, 0x6a, 0x5f, 0xe7, 0xb9, 0x1d, 0xc0, 0x4f, 0xdb, 0xed, 0xd9, 0x41, + 0xbf, 0x6f, 0xf7, 0xda, 0xa0, 0x73, 0x91, 0x4b, 0x0e, 0x06, 0xd4, 0xb3, 0xfb, 0x00, 0x35, 0x6e, + 0x48, 0x42, 0x53, 0xb7, 0x96, 0x59, 0xa2, 0xf2, 0xb4, 0x6b, 0x1d, 0x97, 0x21, 0xeb, 0x7b, 0x2f, + 0xa2, 0x4f, 0x14, 0x65, 0x0b, 0x7d, 0xfe, 0x84, 0x71, 0x92, 0xad, 0x3e, 0xac, 0x52, 0x1a, 0xda, + 0x04, 0x6b, 0xbd, 0xc9, 0x72, 0x3a, 0xc5, 0xd4, 0x0e, 0xc6, 0x04, 0x5f, 0xd0, 0x3c, 0x27, 0x33, + 0x1a, 0x62, 0x05, 0x0a, 0x8b, 0xa0, 0x7e, 0x4c, 0x24, 0xb1, 0x18, 0xa4, 0x02, 0x84, 0x47, 0x14, + 0xfc, 0xb2, 0x2a, 0x0f, 0x9f, 0xab, 0x29, 0x6e, 0x51, 0xb7, 0x97, 0x2a, 0xe4, 0x69, 0x78, 0x4c, + 0x62, 0xeb, 0x6a, 0xe5, 0x2a, 0x87, 0xb4, 0x56, 0x01, 0xc5, 0x9c, 0x5e, 0x40, 0x48, 0x51, 0x07, + 0x09, 0xb5, 0x24, 0x4d, 0x79, 0xd3, 0xd0, 0x2e, 0xce, 0x66, 0x13, 0xd7, 0x1e, 0x6b, 0x3f, 0xf0, + 0xe7, 0xf7, 0x6f, 0xbf, 0xc3, 0xda, 0x3a, 0xa7, 0x86, 0x1f, 0x77, 0xdc, 0xd0, 0x53, 0xa8, 0x78, + 0x45, 0x04, 0x7c, 0xff, 0x90, 0xc2, 0x20, 0x75, 0xb8, 0x1b, 0x28, 0x26, 0x7d, 0x96, 0xeb, 0x5a, + 0x96, 0xbb, 0x4f, 0x9b, 0x49, 0x16, 0x08, 0x29, 0xa3, 0x11, 0x85, 0xc4, 0xd3, 0x9a, 0x19, 0x24, + 0x2f, 0x3f, 0xbc, 0x79, 0x6d, 0x63, 0x99, 0x5e, 0xef, 0x70, 0x94, 0xe5, 0x40, 0x67, 0xcb, 0x2c, + 0x06, 0x4d, 0x43, 0x28, 0x63, 0xd2, 0x34, 0x59, 0xe6, 0xf3, 0x1f, 0x5e, 0xd5, 0x86, 0xc0, 0x52, + 0x83, 0x06, 0xe9, 0xf3, 0x2c, 0x13, 0x59, 0x80, 0x9e, 0x57, 0xc9, 0x1e, 0x49, 0x6e, 0x36, 0x5a, + 0xf4, 0x51, 0x22, 0x72, 0x2d, 0xf8, 0x36, 0xb3, 0x6a, 0xc4, 0x02, 0x7c, 0xc0, 0x36, 0x64, 0x5e, + 0x6a, 0x77, 0xbf, 0x4e, 0x98, 0x99, 0x6b, 0x7b, 0x10, 0xea, 0x3f, 0xb0, 0x05, 0x05, 0x8f, 0xef, + 0x68, 0x4d, 0xf1, 0x86, 0x98, 0x69, 0x17, 0x1e, 0xc2, 0x70, 0x21, 0x52, 0xca, 0x3b, 0x99, 0xc0, + 0x01, 0xa4, 0x5c, 0x2b, 0x78, 0x1a, 0xb2, 0xc2, 0x43, 0x0e, 0x54, 0x99, 0xb6, 0xec, 0xcb, 0xb0, + 0x2e, 0x21, 0xac, 0x83, 0x7f, 0xcc, 0x45, 0x26, 0x1d, 0xa7, 0xc0, 0xa1, 0xa7, 0x19, 0x67, 0x40, + 0x7d, 0x71, 0xc8, 0x7d, 0xb1, 0x01, 0xf7, 0x06, 0xf3, 0x5a, 0xd8, 0xa5, 0xd1, 0x22, 0xe4, 0x55, + 0x9d, 0x0c, 0x39, 0x34, 0x34, 0x42, 0x40, 0x43, 0xb6, 0x7b, 0x85, 0x87, 0x73, 0x2b, 0x5f, 0xe7, + 0x14, 0xad, 0xde, 0xd0, 0xfd, 0x63, 0xcd, 0xed, 0xb9, 0x2a, 0x7f, 0x11, 0x3a, 0x58, 0xa2, 0x92, + 0x49, 0x75, 0xd8, 0xa3, 0xee, 0x37, 0xf4, 0xd1, 0x91, 0xf4, 0x19, 0x07, 0xf2, 0x48, 0x3b, 0x54, + 0xde, 0x82, 0xa4, 0x0e, 0x9e, 0xde, 0xb8, 0x9e, 0xbd, 0x50, 0xb7, 0x26, 0x60, 0xc6, 0xdc, 0x97, + 0x60, 0x45, 0xee, 0xda, 0x11, 0x6a, 0x76, 0xcc, 0xae, 0x6c, 0xa8, 0x5b, 0x18, 0x54, 0x1b, 0xf0, + 0xc3, 0x13, 0x7e, 0x9c, 0x91, 0xd9, 0x0c, 0x8f, 0xbb, 0x51, 0x63, 0x04, 0x44, 0x1c, 0x92, 0xe7, + 0xdf, 0x81, 0xed, 0x86, 0xf6, 0x44, 0xdc, 0xd8, 0xb5, 0x43, 0xa6, 0xf9, 0x48, 0x1d, 0x30, 0xed, + 0xa2, 0x28, 0x7c, 0x92, 0x82, 0xf0, 0x63, 0x73, 0x98, 0xe4, 0xd6, 0x38, 0x4e, 0x61, 0x62, 0x9d, + 0x55, 0xfb, 0x9c, 0x23, 0x41, 0x8d, 0x9c, 0x28, 0x10, 0xc6, 0x21, 0xc0, 0x03, 0x18, 0x29, 0x39, + 0x23, 0x8a, 0xef, 0xd0, 0x8e, 0xe6, 0x34, 0xfa, 0x84, 0xac, 0x78, 0xb2, 0x41, 0x81, 0x68, 0x0a, + 0x89, 0x3e, 0x00, 0xd3, 0x97, 0x3b, 0x78, 0x28, 0x56, 0xa7, 0xf3, 0xf1, 0xd5, 0xbb, 0xf6, 0xb4, + 0xa4, 0xcd, 0x29, 0x44, 0x51, 0xd0, 0xb9, 0x65, 0xfa, 0x5c, 0xdc, 0x38, 0xc2, 0x64, 0xe7, 0x78, + 0xf6, 0xa4, 0xae, 0x00, 0x6a, 0xf2, 0xab, 0x78, 0x4d, 0x15, 0x9f, 0x2d, 0x1c, 0xb4, 0xc5, 0x9c, + 0x67, 0xe4, 0xad, 0xd1, 0x34, 0x24, 0x5e, 0x13, 0x71, 0xed, 0x9e, 0xc1, 0xae, 0x2d, 0x47, 0xe2, + 0x7d, 0x18, 0x24, 0x12, 0xb1, 0xfe, 0xca, 0xd4, 0xba, 0xea, 0xf8, 0xb7, 0xe4, 0xbd, 0xb5, 0x2c, + 0x35, 0x71, 0x22, 0xe2, 0x15, 0xd0, 0xae, 0x16, 0x95, 0xd3, 0x04, 0x92, 0x89, 0x6a, 0x55, 0xea, + 0x88, 0x2b, 0x13, 0xa5, 0x76, 0xa4, 0xc8, 0x69, 0x73, 0x65, 0x35, 0x0d, 0x80, 0xfa, 0x88, 0x6b, + 0x1d, 0x30, 0x6b, 0xe1, 0xfe, 0x15, 0x46, 0x5d, 0xd4, 0xf2, 0x9a, 0xd8, 0x4d, 0xef, 0xb6, 0x4a, + 0x28, 0x3e, 0xee, 0x48, 0x4a, 0x33, 0x5a, 0x27, 0x46, 0xbb, 0x4e, 0x22, 0x4d, 0xd8, 0xdb, 0x72, + 0x05, 0x7a, 0xbe, 0x55, 0x8e, 0xab, 0x4d, 0x7e, 0xaf, 0x3a, 0xeb, 0xe7, 0x94, 0xdd, 0x2c, 0x2a, + 0x51, 0x99, 0x33, 0xd5, 0x4a, 0x01, 0x74, 0x31, 0xf1, 0xd5, 0x0a, 0x50, 0x9c, 0xcd, 0xd6, 0x35, + 0xe0, 0xb7, 0x1c, 0xa9, 0x82, 0x41, 0x28, 0x11, 0x7f, 0x80, 0x3c, 0xb3, 0x17, 0xda, 0x7f, 0xfb, + 0xeb, 0x7f, 0xfc, 0x9b, 0x5d, 0xd3, 0x56, 0x73, 0x21, 0x59, 0xf1, 0xeb, 0x90, 0x5d, 0x62, 0xde, + 0xad, 0xab, 0x05, 0x92, 0x06, 0xb3, 0xd0, 0x11, 0xbf, 0xe5, 0xc9, 0x2a, 0x44, 0x4d, 0xf9, 0xad, + 0xcc, 0x57, 0x9a, 0x22, 0xba, 0x34, 0xa5, 0x63, 0x6d, 0xe3, 0x62, 0x6d, 0x48, 0xf6, 0xe0, 0xc0, + 0x9e, 0x2c, 0xa5, 0x14, 0xdc, 0xde, 0xab, 0xa9, 0x6e, 0x69, 0xa3, 0xd4, 0xe7, 0x22, 0xa6, 0x68, + 0x52, 0xbe, 0x14, 0xaf, 0x21, 0x0b, 0x49, 0xe8, 0x6b, 0x71, 0x4d, 0xb3, 0x33, 0x02, 0xd1, 0xd8, + 0xd5, 0xb6, 0x2b, 0x8d, 0x65, 0x69, 0x5f, 0x64, 0x56, 0xb7, 0xdb, 0x81, 0x52, 0xc8, 0x61, 0xb3, + 0x5c, 0x2a, 0x11, 0xd5, 0x9b, 0x4d, 0x51, 0x7e, 0x8d, 0x46, 0xff, 0x5d, 0x8c, 0xa7, 0xa4, 0x64, + 0x30, 0xab, 0xd8, 0x6f, 0x6e, 0x2a, 0xda, 0x22, 0x3a, 0x38, 0x10, 0x5d, 0xec, 0x24, 0x0d, 0x87, + 0x9b, 0x94, 0xfc, 0x24, 0xda, 0xe1, 0xea, 0xb9, 0x5e, 0xe5, 0x77, 0x0b, 0x8d, 0x7a, 0xea, 0x54, + 0x1c, 0x43, 0x95, 0x89, 0xc3, 0x34, 0xae, 0xf8, 0x4d, 0xbe, 0xc2, 0x3c, 0x35, 0xc2, 0x9e, 0xdd, + 0xb2, 0xcf, 0x33, 0x43, 0xb2, 0xae, 0x39, 0x6e, 0x50, 0x2c, 0xab, 0x9b, 0x0f, 0xd5, 0xfa, 0x02, + 0x17, 0x95, 0x7a, 0x76, 0x33, 0x61, 0xc6, 0x15, 0x0f, 0xcf, 0x15, 0xb1, 0x26, 0x07, 0x5f, 0x4d, + 0xf0, 0xeb, 0x96, 0xfd, 0x0a, 0xb7, 0xa2, 0x61, 0x2d, 0x17, 0xca, 0x14, 0x6d, 0xcf, 0x4e, 0x21, + 0x52, 0x5c, 0x8b, 0x2c, 0x86, 0x26, 0x5f, 0x2e, 0x26, 0x90, 0x00, 0x5f, 0x82, 0xae, 0x44, 0xc9, + 0x32, 0xa6, 0xb9, 0x41, 0xe7, 0xaa, 0x1c, 0xa3, 0x30, 0x5f, 0xbc, 0xf7, 0xa8, 0x47, 0xc0, 0xff, + 0xfe, 0xaf, 0x7f, 0xb5, 0xbb, 0x3d, 0xe7, 0x5d, 0x85, 0x82, 0x9e, 0xa7, 0x8e, 0x9e, 0xd4, 0xd1, + 0xff, 0xed, 0xaf, 0xff, 0xf9, 0xef, 0x36, 0x74, 0xfd, 0x2e, 0xfc, 0x6e, 0xb9, 0xb8, 0xb0, 0xd4, + 0x5c, 0x10, 0x34, 0x48, 0xe6, 0x99, 0x94, 0x19, 0x83, 0xed, 0xa7, 0x60, 0x3e, 0xec, 0x57, 0x10, + 0x98, 0x7d, 0x8c, 0xe5, 0xb5, 0xbf, 0x20, 0x37, 0x3a, 0x9b, 0x0d, 0x8f, 0xdd, 0x8e, 0x48, 0xb8, + 0xa5, 0xf9, 0xe8, 0x61, 0xda, 0x7d, 0x50, 0xdb, 0x83, 0x5b, 0x69, 0xba, 0x42, 0x81, 0x8e, 0x4a, + 0x65, 0xcd, 0x4f, 0x42, 0xac, 0x93, 0x9b, 0x09, 0x74, 0x0a, 0x79, 0xb3, 0xf1, 0x0e, 0x5d, 0x99, + 0xf5, 0x93, 0xd3, 0x1d, 0xb9, 0x35, 0xe0, 0xe4, 0x07, 0x07, 0x8d, 0x44, 0x51, 0x60, 0x5f, 0x3d, + 0x49, 0xed, 0x9a, 0xa8, 0x22, 0x0e, 0x85, 0x8a, 0x16, 0x9c, 0x86, 0x22, 0x18, 0x36, 0xc8, 0x36, + 0x4f, 0xbe, 0x1b, 0x43, 0xe6, 0x04, 0xfc, 0x5f, 0xa0, 0x20, 0x96, 0x7f, 0xce, 0x51, 0x9d, 0xdd, + 0xad, 0xaa, 0xb8, 0x7e, 0xb2, 0x51, 0x2f, 0x4c, 0x20, 0xd2, 0x15, 0xb9, 0x30, 0xc7, 0x23, 0xae, + 0xb7, 0x93, 0x5f, 0x20, 0x68, 0xfa, 0x9f, 0xe8, 0x2a, 0x87, 0x31, 0xe5, 0x76, 0x15, 0x2a, 0x74, + 0x33, 0xf8, 0x85, 0xd9, 0x2d, 0x37, 0x3e, 0x16, 0x8b, 0x71, 0xcc, 0x4b, 0xe9, 0x05, 0xbf, 0xf4, + 0x55, 0x9e, 0x6a, 0x7c, 0xef, 0xb8, 0x75, 0xcc, 0x53, 0x23, 0x68, 0xe9, 0x7c, 0xd6, 0xe3, 0x5e, + 0x6d, 0x96, 0x27, 0xc3, 0x2a, 0x00, 0x6b, 0x0a, 0x9f, 0x75, 0xf1, 0xb7, 0xb7, 0x65, 0x2c, 0xb8, + 0x03, 0xf4, 0x53, 0x03, 0x53, 0x5c, 0x08, 0xbf, 0x67, 0x93, 0x84, 0xf1, 0x59, 0xcd, 0xcd, 0x07, + 0x18, 0x28, 0xbe, 0x06, 0x57, 0x50, 0xa0, 0xac, 0x2e, 0x57, 0x2b, 0x6c, 0x8d, 0x30, 0x53, 0xad, + 0x72, 0x53, 0x48, 0xca, 0x64, 0xaf, 0x77, 0x90, 0x55, 0x91, 0xe7, 0x16, 0xd2, 0x2a, 0x66, 0xfe, + 0xaf, 0xc8, 0x6b, 0x7b, 0xcd, 0x2a, 0xbe, 0x88, 0x50, 0xfa, 0xa0, 0x79, 0xd9, 0x4a, 0xa7, 0x5b, + 0x78, 0xf6, 0x58, 0xa5, 0xe7, 0xe2, 0xf6, 0xb6, 0xc8, 0x8b, 0x8a, 0xbe, 0x56, 0x82, 0x2e, 0x94, + 0x45, 0xb7, 0xe4, 0x65, 0x80, 0x4b, 0x89, 0x25, 0xe2, 0xca, 0xdd, 0xbe, 0x94, 0x68, 0x68, 0x95, + 0xb8, 0xaa, 0x74, 0x0a, 0xa0, 0x3d, 0x1d, 0x80, 0xef, 0xb4, 0x5e, 0x6d, 0x79, 0x32, 0x1c, 0x8c, + 0x1b, 0x97, 0xa5, 0x25, 0x2e, 0x55, 0xe5, 0xbf, 0xe2, 0xd2, 0xe8, 0xbe, 0x8f, 0x9e, 0x51, 0x9d, + 0x00, 0xc2, 0x4e, 0x84, 0xa1, 0x04, 0xc7, 0xb1, 0x3d, 0x10, 0x82, 0x6f, 0x91, 0xbd, 0xde, 0x18, + 0x0b, 0x73, 0x1d, 0xca, 0x11, 0x37, 0xd2, 0x30, 0xb0, 0x22, 0x45, 0x63, 0xcc, 0xc1, 0x51, 0x34, + 0xbe, 0x0b, 0xe7, 0x32, 0x18, 0xbb, 0x66, 0x20, 0xa3, 0xf8, 0x98, 0xc6, 0x19, 0xb8, 0x3b, 0xb8, + 0x5b, 0x57, 0x39, 0x87, 0xc6, 0xa1, 0xb2, 0x0e, 0x1d, 0xb6, 0x24, 0xc4, 0x02, 0x64, 0x2a, 0x14, + 0x9e, 0xc1, 0xd6, 0x72, 0x93, 0xc0, 0xe2, 0xa6, 0x94, 0xb2, 0x52, 0x91, 0xd6, 0x41, 0x56, 0x53, + 0xca, 0x5a, 0x89, 0x0a, 0x39, 0x6b, 0xf8, 0x5a, 0xe1, 0x67, 0x0a, 0x90, 0x92, 0x51, 0x52, 0x32, + 0x6a, 0x50, 0x57, 0xac, 0xaa, 0x22, 0xa7, 0x80, 0x4b, 0x10, 0x8e, 0x14, 0x27, 0xac, 0x6a, 0x18, + 0xca, 0xa1, 0x31, 0xaf, 0xa9, 0x45, 0xd2, 0xca, 0x62, 0xc1, 0x9b, 0xca, 0x76, 0xc6, 0x54, 0x0a, + 0xac, 0xf6, 0xca, 0x41, 0x16, 0x0b, 0x87, 0x22, 0x4c, 0x5b, 0xa7, 0x5b, 0xae, 0xd7, 0x04, 0xf9, + 0xbd, 0x18, 0x76, 0xd0, 0x4e, 0x68, 0xfc, 0x0d, 0xbb, 0x41, 0x2f, 0x07, 0xc9, 0xa7, 0xfe, 0xf8, + 0x96, 0x2a, 0xaf, 0x77, 0x7b, 0xfb, 0x19, 0x89, 0x28, 0x1c, 0xa5, 0x44, 0xd4, 0x97, 0xa1, 0xf8, + 0x55, 0x2a, 0xf8, 0xb4, 0x43, 0x83, 0x2a, 0x8c, 0xc1, 0x57, 0x19, 0xfb, 0xd3, 0xea, 0x94, 0x8b, + 0x07, 0xf5, 0xbc, 0xae, 0xa0, 0x81, 0x49, 0x95, 0x69, 0x17, 0x69, 0x5d, 0x8d, 0x96, 0x19, 0xd1, + 0x0a, 0x54, 0xf5, 0xbb, 0x7a, 0x85, 0x78, 0xf4, 0xba, 0x7d, 0x1b, 0x5c, 0x97, 0x08, 0x42, 0x94, + 0x02, 0xc1, 0x8f, 0x52, 0x1e, 0xd5, 0xb1, 0x2d, 0x0c, 0x85, 0xe5, 0xb8, 0xc1, 0x3c, 0x65, 0x5f, + 0x50, 0x3e, 0x04, 0x28, 0x11, 0xe3, 0x47, 0x89, 0x78, 0x4a, 0x65, 0x34, 0x7f, 0xc6, 0xe3, 0xf3, + 0x1b, 0x1a, 0x61, 0xf6, 0xf0, 0x33, 0x1e, 0x6a, 0x06, 0xfd, 0xfe, 0x1f, 0xd6, 0xbb, 0x4e, 0x2a, + 0x37, 0x7d, 0x44, 0xf0, 0x73, 0x0d, 0x17, 0xf7, 0x5a, 0xc7, 0x3f, 0xda, 0x27, 0xd4, 0x8e, 0xf9, + 0xb8, 0x5b, 0xbb, 0x18, 0xbb, 0xa0, 0x97, 0x60, 0x5d, 0x8d, 0x6f, 0x7d, 0x4b, 0x36, 0x68, 0xc6, + 0xe9, 0x16, 0x6b, 0xf5, 0x2b, 0x0d, 0x4c, 0x85, 0x36, 0x9d, 0xd7, 0x83, 0xf5, 0x55, 0xb3, 0xd8, + 0xe2, 0x42, 0x5a, 0x53, 0x3c, 0x3f, 0xb3, 0x18, 0xaf, 0xc4, 0x5b, 0x3b, 0xe1, 0x6d, 0x86, 0xfe, + 0xb5, 0x89, 0xd2, 0x77, 0x3f, 0x88, 0x5b, 0xb9, 0xb6, 0xb7, 0xd7, 0x3c, 0x1a, 0x36, 0x07, 0x9c, + 0x39, 0x24, 0x64, 0x7c, 0xc6, 0xa6, 0x2b, 0x3c, 0xe1, 0x69, 0xbd, 0x51, 0x2a, 0x69, 0x9a, 0x83, + 0x5d, 0xc8, 0xe0, 0x38, 0xec, 0xc7, 0xed, 0xed, 0x9f, 0xd6, 0xf6, 0x95, 0x1d, 0xc8, 0x6c, 0x49, + 0x37, 0x7f, 0xaa, 0x71, 0x59, 0xa5, 0xbe, 0xc5, 0x65, 0x36, 0xa4, 0x3a, 0xfc, 0x02, 0x2b, 0x24, + 0xd0, 0x06, 0x63, 0x3b, 0xf5, 0xa5, 0xf0, 0xe6, 0xe4, 0xaa, 0x5c, 0xe8, 0x9c, 0x6f, 0x54, 0xf9, + 0x73, 0x18, 0x8a, 0x64, 0xff, 0xb7, 0xd1, 0x2f, 0x8e, 0x13, 0xee, 0x3e, 0x1b, 0x05, 0xa9, 0x5e, + 0x06, 0xbf, 0x43, 0x87, 0xf4, 0x52, 0x24, 0x31, 0xcd, 0x3c, 0x96, 0xab, 0x72, 0x19, 0x53, 0xa7, + 0x12, 0x7b, 0xa3, 0x8c, 0x86, 0x0d, 0x2c, 0x40, 0x4c, 0xa3, 0x98, 0xf3, 0xd4, 0x69, 0x63, 0x43, + 0x67, 0xf9, 0x85, 0x6a, 0xd8, 0x6b, 0xcf, 0x31, 0x17, 0xb5, 0xc5, 0xed, 0xd2, 0xd6, 0xb0, 0xb9, + 0xa3, 0x2d, 0x6e, 0x9d, 0xc0, 0xf1, 0xee, 0x7a, 0x42, 0xb6, 0xb5, 0xb6, 0xe2, 0x08, 0x58, 0x0d, + 0xfc, 0xa8, 0x2f, 0x69, 0x5b, 0x11, 0xa7, 0x78, 0xb2, 0x66, 0x2c, 0x53, 0x79, 0xf8, 0x8f, 0xcd, + 0xc7, 0x6b, 0xf5, 0xa1, 0x97, 0xfa, 0xe6, 0x2b, 0x28, 0x2e, 0xcd, 0xc2, 0x2d, 0x76, 0xa1, 0x86, + 0x7a, 0x8e, 0x3a, 0x0d, 0x7a, 0x7a, 0x96, 0x30, 0xe0, 0x53, 0xdd, 0x9f, 0xb9, 0xed, 0x17, 0x71, + 0x77, 0x9e, 0x67, 0x56, 0xbd, 0x05, 0xbf, 0xfb, 0x1d, 0x5d, 0x1b, 0xd4, 0xed, 0x90, 0x82, 0xb6, + 0xc0, 0xf2, 0xc5, 0x76, 0x58, 0xec, 0xa8, 0x5d, 0x7b, 0xe0, 0x3d, 0x48, 0x6f, 0x5c, 0x3b, 0xb0, + 0xdb, 0x4f, 0xbe, 0xed, 0x4a, 0x0b, 0x8b, 0x33, 0x8b, 0xf2, 0xaa, 0xca, 0xd6, 0x06, 0x0a, 0x61, + 0x0a, 0xbd, 0x3a, 0x46, 0xdb, 0xa7, 0xb6, 0x1d, 0x94, 0x1c, 0x3a, 0xfd, 0x8b, 0x9f, 0x3e, 0xfe, + 0xf3, 0x65, 0x7f, 0xe6, 0xd9, 0x96, 0xed, 0x56, 0xbd, 0xce, 0x3f, 0xfd, 0x74, 0xbd, 0x1e, 0x6e, + 0xdc, 0x5b, 0xe7, 0xa7, 0xbc, 0xa7, 0x9b, 0x00, 0x03, 0xc5, 0x1b, 0xaa, 0xd0, 0x0f, 0xb0, 0x61, + 0x85, 0xf2, 0x6c, 0x50, 0xd5, 0xf1, 0xc8, 0xf8, 0x7d, 0x16, 0x9d, 0xd7, 0x1e, 0x47, 0x36, 0xee, + 0xaa, 0xd6, 0xc5, 0xbd, 0x5e, 0x33, 0x0f, 0x7c, 0x96, 0x24, 0x8e, 0x5d, 0x3d, 0x8b, 0xb6, 0xcc, + 0x23, 0x60, 0xe0, 0x03, 0x24, 0x70, 0x4e, 0xa2, 0x79, 0xfd, 0xc0, 0xdd, 0x5d, 0x77, 0x55, 0xad, + 0x48, 0x19, 0xdf, 0x0c, 0x17, 0x17, 0x5d, 0x2f, 0xe0, 0xfb, 0x2d, 0x7c, 0xbb, 0xde, 0x2e, 0x68, + 0xe8, 0x68, 0x82, 0x9f, 0x63, 0xc7, 0x6e, 0xf8, 0x84, 0x92, 0x2b, 0x5a, 0x87, 0x7f, 0x8d, 0x1d, + 0xbb, 0xe0, 0x45, 0x5a, 0x81, 0x8a, 0x54, 0xd5, 0xb2, 0xc5, 0x61, 0x32, 0x14, 0xe8, 0x4d, 0x77, + 0x51, 0xf6, 0xde, 0x55, 0x3c, 0x18, 0xa4, 0x77, 0xc8, 0xa6, 0x3c, 0xb1, 0x56, 0xf5, 0xf3, 0x36, + 0x99, 0xcf, 0xc9, 0x2f, 0x97, 0x24, 0x93, 0xf5, 0x15, 0xe2, 0xdf, 0x5b, 0xc8, 0xdd, 0x12, 0xf9, + 0xbf, 0x24, 0x6f, 0xc4, 0x1f, 0x37, 0xb1, 0xc7, 0x77, 0xdd, 0x9b, 0xd6, 0x8d, 0x6d, 0xb9, 0x72, + 0x94, 0x95, 0x9c, 0xb3, 0xdc, 0x98, 0xa4, 0x79, 0xf9, 0x13, 0xda, 0x03, 0xff, 0xd8, 0xf6, 0x4a, + 0x55, 0x0f, 0x11, 0xc4, 0xdc, 0x1c, 0x7e, 0x50, 0x56, 0x0b, 0x2e, 0x80, 0x4e, 0xa7, 0xb0, 0x75, + 0xb0, 0x71, 0xe0, 0x5e, 0xe3, 0xd0, 0xc6, 0xbc, 0xdc, 0x6e, 0xc3, 0xc0, 0x96, 0xbc, 0x80, 0x6f, + 0x7d, 0x7e, 0xd2, 0xc7, 0x3b, 0x3a, 0xdb, 0x53, 0xe4, 0xca, 0x5c, 0xb6, 0xf5, 0x86, 0xad, 0xc5, + 0x9e, 0x86, 0xf6, 0x68, 0x0b, 0xaf, 0xfb, 0x79, 0x3a, 0x60, 0xd7, 0x8c, 0x17, 0x84, 0xe2, 0x46, + 0x6a, 0x80, 0x5c, 0x6a, 0xec, 0xb0, 0x5c, 0xad, 0x28, 0xad, 0x95, 0x0f, 0x61, 0xdd, 0xbf, 0x5b, + 0x45, 0xa9, 0xbe, 0xe7, 0xc0, 0x1d, 0x29, 0x4a, 0x16, 0x5b, 0xa9, 0x92, 0xb2, 0x92, 0xbf, 0x93, + 0x87, 0xf8, 0x0c, 0x89, 0xae, 0xfd, 0x06, 0x6d, 0x71, 0x68, 0xe7, 0xcd, 0xbc, 0x19, 0x2d, 0x84, + 0x8d, 0xa7, 0x27, 0x4d, 0x39, 0x61, 0x7f, 0x27, 0x4e, 0x34, 0x87, 0xda, 0x53, 0x01, 0xaa, 0xaa, + 0x64, 0x58, 0xd9, 0x0b, 0x3a, 0x25, 0xcb, 0x04, 0x02, 0x88, 0x57, 0x7f, 0x7f, 0xdc, 0xb2, 0x8b, + 0x52, 0xf7, 0xaa, 0x85, 0xe0, 0x2b, 0xb1, 0x62, 0x15, 0x1d, 0xd3, 0x94, 0x79, 0x74, 0x4c, 0x6b, + 0xad, 0x7f, 0x6b, 0xa6, 0x48, 0x4d, 0x26, 0x88, 0xbb, 0x2d, 0xd2, 0x77, 0xd0, 0x41, 0x66, 0x2a, + 0x07, 0xc6, 0xb7, 0x05, 0x85, 0x96, 0xef, 0x85, 0x4a, 0xcf, 0x77, 0x88, 0x08, 0x2d, 0xaa, 0x04, + 0xdd, 0xa1, 0x96, 0x63, 0xfd, 0x22, 0x8f, 0x87, 0x25, 0x20, 0x30, 0x29, 0x38, 0xc5, 0x38, 0xe9, + 0xec, 0x41, 0xd1, 0x5a, 0xba, 0x28, 0xbe, 0x2d, 0x64, 0xe8, 0x32, 0x1a, 0x5b, 0x9d, 0x72, 0x16, + 0x37, 0xa7, 0xed, 0xeb, 0x71, 0xe8, 0x06, 0x51, 0xd9, 0x66, 0x46, 0xb3, 0x14, 0x74, 0x03, 0xd5, + 0x59, 0x8b, 0xd0, 0x8c, 0x43, 0x0d, 0x24, 0x9f, 0xab, 0x97, 0xa7, 0x0e, 0xd7, 0x73, 0x38, 0x18, + 0x8a, 0x39, 0xca, 0xa8, 0x89, 0xa0, 0x90, 0x64, 0xd7, 0xeb, 0xf1, 0x76, 0x5d, 0x81, 0x55, 0x82, + 0xf4, 0x84, 0x39, 0x80, 0x77, 0xd7, 0x6a, 0xdc, 0xa1, 0x3d, 0xee, 0xad, 0x17, 0x54, 0xce, 0x45, + 0x1c, 0xd8, 0x90, 0x55, 0xd8, 0x1b, 0xa8, 0xb1, 0xe6, 0x14, 0x54, 0x16, 0xe3, 0xa9, 0xf8, 0xf4, + 0x54, 0xd7, 0xe0, 0x0e, 0x24, 0x31, 0x60, 0xae, 0xdf, 0x40, 0xb1, 0x61, 0xd9, 0x3d, 0xde, 0xb3, + 0xab, 0xbc, 0x1e, 0x56, 0x65, 0xe3, 0x65, 0x42, 0x31, 0x6b, 0x2d, 0xa0, 0x6e, 0x45, 0x57, 0xef, + 0x43, 0xd9, 0xd2, 0xb6, 0x02, 0x72, 0x70, 0x40, 0x60, 0x58, 0x5f, 0xda, 0x5b, 0x40, 0x4f, 0xc2, + 0x82, 0x10, 0x63, 0xd3, 0xaf, 0xa8, 0x48, 0x01, 0xa5, 0x0d, 0x27, 0x49, 0xb2, 0x72, 0x1c, 0x17, + 0xb0, 0x6e, 0xdc, 0x8e, 0xb7, 0x39, 0xd6, 0xbd, 0x3c, 0x8b, 0x42, 0xf3, 0x0c, 0xa4, 0xdf, 0x8f, + 0x62, 0xfe, 0x0b, 0xea, 0x99, 0x58, 0xc6, 0xd3, 0x04, 0xe4, 0x89, 0x47, 0x31, 0x7d, 0xf2, 0x0b, + 0xb9, 0xe9, 0x27, 0x6c, 0x92, 0xf7, 0xe5, 0x3c, 0xa3, 0x14, 0xaa, 0xb6, 0x7e, 0x36, 0x1c, 0x9d, + 0x9a, 0xaf, 0x05, 0xe3, 0xd0, 0x63, 0x5b, 0xf7, 0x16, 0xe4, 0xe6, 0x10, 0x9f, 0x69, 0xd8, 0xa7, + 0x0f, 0x8e, 0x07, 0x03, 0xfb, 0x49, 0x8d, 0x56, 0xdf, 0xfc, 0xc5, 0x1f, 0x1e, 0x10, 0x58, 0x82, + 0x27, 0x82, 0x80, 0xff, 0x2c, 0x9e, 0xc0, 0xe0, 0x1f, 0xf3, 0xcd, 0x87, 0x4f, 0xee, 0xed, 0xfa, + 0x43, 0x40, 0x18, 0xb3, 0x1e, 0xc7, 0xec, 0xca, 0x52, 0xea, 0x1f, 0xda, 0xa5, 0xc3, 0xb0, 0x4d, + 0x3f, 0xfe, 0xfd, 0x82, 0x56, 0x9b, 0x01, 0xb0, 0x51, 0x42, 0x29, 0x3d, 0x42, 0xe2, 0x00, 0xb3, + 0x05, 0x39, 0xb4, 0xad, 0xcf, 0x01, 0xde, 0xab, 0x20, 0x47, 0x9f, 0x87, 0xac, 0x00, 0x8f, 0x76, + 0x02, 0xde, 0xdb, 0x9e, 0xa0, 0x4b, 0xb3, 0x27, 0x07, 0xfb, 0x8f, 0x1e, 0x3e, 0x1a, 0x8c, 0xdb, + 0xe3, 0x55, 0xea, 0x58, 0xa0, 0x54, 0x3d, 0x28, 0xd3, 0x02, 0x21, 0x8a, 0x52, 0x49, 0x16, 0xff, + 0xa4, 0xf2, 0x7f, 0x00, 0xa6, 0xc5, 0xb1, 0x6b, 0x69, 0x39, 0x00, 0x00 };