From 5b4472ab56dfa3c63eb1c243910f7d9c38aa633e Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Fri, 16 Oct 2020 19:38:59 -0700 Subject: [PATCH 01/17] fix case of HttpAPI class --- src/meshwifi/meshhttp.cpp | 2 +- src/meshwifi/meshhttp.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index 85e4bf73e..7f26800af 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -39,7 +39,7 @@ HTTPSServer *secureServer; HTTPServer *insecureServer; // Our API to handle messages to and from the radio. -httpAPI webAPI; +HttpAPI webAPI; // Declare some handler functions for the various URLs on the server void handleAPIv1FromRadio(HTTPRequest *req, HTTPResponse *res); diff --git a/src/meshwifi/meshhttp.h b/src/meshwifi/meshhttp.h index 38949b952..4ced96c32 100644 --- a/src/meshwifi/meshhttp.h +++ b/src/meshwifi/meshhttp.h @@ -135,7 +135,7 @@ const byte FAVICON_DATA[] = { // Length of the binary data const int FAVICON_LENGTH = 2238; -class httpAPI : public PhoneAPI +class HttpAPI : public PhoneAPI { public: From 2901f773a4ab3a279930853c74ad0a7eca1dcff1 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Fri, 16 Oct 2020 23:33:50 -0700 Subject: [PATCH 02/17] Some cleanup and implement the X-Protobuf-Schema header --- src/meshwifi/meshhttp.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index 7f26800af..8e4cb4c73 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -343,6 +343,7 @@ void handleAPIv1FromRadio(HTTPRequest *req, HTTPResponse *res) res->setHeader("Content-Type", "application/x-protobuf"); res->setHeader("Access-Control-Allow-Origin", "*"); res->setHeader("Access-Control-Allow-Methods", "PUT, GET"); + res->setHeader("X-Protobuf-Schema", "https://raw.githubusercontent.com/meshtastic/Meshtastic-protobufs/master/mesh.proto"); uint8_t txBuf[MAX_STREAM_BUF_SIZE]; uint32_t len = 1; @@ -380,19 +381,14 @@ void handleAPIv1ToRadio(HTTPRequest *req, HTTPResponse *res) // Status code is 200 OK by default. - if (req->getMethod() != "OPTIONS") { - res->setHeader("Content-Type", "application/x-protobuf"); - } else { - res->setHeader("Content-Type", "application/x-protobuf"); - - } - + res->setHeader("Content-Type", "application/x-protobuf"); res->setHeader("Access-Control-Allow-Headers", "Content-Type"); res->setHeader("Access-Control-Allow-Origin", "*"); res->setHeader("Access-Control-Allow-Methods", "PUT, OPTIONS"); + res->setHeader("X-Protobuf-Schema", "https://raw.githubusercontent.com/meshtastic/Meshtastic-protobufs/master/mesh.proto"); if (req->getMethod() == "OPTIONS") { - res->setStatusCode(204); + res->setStatusCode(204); // Success with no content res->print(""); return; } From 63113d57b3611bb8e25057a6a191ce77c084946e Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sat, 17 Oct 2020 11:30:59 -0700 Subject: [PATCH 03/17] Initial integration of meshtastic.js and sample code --- src/meshwifi/meshhttp.cpp | 131 +++- src/meshwifi/meshhttp.h | 112 --- src/meshwifi/meshhttpStatic.h | 1262 +++++++++++++++++++++++++++++++++ 3 files changed, 1392 insertions(+), 113 deletions(-) create mode 100644 src/meshwifi/meshhttpStatic.h diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index 8e4cb4c73..897f81953 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -2,6 +2,7 @@ #include "NodeDB.h" #include "configuration.h" #include "main.h" +#include "meshhttpStatic.h" #include "meshwifi/meshwifi.h" #include "sleep.h" #include @@ -49,6 +50,9 @@ void handleJSONChatHistoryDummy(HTTPRequest *req, HTTPResponse *res); void handleHotspot(HTTPRequest *req, HTTPResponse *res); void handleFavicon(HTTPRequest *req, HTTPResponse *res); void handleRoot(HTTPRequest *req, HTTPResponse *res); +void handleBasicHTML(HTTPRequest *req, HTTPResponse *res); +void handleBasicJS(HTTPRequest *req, HTTPResponse *res); +void handleStatic(HTTPRequest *req, HTTPResponse *res); void handle404(HTTPRequest *req, HTTPResponse *res); void middlewareSpeedUp240(HTTPRequest *req, HTTPResponse *res, std::function next); @@ -215,6 +219,9 @@ void initWebServer() ResourceNode *nodeHotspot = new ResourceNode("/hotspot-detect.html", "GET", &handleHotspot); ResourceNode *nodeFavicon = new ResourceNode("/favicon.ico", "GET", &handleFavicon); ResourceNode *nodeRoot = new ResourceNode("/", "GET", &handleRoot); + ResourceNode *nodeBasicHTML = new ResourceNode("/basic.html", "GET", &handleBasicHTML); + ResourceNode *nodeBasicJS = new ResourceNode("/basic.js", "GET", &handleBasicJS); + ResourceNode *nodeStatic = new ResourceNode("/static/*", "GET", &handleStatic); ResourceNode *node404 = new ResourceNode("", "GET", &handle404); // Secure nodes @@ -226,6 +233,9 @@ void initWebServer() secureServer->registerNode(nodeHotspot); secureServer->registerNode(nodeFavicon); secureServer->registerNode(nodeRoot); + secureServer->registerNode(nodeBasicHTML); + secureServer->registerNode(nodeBasicJS); + secureServer->registerNode(nodeStatic); secureServer->setDefaultNode(node404); secureServer->addMiddleware(&middlewareSpeedUp240); @@ -239,6 +249,9 @@ void initWebServer() insecureServer->registerNode(nodeHotspot); insecureServer->registerNode(nodeFavicon); insecureServer->registerNode(nodeRoot); + insecureServer->registerNode(nodeBasicHTML); + insecureServer->registerNode(nodeBasicJS); + insecureServer->registerNode(nodeStatic); insecureServer->setDefaultNode(node404); insecureServer->addMiddleware(&middlewareSpeedUp160); @@ -275,6 +288,34 @@ void middlewareSpeedUp160(HTTPRequest *req, HTTPResponse *res, std::functiongetParams(); + + // Set a default content type + res->setHeader("Content-Type", "text/plain"); + + std::string parameter1; + // Print the first parameter value + if (params->getPathParameter(0, parameter1)) { + if (parameter1 == "meshtastic.js") { + res->setHeader("Content-Encoding", "gzip"); + res->setHeader("Content-Type", "application/json"); + res->write(STATIC_MESHTASTIC_JS_DATA, STATIC_MESHTASTIC_JS_LENGTH); + + return; + } else { + res->print("Parameter 1: "); + res->printStd(parameter1); + + return; + } + + } else { + res->println("ERROR: This should not have happened..."); + } +} void handle404(HTTPRequest *req, HTTPResponse *res) { @@ -393,7 +434,6 @@ void handleAPIv1ToRadio(HTTPRequest *req, HTTPResponse *res) return; } - byte buffer[MAX_TO_FROM_RADIO_SIZE]; size_t s = req->readBytes(buffer, MAX_TO_FROM_RADIO_SIZE); @@ -1082,4 +1122,93 @@ void handleFavicon(HTTPRequest *req, HTTPResponse *res) res->setHeader("Content-Type", "image/vnd.microsoft.icon"); // Write data from header file res->write(FAVICON_DATA, FAVICON_LENGTH); +} + +/* + To convert text to c strings: + + https://tomeko.net/online_tools/cpp_text_escape.php?lang=en +*/ +void handleBasicJS(HTTPRequest *req, HTTPResponse *res) +{ + String out = ""; + out += "var meshtasticClient;\n" + "var connectionOne;\n" + "\n" + "\n" + "// Important: the connect action must be called from a user interaction (e.g. button press), otherwise the browsers " + "won't allow the connect\n" + "function connect() {\n" + "\n" + " // Create new connection\n" + " var httpconn = new meshtasticjs.IHTTPConnection();\n" + " let sslActive = false;\n" + " let deviceIp = '10.10.30.198'; // Your devices IP here\n" + " \n" + "\n" + " // Add event listeners that get called when a new packet is received / state of device changes\n" + " httpconn.addEventListener('fromRadio', function(packet) { console.log(packet)});\n" + "\n" + " // Connect to the device async, then send a text message\n" + " httpconn.connect(deviceIp, sslActive)\n" + " .then(result => { \n" + "\n" + " alert('device has been configured')\n" + " // This gets called when the connection has been established\n" + " // -> send a message over the mesh network. If no recipient node is provided, it gets sent as a broadcast\n" + " return httpconn.sendText('meshtastic is awesome');\n" + "\n" + " })\n" + " .then(result => { \n" + "\n" + " // This gets called when the message has been sucessfully sent\n" + " console.log('Message sent!');})\n" + "\n" + " .catch(error => { console.log(error); });\n" + "\n" + "}"; + + // Status code is 200 OK by default. + // We want to deliver a simple HTML page, so we send a corresponding content type: + res->setHeader("Content-Type", "text/javascript"); + + // The response implements the Print interface, so you can use it just like + // you would write to Serial etc. + res->print(out); +} + +/* + To convert text to c strings: + + https://tomeko.net/online_tools/cpp_text_escape.php?lang=en +*/ +void handleBasicHTML(HTTPRequest *req, HTTPResponse *res) +{ + String out = ""; + out += "\n" + "\n" + "\n" + "\n" + " \n" + " \n" + "\n" + " \n" + " \n" + "\n" + "\n" + "\n" + "\n" + " \n" + " \n" + "\n" + "\n" + ""; + + // Status code is 200 OK by default. + // We want to deliver a simple HTML page, so we send a corresponding content type: + res->setHeader("Content-Type", "text/html"); + + // The response implements the Print interface, so you can use it just like + // you would write to Serial etc. + res->print(out); } \ No newline at end of file diff --git a/src/meshwifi/meshhttp.h b/src/meshwifi/meshhttp.h index 4ced96c32..d2af443f0 100644 --- a/src/meshwifi/meshhttp.h +++ b/src/meshwifi/meshhttp.h @@ -22,118 +22,6 @@ void handleRoot(); void handleScriptsScriptJS(); void handleJSONChatHistoryDummy(); -// Binary data for the favicon -const byte FAVICON_DATA[] = { - 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x20, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0xA8, 0x08, 0x00, 0x00, 0x16, 0x00, 0x00, - 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x84, - 0xDC, 0x3D, 0x00, 0x84, 0xDC, 0x3C, 0x00, 0x85, 0xDC, 0x3F, 0x00, 0x86, 0xDD, 0x40, 0x00, 0x83, 0xDC, 0x3C, 0x00, 0x85, 0xDC, - 0x3E, 0x00, 0x82, 0xDC, 0x3A, 0x00, 0x8B, 0xDE, 0x49, 0x00, 0x84, 0xDB, 0x3E, 0x00, 0x82, 0xD9, 0x3C, 0x00, 0x89, 0xDD, 0x45, - 0x00, 0x83, 0xDB, 0x3C, 0x00, 0x83, 0xD8, 0x3D, 0x00, 0x81, 0xD8, 0x3A, 0x00, 0x8D, 0xE0, 0x49, 0x00, 0x88, 0xE4, 0x3F, 0x00, - 0x89, 0xE9, 0x3E, 0x00, 0x84, 0xD8, 0x40, 0x00, 0x85, 0xDF, 0x3C, 0x00, 0x8E, 0xF2, 0x40, 0x00, 0x8D, 0xF6, 0x3D, 0x00, 0x90, - 0xEA, 0x49, 0x00, 0x82, 0xD5, 0x3E, 0x00, 0x78, 0xC1, 0x3A, 0x00, 0x90, 0xE9, 0x4A, 0x00, 0x8E, 0xF5, 0x3D, 0x00, 0x84, 0xDD, - 0x3D, 0x00, 0x91, 0xF7, 0x43, 0x00, 0x87, 0xE5, 0x3D, 0x00, 0x6C, 0xA2, 0x38, 0x00, 0x53, 0x65, 0x31, 0x00, 0x41, 0x39, 0x2E, - 0x00, 0x3A, 0x27, 0x2B, 0x00, 0x34, 0x1A, 0x2A, 0x00, 0x41, 0x38, 0x2E, 0x00, 0x82, 0xD8, 0x3D, 0x00, 0x88, 0xE7, 0x3D, 0x00, - 0x8E, 0xF3, 0x41, 0x00, 0x69, 0x95, 0x39, 0x00, 0x3E, 0x33, 0x2C, 0x00, 0x31, 0x11, 0x29, 0x00, 0x2E, 0x0A, 0x29, 0x00, 0x2D, - 0x0B, 0x27, 0x00, 0x30, 0x10, 0x29, 0x00, 0x34, 0x18, 0x2A, 0x00, 0x3E, 0x31, 0x2C, 0x00, 0x68, 0x95, 0x39, 0x00, 0x88, 0xE7, - 0x3E, 0x00, 0x82, 0xD7, 0x3C, 0x00, 0x84, 0xDD, 0x3C, 0x00, 0x8B, 0xEE, 0x3E, 0x00, 0x85, 0xDF, 0x3D, 0x00, 0x47, 0x48, 0x2E, - 0x00, 0x30, 0x0F, 0x29, 0x00, 0x31, 0x13, 0x29, 0x00, 0x48, 0x4D, 0x2E, 0x00, 0x61, 0x7F, 0x39, 0x00, 0x6A, 0x9C, 0x38, 0x00, - 0x75, 0xB8, 0x39, 0x00, 0x85, 0xDE, 0x3D, 0x00, 0x8C, 0xEF, 0x3E, 0x00, 0x89, 0xDE, 0x44, 0x00, 0x80, 0xD1, 0x3C, 0x00, 0x3A, - 0x28, 0x2C, 0x00, 0x32, 0x16, 0x2A, 0x00, 0x33, 0x17, 0x2A, 0x00, 0x4B, 0x50, 0x30, 0x00, 0x76, 0xBA, 0x3A, 0x00, 0x8A, 0xEF, - 0x3C, 0x00, 0x9A, 0xFE, 0x4D, 0x00, 0x95, 0xFF, 0x43, 0x00, 0x93, 0xFF, 0x40, 0x00, 0x4B, 0x52, 0x30, 0x00, 0x7E, 0xCE, 0x3C, - 0x00, 0x87, 0xD9, 0x44, 0x00, 0x34, 0x1B, 0x2A, 0x00, 0x65, 0x90, 0x36, 0x00, 0x8E, 0xF6, 0x3D, 0x00, 0x8F, 0xF7, 0x40, 0x00, - 0x8B, 0xDD, 0x48, 0x00, 0x73, 0xB1, 0x3A, 0x00, 0x66, 0x95, 0x35, 0x00, 0x66, 0x93, 0x35, 0x00, 0x35, 0x1B, 0x2A, 0x00, 0x8D, - 0xE8, 0x45, 0x00, 0x82, 0xD9, 0x3B, 0x00, 0x72, 0xAA, 0x3C, 0x00, 0x95, 0xFD, 0x46, 0x00, 0x8D, 0xF0, 0x40, 0x00, 0x57, 0x70, - 0x32, 0x00, 0x3C, 0x2D, 0x2C, 0x00, 0x2F, 0x0D, 0x29, 0x00, 0x81, 0xD4, 0x3D, 0x00, 0x8D, 0xF1, 0x40, 0x00, 0x94, 0xFC, 0x46, - 0x00, 0x73, 0xAE, 0x3D, 0x00, 0x45, 0x44, 0x2D, 0x00, 0x94, 0xF5, 0x49, 0x00, 0x90, 0xF0, 0x45, 0x00, 0x73, 0xAF, 0x3B, 0x00, - 0x38, 0x21, 0x2C, 0x00, 0x30, 0x11, 0x29, 0x00, 0x2F, 0x0F, 0x28, 0x00, 0x72, 0xAC, 0x3B, 0x00, 0x6A, 0x93, 0x3D, 0x00, 0x2E, - 0x0D, 0x27, 0x00, 0x35, 0x1C, 0x2B, 0x00, 0x36, 0x20, 0x2A, 0x00, 0x5E, 0x77, 0x39, 0x00, 0x78, 0xBE, 0x3B, 0x00, 0x36, 0x21, - 0x2A, 0x00, 0x71, 0xAB, 0x3B, 0x00, 0x4C, 0x54, 0x30, 0x00, 0x3D, 0x31, 0x2B, 0x00, 0x82, 0xD6, 0x3D, 0x00, 0x79, 0xC5, 0x39, - 0x00, 0x9A, 0xFF, 0x4D, 0x00, 0x8A, 0xE8, 0x40, 0x00, 0x8A, 0xE7, 0x40, 0x00, 0x7A, 0xC6, 0x39, 0x00, 0x3D, 0x2E, 0x2C, 0x00, - 0x81, 0xD5, 0x3D, 0x00, 0x77, 0xBC, 0x3A, 0x00, 0x31, 0x12, 0x2A, 0x00, 0x69, 0x9B, 0x37, 0x00, 0x8E, 0xF3, 0x40, 0x00, 0x83, - 0xDC, 0x3B, 0x00, 0x8C, 0xF6, 0x3B, 0x00, 0x88, 0xD9, 0x45, 0x00, 0x86, 0xE1, 0x3D, 0x00, 0x85, 0xE0, 0x3D, 0x00, 0x7B, 0xC8, - 0x39, 0x00, 0x36, 0x1F, 0x29, 0x00, 0x55, 0x6B, 0x32, 0x00, 0x8A, 0xEE, 0x3C, 0x00, 0x48, 0x4B, 0x2E, 0x00, 0x51, 0x61, 0x31, - 0x00, 0x8C, 0xE0, 0x48, 0x00, 0x8B, 0xDE, 0x47, 0x00, 0x98, 0xEE, 0x55, 0x00, 0x5D, 0x79, 0x36, 0x00, 0x3A, 0x2A, 0x2B, 0x00, - 0x3A, 0x29, 0x2B, 0x00, 0x5C, 0x78, 0x36, 0x00, 0x60, 0x7C, 0x3A, 0x00, 0x3D, 0x30, 0x2C, 0x00, 0x99, 0xFD, 0x4C, 0x00, 0x66, - 0x8A, 0x3C, 0x00, 0x2D, 0x0C, 0x27, 0x00, 0x42, 0x3C, 0x2E, 0x00, 0x84, 0xDA, 0x3E, 0x00, 0x88, 0xE5, 0x3F, 0x00, 0x37, 0x22, - 0x2B, 0x00, 0x2E, 0x0B, 0x28, 0x00, 0x6A, 0x9B, 0x37, 0x00, 0x72, 0xAF, 0x3A, 0x00, 0x32, 0x15, 0x29, 0x00, 0x2A, 0x00, 0x28, - 0x00, 0x5B, 0x75, 0x35, 0x00, 0x89, 0xE8, 0x3D, 0x00, 0x78, 0xBF, 0x3A, 0x00, 0x73, 0xB4, 0x38, 0x00, 0x83, 0xDA, 0x3C, 0x00, - 0x84, 0xDE, 0x3C, 0x00, 0x85, 0xDD, 0x3E, 0x00, 0x86, 0xDE, 0x40, 0x00, 0x84, 0xDE, 0x3B, 0x00, 0x86, 0xE2, 0x3C, 0x00, 0x85, - 0xDD, 0x3F, 0x00, 0x87, 0xE2, 0x3F, 0x00, 0x87, 0xE1, 0x3E, 0x00, 0x85, 0xDE, 0x3E, 0x00, 0x89, 0xE2, 0x41, 0x00, 0x89, 0xE2, - 0x43, 0x00, 0x84, 0xDC, 0x3E, 0x00, 0x83, 0xD8, 0x3E, 0x00, 0x90, 0xF6, 0x41, 0x00, 0x2B, 0x04, 0x28, 0x00, 0x8C, 0xE3, 0x47, - 0x00, 0x8B, 0xDE, 0x48, 0x00, 0x8A, 0xDC, 0x47, 0x00, 0x8A, 0xDD, 0x47, 0x00, 0x8D, 0xDD, 0x4A, 0x00, 0x8A, 0xDE, 0x47, 0x00, - 0x8B, 0xDD, 0x49, 0x00, 0x8B, 0xE0, 0x46, 0x00, 0x9A, 0xF2, 0x55, 0x00, 0x59, 0x70, 0x35, 0x00, 0x8F, 0xDE, 0x4F, 0x00, 0x82, - 0xDC, 0x3B, 0x00, 0x82, 0xDB, 0x39, 0x00, 0x7F, 0xD7, 0x38, 0x00, 0x92, 0xF0, 0x48, 0x00, 0x33, 0x19, 0x29, 0x00, 0x87, 0xDD, - 0x42, 0x00, 0x87, 0xDD, 0x41, 0x00, 0x92, 0xEC, 0x4B, 0x00, 0x78, 0xBD, 0x3C, 0x00, 0x86, 0xDD, 0x3F, 0x00, 0x81, 0xD9, 0x39, - 0x00, 0x7B, 0xC4, 0x3C, 0x00, 0x34, 0x1A, 0x29, 0x00, 0x89, 0xDD, 0x44, 0x00, 0x86, 0xDC, 0x40, 0x00, 0x88, 0xDD, 0x44, 0x00, - 0x87, 0xDE, 0x41, 0x00, 0x99, 0xFA, 0x4F, 0x00, 0x7B, 0xC3, 0x3E, 0x00, 0x83, 0xD7, 0x3F, 0x00, 0x8B, 0xED, 0x3E, 0x00, 0x40, - 0x33, 0x2F, 0x00, 0x39, 0x27, 0x2B, 0x00, 0x81, 0xD7, 0x3B, 0x00, 0x3B, 0x2C, 0x2A, 0x00, 0x33, 0x18, 0x29, 0x00, 0x38, 0x22, - 0x2B, 0x00, 0x85, 0xDA, 0x40, 0x00, 0x89, 0xEA, 0x3D, 0x00, 0x6F, 0xA9, 0x38, 0x00, 0x70, 0xAB, 0x38, 0x00, 0x85, 0xDD, 0x3D, - 0x00, 0x88, 0xE1, 0x40, 0x00, 0x36, 0x1F, 0x2B, 0x00, 0x30, 0x13, 0x28, 0x00, 0x68, 0x9A, 0x36, 0x00, 0x90, 0xFB, 0x3F, 0x00, - 0x8A, 0xDD, 0x46, 0x00, 0x8D, 0xE9, 0x45, 0x00, 0x5A, 0x71, 0x36, 0x00, 0x27, 0x00, 0x24, 0x00, 0x73, 0x9F, 0x45, 0x00, 0x97, - 0xFE, 0x4A, 0x00, 0x86, 0xD8, 0x43, 0x00, 0x73, 0xA1, 0x45, 0x00, 0x8E, 0xDF, 0x4C, 0x00, 0x85, 0xDB, 0x40, 0x00, 0x72, 0xB5, - 0x37, 0x00, 0x95, 0xF4, 0x4B, 0x00, 0x73, 0xB6, 0x37, 0x00, 0x88, 0xE9, 0x3C, 0x00, 0x8A, 0xDB, 0x48, 0x00, 0x8C, 0xDE, 0x49, - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x02, 0x03, 0x04, 0xAE, 0x06, 0xF1, 0x02, 0x04, 0x04, 0x02, 0xF1, 0x06, 0xAE, 0x04, 0x03, 0x02, 0x01, 0x00, 0x01, - 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0xAE, 0xC7, 0xF1, 0x02, 0x04, - 0x04, 0x02, 0xF1, 0xC7, 0xAE, 0x04, 0x03, 0x02, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x02, 0x03, 0x0B, 0xAE, 0xEF, 0xF0, 0x02, 0x01, 0x01, 0x02, 0xB4, 0xEF, 0xAE, 0x0B, 0x03, 0x02, 0x01, 0x00, - 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x05, 0xEB, 0xA7, 0xD1, 0xEC, 0xED, 0x96, - 0x04, 0x04, 0x96, 0xED, 0xEE, 0xD1, 0xA7, 0xEB, 0x05, 0x04, 0x01, 0x04, 0xCA, 0x04, 0x01, 0x01, 0x01, 0xCA, 0xCA, 0xCA, 0xCA, - 0xCA, 0xCA, 0xCA, 0xCC, 0xE2, 0x8A, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE8, 0xE7, 0xE9, 0xE5, 0xBB, 0xE3, 0x8A, 0xE2, 0xCC, - 0xCA, 0xCC, 0xEA, 0xCC, 0xCA, 0xCA, 0xCA, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x08, 0xDD, 0x55, 0xDE, 0x2C, 0xDF, - 0xE0, 0xE1, 0xE1, 0xE0, 0xDF, 0x2C, 0xDE, 0x55, 0xDD, 0x08, 0x04, 0x01, 0x04, 0xCA, 0x04, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xC6, 0xD8, 0xD9, 0xAB, 0x78, 0x6A, 0x28, 0xDA, 0xDB, 0x28, 0x6A, 0x5A, 0xDC, 0xD9, 0xD8, 0xC6, - 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x05, 0x03, 0xD4, 0xD1, 0x31, - 0xD5, 0xD6, 0x98, 0xD7, 0xD6, 0xD5, 0x0B, 0x32, 0xD4, 0x03, 0x05, 0x04, 0x01, 0x04, 0xCA, 0x04, 0x01, 0x01, 0x01, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0xC3, 0xC2, 0xA4, 0xD0, 0xD1, 0xB3, 0xD2, 0xD3, 0xD3, 0xD2, 0x4F, 0x32, 0xD0, 0xA4, 0xC2, - 0xC3, 0x05, 0x02, 0x05, 0xB7, 0x05, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xCB, 0xC2, 0xCC, 0x02, 0xCD, - 0x79, 0xCE, 0xCF, 0xC1, 0xC1, 0xCF, 0xCE, 0x79, 0xCD, 0x02, 0xCC, 0xC2, 0xCB, 0x03, 0xCB, 0xB3, 0xCB, 0x03, 0x03, 0x03, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x7E, 0x05, 0xC6, 0x7E, 0x00, 0xC7, 0x15, 0xC8, 0xC9, 0xC9, 0xC8, 0x15, 0xC7, 0x00, 0x7E, - 0xC6, 0x05, 0x7E, 0x04, 0x7E, 0xCA, 0x7E, 0x04, 0x04, 0x04, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0x00, 0x03, 0xC3, 0x00, - 0x05, 0x55, 0xC4, 0xC5, 0xC1, 0xC1, 0xC5, 0xC4, 0x55, 0x05, 0x00, 0xC3, 0x03, 0x00, 0xAE, 0x00, 0x3D, 0x00, 0xAE, 0xAE, 0xAE, - 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0x7E, 0xBE, 0x00, 0x05, 0xBE, 0x7E, 0xBF, 0xC0, 0x5C, 0xC1, 0xC1, 0x5C, 0xC0, 0xBF, 0x7E, - 0xBE, 0x05, 0x00, 0xBE, 0x7E, 0xBE, 0xC2, 0x06, 0xBD, 0xBD, 0xBD, 0xB3, 0xB3, 0xB3, 0xB4, 0xB5, 0xB3, 0xB3, 0xB5, 0xB6, 0xB6, - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0x6B, 0x6B, 0xBB, 0xBA, 0xB9, 0xB8, 0xB7, 0xB6, 0xB6, 0xB5, 0xB3, 0xB5, 0xBC, 0xB4, 0xB3, 0xB3, - 0xB3, 0x02, 0x02, 0xA8, 0xA9, 0xAA, 0xA8, 0x02, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0x8F, 0xB1, 0x71, 0x2D, 0xB1, 0x9E, 0xB0, - 0xAF, 0xAE, 0xAD, 0xAC, 0xAB, 0x02, 0xA4, 0xB2, 0xAA, 0xA8, 0x02, 0x02, 0x04, 0x31, 0xA3, 0x04, 0x31, 0x82, 0x3B, 0xA3, 0xA4, - 0xA5, 0xA6, 0x82, 0xA7, 0x8E, 0x20, 0x78, 0x78, 0x20, 0x8E, 0xA7, 0x82, 0xA6, 0xA5, 0xA4, 0xA3, 0x3B, 0x82, 0x3D, 0x04, 0xA3, - 0x31, 0x04, 0x09, 0x9F, 0xA0, 0x21, 0x2C, 0xA1, 0x47, 0x52, 0x5B, 0x5A, 0xA2, 0x1C, 0x81, 0x8D, 0x8E, 0x91, 0x91, 0x8E, 0x8D, - 0x81, 0x1C, 0xA2, 0x5A, 0x5B, 0x52, 0x47, 0xA1, 0x2C, 0x21, 0xA0, 0x9F, 0x09, 0x96, 0x97, 0x16, 0x98, 0x99, 0x9A, 0x46, 0x9B, - 0x28, 0x9C, 0x6D, 0x76, 0x7D, 0x8C, 0x9D, 0x8E, 0x8E, 0x9D, 0x9E, 0x7D, 0x75, 0x6D, 0x9C, 0x65, 0x9B, 0x46, 0x39, 0x99, 0x98, - 0x16, 0x97, 0x96, 0x4F, 0x89, 0x15, 0x1F, 0x69, 0x38, 0x45, 0x8A, 0x78, 0x66, 0x6C, 0x74, 0x4A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, - 0x8B, 0x80, 0x45, 0x90, 0x66, 0x91, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x15, 0x89, 0x4F, 0x7E, 0x0D, 0x14, 0x1E, 0x29, 0x37, 0x44, - 0x14, 0x59, 0x65, 0x6B, 0x73, 0x7F, 0x80, 0x25, 0x81, 0x82, 0x25, 0x80, 0x7F, 0x83, 0x84, 0x65, 0x85, 0x4D, 0x86, 0x87, 0x29, - 0x88, 0x14, 0x0D, 0x7E, 0x05, 0x0C, 0x13, 0x1D, 0x28, 0x2C, 0x43, 0x4E, 0x72, 0x64, 0x53, 0x5A, 0x73, 0x74, 0x75, 0x1C, 0x1C, - 0x76, 0x74, 0x77, 0x78, 0x6A, 0x64, 0x79, 0x4E, 0x7A, 0x2C, 0x7B, 0x7C, 0x7D, 0x0C, 0x05, 0x04, 0x0B, 0x12, 0x1C, 0x27, 0x36, - 0x42, 0x4D, 0x5D, 0x63, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x1A, 0x1A, 0x6D, 0x6C, 0x6E, 0x53, 0x69, 0x6F, 0x5D, 0x19, 0x70, 0x36, - 0x71, 0x24, 0x12, 0x0B, 0x04, 0x03, 0x03, 0x11, 0x1B, 0x2E, 0x35, 0x41, 0x4C, 0x5E, 0x62, 0x63, 0x64, 0x65, 0x66, 0x2C, 0x5A, - 0x5A, 0x2C, 0x66, 0x65, 0x64, 0x67, 0x62, 0x5E, 0x52, 0x40, 0x65, 0x68, 0x1B, 0x11, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x25, - 0x34, 0x40, 0x4B, 0x56, 0x57, 0x58, 0x16, 0x59, 0x5A, 0x41, 0x5B, 0x5B, 0x41, 0x5A, 0x59, 0x5C, 0x5D, 0x5E, 0x5F, 0x21, 0x41, - 0x60, 0x61, 0x05, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x09, 0x24, 0x33, 0x3F, 0x2C, 0x4B, 0x4C, 0x4D, 0x4E, 0x14, 0x4F, 0x50, - 0x51, 0x51, 0x50, 0x4F, 0x14, 0x4E, 0x4D, 0x52, 0x53, 0x2C, 0x3F, 0x01, 0x54, 0x55, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x1A, - 0x23, 0x32, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x47, 0x46, 0x45, 0x44, 0x43, 0x48, 0x41, 0x40, 0x3F, - 0x49, 0x3C, 0x4A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2C, 0x37, 0x38, - 0x39, 0x3A, 0x3A, 0x39, 0x38, 0x37, 0x2C, 0x36, 0x35, 0x34, 0x3B, 0x3C, 0x30, 0x3D, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1A, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2C, 0x2B, 0x2A, 0x29, 0x28, 0x2D, 0x2E, 0x13, - 0x2F, 0x30, 0x31, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x09, 0x02, 0x1B, 0x1C, 0x1D, 0x1E, - 0x1F, 0x20, 0x21, 0x21, 0x20, 0x22, 0x1E, 0x1D, 0x1C, 0x1B, 0x02, 0x09, 0x1A, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x17, 0x16, 0x18, 0x19, 0x13, 0x12, 0x11, - 0x02, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x0B, 0x0C, - 0x0D, 0x0E, 0x0F, 0x10, 0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x03, 0x02, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, - 0x03, 0x02, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -// Length of the binary data -const int FAVICON_LENGTH = 2238; class HttpAPI : public PhoneAPI { diff --git a/src/meshwifi/meshhttpStatic.h b/src/meshwifi/meshhttpStatic.h new file mode 100644 index 000000000..f5217df9f --- /dev/null +++ b/src/meshwifi/meshhttpStatic.h @@ -0,0 +1,1262 @@ +#include +#include + +/* + Steps: + - Compress the .js file to .js.gz + - Convert to hex: + http://tomeko.net/online_tools/file_to_hex.php?lang=en + - Paste into the array + +*/ + +// Length of the binary data +const int STATIC_MESHTASTIC_JS_LENGTH = 23760; + +const byte STATIC_MESHTASTIC_JS_DATA[] = { + 0x1F, 0x8B, 0x08, 0x08, 0xFE, 0x1C, 0x8B, 0x5F, 0x00, 0x03, 0x6D, 0x65, 0x73, 0x68, 0x74, 0x61, 0x73, 0x74, 0x69, 0x63, 0x2E, + 0x6A, 0x73, 0x00, 0xC5, 0xBD, 0xFB, 0x77, 0xDB, 0xC6, 0x92, 0x20, 0xFC, 0xFB, 0xFE, 0x15, 0x14, 0xCE, 0xB5, 0x02, 0x84, 0x10, + 0xC5, 0xA7, 0x24, 0x53, 0x82, 0xB9, 0x79, 0xCE, 0xCD, 0x37, 0x79, 0xAD, 0xED, 0xCC, 0xEC, 0x59, 0x86, 0xF1, 0x81, 0xC8, 0xA6, + 0x04, 0x9B, 0x02, 0x38, 0x00, 0x68, 0x45, 0x11, 0x39, 0x7F, 0xFB, 0x57, 0x55, 0xFD, 0x06, 0x1A, 0x14, 0xE5, 0x78, 0xEF, 0xDE, + 0xDC, 0x63, 0x81, 0xFD, 0xAC, 0xAE, 0xAE, 0xAE, 0xAE, 0xAA, 0xAE, 0xAE, 0x3E, 0x5A, 0x6E, 0xD2, 0x79, 0x99, 0x64, 0xA9, 0xCF, + 0xC2, 0x32, 0x78, 0xF4, 0xB2, 0xEB, 0xF7, 0x6C, 0x5E, 0x7A, 0x51, 0x54, 0x3E, 0xAC, 0x59, 0xB6, 0x6C, 0xB1, 0x3F, 0xD7, 0x59, + 0x5E, 0x16, 0xC7, 0xC7, 0xB5, 0x9C, 0xBB, 0x6C, 0xB1, 0x59, 0xB1, 0x09, 0xFF, 0xD3, 0x11, 0xE5, 0xA2, 0xD2, 0x0F, 0xC6, 0x9E, + 0x6C, 0x53, 0x17, 0x5E, 0xB0, 0x65, 0x92, 0xB2, 0xE3, 0x63, 0xFE, 0xB7, 0x13, 0xDF, 0x2D, 0x26, 0xFC, 0xD3, 0x9F, 0xCE, 0xA0, + 0xDF, 0x71, 0x53, 0xBF, 0x13, 0xF1, 0xB7, 0x73, 0xC7, 0x8A, 0xDB, 0x32, 0x2E, 0xCA, 0x64, 0xFE, 0x9E, 0x77, 0xC2, 0x6A, 0x49, + 0x3B, 0xFF, 0x3E, 0x49, 0x17, 0xD9, 0x7D, 0xE8, 0xAB, 0x31, 0x05, 0x8F, 0x39, 0x2B, 0x37, 0x79, 0xDA, 0xD2, 0xA3, 0x0C, 0x1E, + 0x3F, 0xC6, 0x79, 0xAB, 0x8C, 0x1E, 0x77, 0x97, 0x32, 0xB1, 0x95, 0xFB, 0x49, 0xF0, 0x98, 0x2C, 0xFD, 0x72, 0x9A, 0xCC, 0x02, + 0x51, 0x03, 0xBF, 0xE5, 0xA8, 0x2E, 0xB1, 0x4A, 0x1A, 0x61, 0x52, 0xF4, 0x98, 0x8C, 0x93, 0x70, 0x35, 0x3E, 0xEA, 0x85, 0x22, + 0x73, 0xFC, 0xB8, 0xDB, 0x5D, 0x8A, 0x4A, 0x0C, 0x2B, 0xCD, 0xE3, 0xD5, 0xCA, 0x4F, 0x65, 0xDD, 0x30, 0x0D, 0xF5, 0x77, 0x1E, + 0xC0, 0x8F, 0x55, 0x74, 0xD4, 0xD5, 0x69, 0x3B, 0x51, 0x35, 0xEF, 0xDC, 0x45, 0x2C, 0xCC, 0x3B, 0xF3, 0xA8, 0x84, 0x7F, 0x17, + 0x91, 0x39, 0x2F, 0x21, 0x80, 0x97, 0x77, 0x32, 0x9A, 0xA2, 0xED, 0xF6, 0x17, 0x42, 0x55, 0x87, 0xE3, 0xEF, 0xD7, 0x3C, 0x5B, + 0xB3, 0xBC, 0x7C, 0xA0, 0x62, 0x8F, 0x2C, 0xDD, 0xDC, 0xB1, 0x3C, 0xBE, 0x5E, 0xB1, 0x31, 0xF4, 0x71, 0xC3, 0xCA, 0x71, 0xB2, + 0x0B, 0x76, 0xD0, 0x5E, 0x1E, 0x99, 0x18, 0xF0, 0x36, 0x29, 0xAF, 0xBD, 0xF0, 0x8E, 0x24, 0xC2, 0xDF, 0x3C, 0xDC, 0x5D, 0x67, + 0xAB, 0xE3, 0x63, 0xFE, 0xB7, 0x53, 0x66, 0x6F, 0xCA, 0x3C, 0x49, 0x6F, 0xDE, 0xC6, 0x37, 0xC7, 0xC7, 0x4D, 0x3D, 0xD6, 0xCB, + 0x86, 0x80, 0xDD, 0xD5, 0x86, 0x8D, 0xBD, 0x9F, 0x88, 0x2C, 0xBC, 0x5D, 0x10, 0x36, 0x55, 0xF6, 0xDE, 0xBD, 0x63, 0x85, 0x28, + 0x26, 0xAB, 0x1D, 0x75, 0x39, 0xB8, 0x65, 0x64, 0x93, 0x25, 0xCC, 0x4D, 0xEF, 0xB8, 0x3C, 0x3E, 0xF6, 0x59, 0x94, 0xC3, 0x00, + 0x82, 0xF0, 0xE2, 0xB8, 0x94, 0x13, 0xC5, 0x2E, 0x21, 0x77, 0x88, 0xB9, 0x75, 0x22, 0x3A, 0x3E, 0xC6, 0xFF, 0x77, 0x74, 0x4F, + 0xBA, 0x12, 0x4E, 0x69, 0x12, 0x09, 0xE0, 0xE6, 0x39, 0x8B, 0x4B, 0xE6, 0xA7, 0x9B, 0xD5, 0x2A, 0xC0, 0xE6, 0x00, 0x61, 0x40, + 0x12, 0x0D, 0xA0, 0x27, 0xA1, 0x07, 0x29, 0xF1, 0x66, 0x55, 0x7A, 0x55, 0x8C, 0xF3, 0x51, 0x30, 0x18, 0x75, 0x9F, 0x00, 0x2A, + 0x08, 0x2F, 0x1A, 0xC9, 0x2C, 0x58, 0x66, 0xB9, 0x4F, 0xD4, 0xD4, 0x4A, 0x00, 0x8A, 0x00, 0x66, 0x1A, 0xDA, 0x4B, 0x43, 0x35, + 0xDC, 0x52, 0x91, 0x2C, 0x9B, 0x96, 0xB3, 0x5D, 0xE7, 0x1A, 0x48, 0x9A, 0xE0, 0x0A, 0xD3, 0x20, 0x90, 0x64, 0x96, 0x20, 0x8E, + 0xD2, 0xA8, 0x4E, 0xD4, 0x95, 0xD1, 0x4E, 0xEA, 0x0B, 0x81, 0x75, 0x04, 0xEC, 0xBB, 0xB1, 0x23, 0x53, 0x11, 0x32, 0xC2, 0x55, + 0x86, 0x5E, 0xEC, 0x01, 0xF6, 0xC3, 0x12, 0xBB, 0xCB, 0x2A, 0x53, 0x22, 0x0A, 0x0A, 0x14, 0xAD, 0xF3, 0xAC, 0xCC, 0x70, 0x90, + 0x9D, 0xDB, 0xB8, 0xF8, 0xE5, 0x3E, 0x95, 0xC8, 0xE2, 0x8B, 0x01, 0x2B, 0x60, 0x1B, 0xEB, 0xC8, 0xF3, 0xC2, 0x1C, 0xB0, 0x5B, + 0x44, 0xC3, 0x1E, 0xAC, 0xD7, 0xA9, 0x45, 0xE4, 0x39, 0x12, 0x66, 0xC1, 0x5A, 0x88, 0x34, 0x98, 0x45, 0x3E, 0x43, 0x80, 0x9B, + 0x2C, 0xD2, 0xEC, 0x25, 0xF7, 0x7B, 0x41, 0x48, 0x7F, 0x46, 0xC1, 0x65, 0xD6, 0x99, 0x67, 0x0B, 0x76, 0xC3, 0x52, 0xF8, 0x3D, + 0xB8, 0x08, 0xC2, 0xAC, 0xB3, 0x64, 0xE5, 0xFC, 0x16, 0x7F, 0xBD, 0xC4, 0x5F, 0xEB, 0xB8, 0xC4, 0x1F, 0xC3, 0x2E, 0x65, 0x15, + 0x51, 0xD6, 0x49, 0xD2, 0xFF, 0xDA, 0x24, 0x39, 0xF3, 0xBD, 0x65, 0xE1, 0x61, 0x62, 0x99, 0x7D, 0x95, 0xE7, 0xF1, 0x83, 0x85, + 0x49, 0x98, 0x7E, 0xF8, 0x57, 0xCE, 0x53, 0x29, 0x49, 0xE4, 0x03, 0x7B, 0x28, 0x20, 0x23, 0xCC, 0xA3, 0x94, 0xDD, 0xB7, 0xA8, + 0x9A, 0x5F, 0x76, 0x56, 0x2C, 0xBD, 0x29, 0x6F, 0x83, 0x30, 0x89, 0xBA, 0x97, 0xC9, 0x95, 0xFC, 0x7D, 0x19, 0xE4, 0xC8, 0x2A, + 0x60, 0x06, 0xA7, 0x49, 0xBB, 0x3D, 0x9B, 0x29, 0xAC, 0x8A, 0xC5, 0x3E, 0x9D, 0xED, 0xA8, 0x73, 0xDE, 0xB4, 0xD5, 0xBB, 0xEE, + 0xF7, 0x11, 0x30, 0x06, 0xAD, 0xE6, 0x57, 0x4C, 0xB5, 0xFA, 0xC8, 0x89, 0x96, 0x4D, 0x73, 0x68, 0x35, 0x4C, 0xC5, 0xC7, 0xE5, + 0xC7, 0x2C, 0x59, 0xB4, 0xBA, 0x47, 0x51, 0x94, 0xC2, 0x0A, 0x21, 0x26, 0x95, 0x06, 0x92, 0xAD, 0x94, 0x3B, 0xC2, 0x63, 0x1C, + 0x9D, 0xFE, 0xFE, 0xFB, 0xE9, 0x4D, 0x38, 0x8F, 0x4E, 0xBD, 0xD3, 0x1B, 0xC0, 0x5C, 0x52, 0xBC, 0x66, 0x05, 0xCB, 0x3F, 0xB2, + 0x85, 0xD5, 0x3D, 0xAF, 0x75, 0xFA, 0x87, 0x3F, 0x19, 0x2F, 0xB2, 0x6D, 0xB2, 0xDC, 0x26, 0xE9, 0x16, 0x40, 0xDA, 0xAE, 0x58, + 0xB9, 0x85, 0x71, 0x6F, 0xCB, 0xFC, 0x61, 0x0B, 0xED, 0x6D, 0xE7, 0x71, 0xC1, 0xB6, 0x6C, 0x85, 0xFF, 0xC0, 0x02, 0xD8, 0x32, + 0x20, 0xFC, 0xED, 0x32, 0xC6, 0xDF, 0x48, 0xAB, 0xDB, 0xF2, 0x36, 0x29, 0xA0, 0xEC, 0x86, 0x6D, 0x11, 0xB6, 0xED, 0x7D, 0x52, + 0xDE, 0x6E, 0xAF, 0x61, 0x8D, 0x7D, 0x80, 0x8A, 0x30, 0x43, 0xDB, 0xF9, 0x2A, 0x2E, 0x8A, 0xED, 0x3C, 0x4B, 0x8B, 0x72, 0x5B, + 0x6C, 0x80, 0x52, 0xA0, 0x46, 0x9E, 0xDD, 0x6F, 0xEF, 0x6F, 0x93, 0x15, 0xDB, 0x3E, 0x24, 0x6C, 0xB5, 0xD8, 0x2E, 0x18, 0x74, + 0x0A, 0xED, 0xD3, 0xCC, 0x6F, 0x93, 0x3B, 0xFA, 0xB3, 0xDE, 0x5C, 0xAF, 0x92, 0xF9, 0x96, 0x83, 0xB9, 0x2D, 0xCA, 0x18, 0xB8, + 0xFF, 0xB6, 0x80, 0xF6, 0xA1, 0x51, 0xBE, 0xC6, 0xB6, 0x82, 0xBE, 0xA1, 0x62, 0xC9, 0xD2, 0x45, 0xB1, 0x85, 0xB5, 0x0B, 0x34, + 0xF8, 0xB0, 0x5D, 0xC7, 0xF3, 0x0F, 0xF1, 0x0D, 0xDB, 0xAE, 0xF3, 0xE4, 0x23, 0x2C, 0x76, 0xEC, 0xBD, 0x4C, 0x52, 0x00, 0x71, + 0xC1, 0xAE, 0x37, 0x37, 0x37, 0x00, 0x83, 0x44, 0xC4, 0x36, 0xCE, 0x6F, 0x60, 0x55, 0xA7, 0x65, 0x01, 0xC3, 0x2F, 0x59, 0xBE, + 0x8C, 0xE7, 0x58, 0x2D, 0x2B, 0x61, 0xB2, 0xD8, 0x02, 0x41, 0x59, 0x31, 0x99, 0x0D, 0x20, 0xA4, 0x73, 0xE8, 0x36, 0xF8, 0xC7, + 0x69, 0xA7, 0x64, 0x45, 0x09, 0x48, 0xC4, 0xB9, 0x2D, 0xE2, 0x25, 0x31, 0x0C, 0x07, 0x72, 0x8F, 0x4E, 0xFF, 0x98, 0xFE, 0xE3, + 0xF7, 0xFB, 0x77, 0xB3, 0xB6, 0xAE, 0xB2, 0xDD, 0x9A, 0x33, 0x02, 0x09, 0x93, 0x2F, 0xA6, 0xDE, 0x17, 0x6D, 0xD6, 0xC9, 0xD9, + 0x7A, 0x05, 0xBD, 0xFB, 0x71, 0xE8, 0xFD, 0x0E, 0xFF, 0xF3, 0x02, 0x95, 0x32, 0x0F, 0xBF, 0x80, 0xDF, 0x5F, 0x04, 0xED, 0x2F, + 0xBC, 0xD9, 0x17, 0x63, 0xAF, 0xE3, 0xB5, 0x19, 0x76, 0xBC, 0x99, 0x7F, 0x9F, 0xE4, 0x45, 0xE9, 0xE8, 0x17, 0x96, 0xFE, 0xFC, + 0x36, 0xCE, 0xBF, 0x2A, 0xFD, 0x6E, 0x00, 0xB4, 0xF7, 0xDB, 0x1A, 0xD0, 0xFE, 0x0D, 0x4C, 0xA3, 0x1F, 0x40, 0x3F, 0xC5, 0xE6, + 0x9A, 0xF3, 0x2A, 0x58, 0x5F, 0x9C, 0x62, 0x36, 0xD1, 0xE9, 0x3B, 0x7F, 0x1A, 0x9F, 0xFC, 0x35, 0x0B, 0x88, 0x60, 0xE6, 0xF1, + 0x1D, 0x5B, 0x61, 0x79, 0x77, 0xD3, 0xBA, 0x81, 0x6E, 0xD8, 0xAB, 0xB6, 0xA8, 0x80, 0xDE, 0x18, 0x7B, 0xB3, 0xC9, 0x45, 0x4A, + 0x1B, 0xA0, 0x5D, 0x40, 0x48, 0x9C, 0x67, 0x77, 0xEB, 0x38, 0x67, 0xDF, 0x23, 0x39, 0x14, 0x5F, 0x3F, 0xFC, 0xB0, 0x70, 0xB3, + 0x20, 0xD6, 0x49, 0x16, 0x27, 0x25, 0xFC, 0x83, 0x75, 0x16, 0x6C, 0x9E, 0xE5, 0x30, 0xBD, 0x6F, 0x81, 0x18, 0xEA, 0x9B, 0x08, + 0xEB, 0xFC, 0x03, 0xA9, 0x44, 0xED, 0xF1, 0xC8, 0x2E, 0x29, 0xA5, 0x93, 0xC2, 0xF0, 0x60, 0x05, 0xE1, 0x1E, 0xA3, 0x1B, 0x79, + 0x9D, 0x65, 0x25, 0xC0, 0x7E, 0x97, 0x7D, 0x64, 0xAA, 0x6A, 0x68, 0xD6, 0x80, 0xBD, 0xBA, 0x52, 0x3A, 0x5E, 0x2C, 0x54, 0x51, + 0x55, 0xF6, 0x32, 0xD9, 0x6E, 0xFD, 0x04, 0xB9, 0xD6, 0x39, 0x30, 0x71, 0x2E, 0x4C, 0x20, 0x17, 0x49, 0xFC, 0x72, 0xBB, 0xE5, + 0x2D, 0x29, 0xDE, 0xEE, 0x68, 0x2F, 0x45, 0xA9, 0x61, 0x5E, 0x66, 0x39, 0x08, 0x08, 0x8D, 0xBB, 0x29, 0x75, 0xA4, 0x36, 0xD2, + 0x34, 0x34, 0x37, 0xA6, 0x5E, 0xF3, 0x36, 0xAC, 0x39, 0xF7, 0xD3, 0x4D, 0xA4, 0x9C, 0x32, 0x96, 0xC0, 0x95, 0x34, 0x94, 0xDF, + 0x41, 0xA1, 0x1A, 0xFF, 0xB4, 0xD1, 0x2C, 0xB1, 0x90, 0x02, 0x16, 0x90, 0x57, 0xF7, 0x05, 0x12, 0x4A, 0x42, 0x42, 0xEA, 0x7B, + 0xD8, 0x86, 0xD7, 0x5E, 0xB6, 0xDB, 0xE1, 0x5E, 0x3C, 0x94, 0x7B, 0x84, 0x09, 0x1B, 0xF6, 0xB2, 0x06, 0x7B, 0x49, 0xAB, 0x92, + 0x95, 0xB2, 0x4E, 0x54, 0xDD, 0x7A, 0x00, 0x6C, 0x29, 0x3F, 0x18, 0xDB, 0x35, 0xB1, 0xA5, 0x16, 0x12, 0xD3, 0x77, 0x79, 0x0E, + 0xAC, 0xD9, 0x5B, 0x14, 0x65, 0xEB, 0x6E, 0x03, 0xFF, 0x5C, 0xB3, 0x56, 0x0C, 0x50, 0xF2, 0x1A, 0x24, 0x34, 0x1C, 0x95, 0xF5, + 0xE2, 0xB8, 0x05, 0xA9, 0xF2, 0xC5, 0x9A, 0xCD, 0x93, 0x65, 0x02, 0x52, 0x97, 0x1A, 0xA5, 0x12, 0x41, 0x19, 0x6C, 0xB7, 0x39, + 0xCA, 0x79, 0x9C, 0x3A, 0x60, 0x8B, 0xBC, 0x4D, 0x96, 0x20, 0xD4, 0x72, 0x69, 0x84, 0x6F, 0x00, 0xAF, 0xBA, 0x41, 0x39, 0x4D, + 0x61, 0x5F, 0xF1, 0xF1, 0xCF, 0x76, 0x8B, 0x3B, 0x04, 0x54, 0xB9, 0x44, 0x3E, 0x4C, 0xF5, 0xB2, 0x08, 0x33, 0x2E, 0x33, 0x20, + 0xE2, 0x24, 0x9A, 0x82, 0x24, 0x9A, 0xA5, 0xC0, 0x6F, 0xFD, 0x2C, 0x90, 0x5F, 0x09, 0xD0, 0x24, 0x35, 0x91, 0xE8, 0xFD, 0x01, + 0x11, 0x10, 0x95, 0x9D, 0x62, 0xBD, 0x4A, 0x4A, 0x1F, 0xF8, 0x08, 0x6C, 0x71, 0xB0, 0xFA, 0xDC, 0x88, 0xCE, 0x50, 0xF4, 0xD1, + 0xB3, 0x02, 0xF8, 0x46, 0x19, 0xB3, 0x2E, 0x48, 0x14, 0x6A, 0xF2, 0x16, 0x30, 0xE7, 0xC6, 0x2F, 0x9C, 0x71, 0x1F, 0x28, 0x60, + 0x14, 0xC0, 0x12, 0x47, 0x59, 0x6F, 0xAF, 0x04, 0xE0, 0x57, 0x25, 0x9C, 0x24, 0x2A, 0xB5, 0xD4, 0xAE, 0xEA, 0xC8, 0x3D, 0x33, + 0xB1, 0xF6, 0x6A, 0xA0, 0x96, 0x14, 0x28, 0x35, 0xBD, 0x4A, 0xE4, 0xFE, 0xD9, 0x6E, 0xA7, 0x81, 0xDA, 0x2B, 0x41, 0x54, 0x07, + 0x44, 0xCC, 0x8E, 0x8F, 0x73, 0x80, 0x50, 0xFC, 0x40, 0x09, 0x1F, 0xFF, 0xAA, 0xE9, 0x61, 0x3B, 0xD5, 0x5B, 0x46, 0xBB, 0xB3, + 0xFC, 0x05, 0x4C, 0x5B, 0x10, 0xCD, 0x91, 0x8F, 0x9B, 0x5D, 0x4B, 0xEF, 0x04, 0xAD, 0x32, 0x90, 0x84, 0x8F, 0xE4, 0xCD, 0x4B, + 0x5E, 0xBA, 0xF1, 0x89, 0x55, 0x43, 0x0F, 0x14, 0x99, 0x02, 0x76, 0xA6, 0x46, 0x6C, 0x32, 0xC0, 0x54, 0x48, 0x04, 0x05, 0x5C, + 0x78, 0x0D, 0x49, 0xEC, 0x4D, 0x09, 0x9B, 0xD9, 0xDB, 0x1C, 0x58, 0xEA, 0xA4, 0x21, 0x9D, 0x37, 0x0D, 0x9A, 0xD5, 0xBE, 0x8E, + 0x0B, 0x2C, 0xAE, 0x16, 0x8D, 0x8F, 0xE0, 0x52, 0x73, 0x41, 0x87, 0x72, 0xB6, 0x5B, 0x0F, 0x05, 0xF8, 0xFC, 0xF8, 0x38, 0xE5, + 0x15, 0x72, 0x29, 0x56, 0xF8, 0x86, 0xC4, 0x57, 0x91, 0xA1, 0x39, 0x3C, 0x2A, 0x37, 0x20, 0xDA, 0x83, 0x09, 0xDD, 0x10, 0x03, + 0x2B, 0x1B, 0x08, 0xAB, 0x34, 0xF9, 0x10, 0xF2, 0xC3, 0xFD, 0xC8, 0x30, 0x05, 0x4E, 0xA9, 0x7D, 0x44, 0xF5, 0xB2, 0x08, 0x34, + 0x71, 0xD7, 0xB6, 0x37, 0x6E, 0x79, 0x6D, 0xFA, 0x29, 0x90, 0xBD, 0x03, 0x8E, 0x90, 0x74, 0xE2, 0x02, 0x20, 0xB8, 0x4B, 0x0A, + 0x54, 0x2B, 0x7A, 0x7D, 0x10, 0xE3, 0x3A, 0xD7, 0xB0, 0x01, 0x9D, 0x0D, 0x91, 0x49, 0xBD, 0xC4, 0x9F, 0xDF, 0x7D, 0x84, 0x7D, + 0xFE, 0xBB, 0xBB, 0xA4, 0x04, 0x31, 0x00, 0xE5, 0xCA, 0x2E, 0x26, 0x2E, 0x57, 0x59, 0x5C, 0xE2, 0xAF, 0x1E, 0xFE, 0x12, 0x32, + 0x25, 0xB6, 0x30, 0xC0, 0xDF, 0x9B, 0x72, 0x79, 0x81, 0x99, 0xD4, 0xDC, 0x3A, 0xCB, 0x56, 0xF8, 0x83, 0x72, 0x7E, 0xCC, 0xD2, + 0x9B, 0xAF, 0x13, 0x92, 0x62, 0x07, 0x43, 0xAA, 0x5A, 0xFC, 0x0C, 0x02, 0x6C, 0xF4, 0x35, 0x14, 0x62, 0x71, 0xEA, 0x6B, 0xDA, + 0x14, 0x7A, 0x0B, 0x0C, 0x72, 0x0E, 0xE0, 0x1A, 0x9F, 0x9D, 0x8F, 0x2C, 0x2F, 0x60, 0x8C, 0xCE, 0xB4, 0x4E, 0x0A, 0xAD, 0x61, + 0xBB, 0x37, 0xAB, 0xEC, 0x3A, 0x5E, 0x45, 0xB2, 0x03, 0x28, 0x0B, 0x53, 0xE9, 0xD0, 0xF9, 0xB8, 0xBE, 0x7C, 0x7C, 0xCC, 0xFF, + 0xBA, 0xCB, 0x14, 0x6C, 0xB5, 0x3C, 0x3E, 0xC6, 0x7F, 0xB7, 0x24, 0xD6, 0x41, 0xF3, 0xEC, 0x6E, 0x5D, 0x3E, 0x70, 0xC1, 0x59, + 0xCC, 0xE6, 0x32, 0x67, 0xEC, 0x2F, 0x36, 0xB1, 0x7E, 0x81, 0x66, 0x1F, 0x8C, 0x41, 0xBB, 0x17, 0xE5, 0x85, 0xAC, 0xBB, 0xAF, + 0xC2, 0xE3, 0x2E, 0x00, 0x65, 0x9A, 0xF0, 0xF2, 0x03, 0xC8, 0x5D, 0x20, 0x92, 0x45, 0x3F, 0x6F, 0xEE, 0xAE, 0x59, 0xAE, 0x13, + 0xB6, 0xDB, 0xBA, 0xF4, 0xE1, 0xA5, 0x54, 0xC8, 0x52, 0xFB, 0x92, 0xE2, 0xFB, 0x24, 0x4D, 0x80, 0x1C, 0x59, 0x70, 0x7C, 0xFC, + 0x13, 0x30, 0x61, 0x9C, 0xB4, 0x0C, 0x75, 0xC7, 0x08, 0xD0, 0xCB, 0xFB, 0xA8, 0x92, 0x8D, 0x6E, 0x50, 0xA8, 0x6D, 0xBA, 0x41, + 0xD8, 0xA5, 0xCD, 0x15, 0xCE, 0x6B, 0xF2, 0x56, 0x1C, 0x32, 0xBC, 0xA4, 0x54, 0x97, 0x46, 0xCA, 0x2B, 0xC1, 0x46, 0x44, 0xB3, + 0xF3, 0x86, 0x55, 0x35, 0x5D, 0xE4, 0x63, 0x39, 0x6A, 0x0E, 0x52, 0x69, 0x38, 0x22, 0xED, 0x2F, 0x8A, 0x60, 0xE8, 0x47, 0x55, + 0xED, 0x0A, 0x78, 0x1C, 0x0C, 0xAF, 0xBE, 0x6F, 0x21, 0x4B, 0xA3, 0xF9, 0x81, 0x2E, 0xB8, 0xA6, 0x92, 0x07, 0x13, 0xB9, 0x8B, + 0x8C, 0x4D, 0x26, 0x09, 0x4B, 0x5D, 0xA8, 0x30, 0xB0, 0xB9, 0x20, 0x6C, 0x5F, 0x6F, 0x96, 0x4B, 0x96, 0x9B, 0x6B, 0x09, 0x44, + 0x7E, 0x82, 0x8A, 0x45, 0x89, 0xD6, 0x9F, 0xAE, 0xA9, 0x18, 0x88, 0xA3, 0xBC, 0xBC, 0xE2, 0x97, 0xC6, 0xBA, 0xC4, 0x75, 0xF0, + 0x9F, 0x39, 0xCC, 0xC1, 0x04, 0x64, 0x09, 0x18, 0xC2, 0x8E, 0x44, 0x7F, 0x03, 0x3F, 0x94, 0xB8, 0xF3, 0x91, 0x60, 0xDF, 0xF1, + 0x66, 0xDE, 0x2D, 0x61, 0x35, 0x46, 0xA4, 0xED, 0xEA, 0x34, 0x10, 0xDE, 0xB3, 0xF9, 0x6F, 0x29, 0x4A, 0xD4, 0x32, 0x0B, 0x18, + 0x55, 0x15, 0xCE, 0x3D, 0xD4, 0x30, 0x91, 0xA3, 0x9A, 0x38, 0x1B, 0x85, 0xAA, 0x63, 0x12, 0xC6, 0x3A, 0x1C, 0x55, 0xF0, 0xD3, + 0x51, 0x01, 0x21, 0xC3, 0x2C, 0x63, 0x89, 0xA8, 0x1E, 0x7E, 0x03, 0x2D, 0xE1, 0x82, 0x2A, 0xE3, 0x50, 0xA1, 0x29, 0x9D, 0x40, + 0xEA, 0x80, 0x68, 0x39, 0x72, 0x2D, 0x2F, 0xA3, 0xAE, 0xFE, 0x1C, 0xD3, 0xBF, 0x82, 0x63, 0x44, 0x72, 0x3D, 0x77, 0x16, 0xA8, + 0xEE, 0xFE, 0xF0, 0x0B, 0x50, 0x77, 0x25, 0x85, 0xCA, 0x6D, 0xB7, 0x2A, 0x59, 0xFE, 0x54, 0xD3, 0xB5, 0x82, 0x04, 0x0F, 0x11, + 0x0D, 0x93, 0xDE, 0x7F, 0xCD, 0xA2, 0xD3, 0x3F, 0x48, 0x39, 0xE3, 0x1A, 0x5B, 0x77, 0xDB, 0xFB, 0xC7, 0x29, 0xCF, 0x1B, 0xF0, + 0xCC, 0x93, 0x09, 0xE8, 0x7F, 0xDD, 0xED, 0xB4, 0x77, 0xF2, 0x72, 0x36, 0xED, 0xC2, 0x3F, 0x5F, 0x06, 0xB2, 0xC4, 0xD9, 0x90, + 0x4A, 0x40, 0xFE, 0xF4, 0xF7, 0xDF, 0xFF, 0xEC, 0x76, 0x4F, 0xE0, 0xDF, 0xE5, 0x72, 0xF6, 0x78, 0xB1, 0xDB, 0x3A, 0x6A, 0xF1, + 0x6A, 0xD8, 0xFB, 0xDB, 0xEC, 0x9F, 0x71, 0x71, 0xEB, 0x5C, 0x26, 0x13, 0xCD, 0x19, 0x3B, 0x02, 0xCD, 0xC0, 0xD4, 0xB1, 0xB8, + 0x8F, 0x53, 0xA1, 0xF2, 0xFE, 0x62, 0x39, 0xA5, 0xEE, 0x44, 0x93, 0xDF, 0x43, 0xD9, 0x4A, 0xA3, 0x7A, 0x05, 0x55, 0xDA, 0xA4, + 0xD6, 0xB4, 0x70, 0xC9, 0x73, 0x45, 0xC7, 0x54, 0x00, 0x4B, 0xA2, 0xA0, 0x95, 0x85, 0x79, 0xE7, 0x36, 0xC1, 0x8D, 0x33, 0x07, + 0x20, 0x38, 0xFB, 0xF1, 0x25, 0x83, 0x2E, 0x03, 0x9A, 0x4D, 0x10, 0x2C, 0x6F, 0x80, 0x16, 0x11, 0x8C, 0x43, 0xB5, 0xAD, 0x1F, + 0xB3, 0xFB, 0x26, 0x6D, 0x8B, 0xD3, 0x33, 0x6D, 0x9B, 0x51, 0x06, 0x3F, 0x7E, 0xC5, 0x15, 0x34, 0xCF, 0x56, 0x22, 0xC5, 0xF7, + 0xAC, 0x04, 0x9A, 0xC5, 0x2C, 0x65, 0xBF, 0x2C, 0xFF, 0x8D, 0xD1, 0xA6, 0x74, 0xA8, 0xF1, 0xA0, 0xDD, 0xCE, 0x41, 0x7A, 0x64, + 0xD3, 0x1C, 0xC4, 0x9C, 0x5E, 0x55, 0xFC, 0xF4, 0x75, 0x5D, 0x66, 0x0B, 0x51, 0xC0, 0xF1, 0xD1, 0xE6, 0x21, 0x9B, 0x39, 0x81, + 0xAA, 0xAF, 0xE0, 0x9F, 0x93, 0x93, 0x3C, 0x40, 0xA3, 0x1C, 0x70, 0x53, 0xD1, 0xE8, 0xF1, 0xB1, 0xDA, 0xBE, 0xB0, 0x92, 0x4C, + 0xC4, 0x15, 0x6B, 0x25, 0x29, 0xA5, 0x00, 0x7E, 0xEC, 0x76, 0x72, 0x30, 0x6F, 0xEA, 0x83, 0xA9, 0x82, 0x58, 0x6A, 0x18, 0x1D, + 0x43, 0xC3, 0xE6, 0xB8, 0xFE, 0xC6, 0xED, 0x06, 0x2D, 0xDD, 0x23, 0xF5, 0x52, 0x66, 0xFF, 0xDF, 0x9B, 0x5F, 0x7E, 0xFE, 0x65, + 0x8D, 0x4D, 0x15, 0xD1, 0x23, 0xD2, 0x4F, 0x31, 0xE6, 0x7C, 0x9C, 0x74, 0x05, 0xF5, 0xE3, 0xFA, 0x01, 0x74, 0x72, 0xF9, 0xE3, + 0x7D, 0x91, 0xA5, 0x68, 0x94, 0x44, 0x76, 0x04, 0x62, 0xCC, 0x32, 0xB9, 0x01, 0x21, 0xCB, 0x64, 0x8E, 0x92, 0x31, 0x0A, 0x36, + 0xC8, 0x26, 0x7E, 0x85, 0x99, 0x31, 0xA2, 0x2E, 0x80, 0x4C, 0xAF, 0x6E, 0x4A, 0xC1, 0xFD, 0x1B, 0xFF, 0x1A, 0x1B, 0x1A, 0xC9, + 0xB2, 0x86, 0xE4, 0x48, 0x2A, 0x01, 0xD1, 0x87, 0x8B, 0x15, 0xB2, 0x8E, 0xF1, 0xCB, 0x6C, 0xA5, 0xDA, 0x06, 0x68, 0xD3, 0xE3, + 0x0A, 0x50, 0xCD, 0xCC, 0x15, 0x84, 0x2B, 0x6E, 0xB2, 0xE3, 0xF2, 0x9E, 0xDF, 0xBF, 0x08, 0x9E, 0x12, 0xD2, 0xB5, 0x71, 0xAE, + 0x10, 0x46, 0x55, 0x10, 0x6F, 0x82, 0x4B, 0x1F, 0xC4, 0xFE, 0x26, 0x19, 0x31, 0x69, 0x94, 0x0F, 0x0B, 0xF8, 0x89, 0xB6, 0xA1, + 0x9F, 0x51, 0xB9, 0xE6, 0x7A, 0xA1, 0xD0, 0x97, 0x73, 0x7F, 0x14, 0x84, 0x19, 0xFC, 0xE9, 0x06, 0x5A, 0x05, 0x28, 0x38, 0x44, + 0x68, 0x24, 0x24, 0x61, 0x3C, 0x31, 0x80, 0x47, 0xB1, 0x3B, 0x34, 0xAC, 0xC2, 0x8A, 0xE5, 0x3A, 0xD4, 0x34, 0x12, 0x80, 0x8B, + 0x26, 0xC5, 0x8E, 0xE4, 0x46, 0x5E, 0x84, 0xAC, 0x10, 0xB0, 0xB8, 0x8C, 0xA4, 0xCA, 0xD8, 0x2A, 0x85, 0x03, 0x5E, 0x74, 0x9E, + 0xDD, 0xA1, 0xC5, 0x08, 0x98, 0x86, 0xF9, 0xB3, 0x88, 0x32, 0xD2, 0xE2, 0x28, 0x2D, 0x97, 0xF6, 0x38, 0xBE, 0x8E, 0x80, 0x05, + 0x49, 0x72, 0x2F, 0xAA, 0x7A, 0x4D, 0x0C, 0xF4, 0x1F, 0x5F, 0x15, 0x9A, 0xFE, 0xE3, 0xA0, 0xB6, 0xED, 0x95, 0xD3, 0x62, 0x1A, + 0xE3, 0x0A, 0xAC, 0x42, 0x34, 0x35, 0x7E, 0xF3, 0x32, 0x91, 0x28, 0x3B, 0x8B, 0xF0, 0x4F, 0xB0, 0xE3, 0x2C, 0x13, 0xD7, 0x8B, + 0x93, 0xB5, 0x22, 0x5D, 0x11, 0xE2, 0x45, 0x23, 0xF0, 0x91, 0xF1, 0x75, 0x05, 0x5F, 0x62, 0x64, 0xFA, 0xAB, 0x08, 0xB4, 0x4D, + 0x59, 0x0D, 0xB1, 0x54, 0x9F, 0x61, 0xBE, 0x0B, 0x0B, 0x4B, 0x9A, 0xAF, 0xF4, 0x2B, 0x4D, 0xDB, 0x47, 0x47, 0x20, 0x4F, 0x49, + 0x46, 0xCC, 0x00, 0x15, 0x6C, 0xFD, 0x4D, 0xB5, 0x07, 0x6D, 0x53, 0xF5, 0xA7, 0x9E, 0x80, 0xC9, 0xE3, 0xD8, 0x95, 0x10, 0x8A, + 0xA9, 0xF6, 0xCC, 0x19, 0x0C, 0x3D, 0x09, 0x8D, 0x67, 0x4F, 0xC5, 0xF1, 0xB1, 0xF5, 0x53, 0xE0, 0x7B, 0x62, 0x25, 0x8E, 0xC5, + 0x74, 0x79, 0x62, 0xBC, 0xD0, 0xC4, 0xC4, 0x9C, 0xE3, 0x6A, 0x7E, 0x51, 0x2D, 0x50, 0x88, 0x12, 0x80, 0x78, 0x0B, 0x13, 0xF1, + 0x62, 0xE1, 0x32, 0x52, 0x1C, 0x65, 0x4A, 0x74, 0xC5, 0x93, 0x90, 0x1A, 0x29, 0xA3, 0xBA, 0xA3, 0x09, 0xB9, 0x25, 0x44, 0x59, + 0x6E, 0xA0, 0xC8, 0xB4, 0x20, 0x8D, 0x7B, 0x59, 0xAD, 0x2E, 0x80, 0x61, 0x2C, 0x81, 0x84, 0x97, 0xE4, 0x75, 0x2D, 0xE6, 0x2E, + 0xA9, 0x87, 0xCD, 0x44, 0x1B, 0xD2, 0x38, 0xB2, 0x59, 0xAF, 0x12, 0x10, 0xF3, 0x58, 0x8B, 0xA0, 0xF8, 0xC2, 0x6B, 0x83, 0xE6, + 0xF5, 0x05, 0x9E, 0x74, 0x70, 0xE5, 0x4B, 0xAF, 0x26, 0x6D, 0xEC, 0xFC, 0x61, 0xA1, 0x41, 0xD1, 0x60, 0x40, 0xF9, 0xB6, 0xD7, + 0x02, 0xBD, 0x5A, 0xA2, 0x79, 0x7F, 0x23, 0xC8, 0x2E, 0x34, 0x36, 0x4C, 0x4C, 0x28, 0x18, 0x1A, 0x9B, 0x72, 0x8D, 0x8C, 0xAF, + 0x93, 0x19, 0x47, 0xB8, 0x49, 0x3F, 0x20, 0x84, 0x9B, 0x3F, 0x89, 0x07, 0xDF, 0x03, 0x17, 0x4D, 0xE2, 0xA2, 0x09, 0x15, 0x7A, + 0x34, 0xBA, 0x5B, 0x1B, 0x89, 0x51, 0xB9, 0x43, 0x13, 0x4E, 0x6B, 0xDF, 0x42, 0xC5, 0x52, 0xB3, 0x88, 0x5D, 0x9A, 0x9A, 0xAD, + 0x24, 0x20, 0xCC, 0x04, 0x91, 0x9F, 0x84, 0x63, 0xCC, 0xB0, 0xE9, 0x88, 0xDB, 0x2F, 0xAB, 0x26, 0xBA, 0x4F, 0x25, 0x23, 0xBE, + 0x18, 0x6D, 0xC8, 0x10, 0x8B, 0x5C, 0x49, 0x29, 0xF7, 0xCC, 0xC0, 0x22, 0x03, 0x0E, 0x9B, 0x66, 0x65, 0x8B, 0xFD, 0x99, 0x40, + 0xB3, 0x06, 0x36, 0xC4, 0x98, 0x8C, 0x8D, 0xDB, 0x9E, 0x86, 0xB0, 0x9E, 0x03, 0xBD, 0x5A, 0xA9, 0x06, 0x2A, 0x1C, 0x28, 0x30, + 0xA9, 0xCD, 0x25, 0x63, 0xA4, 0x15, 0x7A, 0x34, 0xD7, 0x77, 0xC8, 0x82, 0xA6, 0xC6, 0x68, 0x93, 0x7A, 0xA2, 0x39, 0xA2, 0xCC, + 0x5A, 0x83, 0x07, 0x6F, 0xA9, 0x19, 0x9A, 0xC1, 0xF5, 0x86, 0xF8, 0x9A, 0x2D, 0x57, 0x8C, 0xEA, 0x71, 0x36, 0xA7, 0x0E, 0xC9, + 0x2A, 0xFB, 0x62, 0xA6, 0x2C, 0xDE, 0x47, 0xE9, 0x27, 0xB3, 0x0B, 0xD8, 0x3B, 0xA9, 0xB6, 0xE0, 0xA8, 0x2E, 0x86, 0x21, 0x96, + 0x81, 0x73, 0xE3, 0x34, 0xD7, 0x49, 0x54, 0x72, 0xC6, 0xBA, 0x8E, 0xF3, 0x82, 0x2D, 0xA4, 0x14, 0xA6, 0x08, 0x96, 0xDB, 0xD2, + 0x99, 0x2A, 0x43, 0x3B, 0xA5, 0xCA, 0x04, 0xC4, 0x65, 0x2B, 0xDC, 0x35, 0x8E, 0x7A, 0x95, 0xCD, 0x54, 0x15, 0x59, 0x26, 0xC0, + 0x9A, 0xB1, 0x0D, 0x92, 0x61, 0x5C, 0x26, 0xA6, 0x84, 0x15, 0x7E, 0x66, 0x18, 0x99, 0x1E, 0xF3, 0x2C, 0x2B, 0xC7, 0x55, 0x1B, + 0x93, 0x16, 0x82, 0xB1, 0xD9, 0x4B, 0x21, 0xBC, 0x32, 0x01, 0xD3, 0x65, 0xC0, 0xF4, 0xB7, 0x36, 0x47, 0xC1, 0x5C, 0xAE, 0x56, + 0x38, 0x3F, 0x7B, 0x9A, 0x9B, 0xAA, 0x61, 0xCE, 0x42, 0xB1, 0x7C, 0x44, 0x3B, 0xD8, 0x6A, 0x67, 0x93, 0x72, 0x73, 0x6F, 0xC9, + 0xCF, 0x02, 0xC8, 0x20, 0x5B, 0xE9, 0xA7, 0xF3, 0x3E, 0x4B, 0x52, 0xB2, 0xCF, 0xEE, 0xD0, 0x02, 0x96, 0xED, 0xD9, 0x33, 0x41, + 0x67, 0x37, 0x56, 0x21, 0x1D, 0xA5, 0xE8, 0xC2, 0x59, 0xFA, 0xD5, 0xC2, 0x5E, 0x04, 0x06, 0x34, 0x62, 0xC3, 0xE3, 0x3F, 0xB8, + 0x21, 0xCA, 0x48, 0x90, 0x47, 0x21, 0x5C, 0x29, 0x30, 0x27, 0x8B, 0xD5, 0x66, 0x4A, 0x30, 0x0A, 0x60, 0x3F, 0x80, 0xE7, 0xCB, + 0xD2, 0xB4, 0x9E, 0x24, 0xD0, 0x68, 0xE7, 0xDD, 0x6D, 0x9C, 0x2E, 0x56, 0xEC, 0xAB, 0x05, 0x5F, 0x6E, 0x35, 0x20, 0x5F, 0xD7, + 0xB9, 0xD6, 0x61, 0x2D, 0xBE, 0x6E, 0x82, 0xD1, 0x49, 0x50, 0x76, 0xB7, 0x22, 0xA3, 0xC9, 0x92, 0x28, 0xEB, 0x71, 0x43, 0x18, + 0xC1, 0x51, 0x81, 0xC2, 0xAF, 0xB4, 0xDF, 0x0D, 0x04, 0x37, 0x32, 0x7B, 0x01, 0x22, 0xE1, 0x2B, 0xA0, 0xCA, 0x93, 0xCD, 0x15, + 0x13, 0x98, 0x1D, 0x8B, 0x34, 0x60, 0x6E, 0x76, 0x4B, 0x85, 0xA3, 0xA5, 0xD0, 0x54, 0x23, 0x72, 0x31, 0x7F, 0xA2, 0x81, 0x8A, + 0x8E, 0x66, 0xB4, 0xBB, 0xDD, 0xFA, 0x56, 0xF7, 0xF0, 0xDB, 0x5A, 0xBF, 0x8F, 0xBB, 0x20, 0xA0, 0x3D, 0xC8, 0x35, 0x20, 0x3C, + 0x56, 0x31, 0x16, 0x76, 0x0D, 0x98, 0xFA, 0xD2, 0x97, 0xCD, 0xDB, 0xFC, 0x60, 0x3A, 0x0B, 0x84, 0x06, 0x51, 0xCF, 0xA4, 0x73, + 0x90, 0x40, 0x9C, 0x72, 0x24, 0xB0, 0xE0, 0xD3, 0x85, 0xEF, 0x3B, 0x94, 0x9E, 0x83, 0xFC, 0x11, 0x4A, 0xE4, 0xC1, 0x01, 0x31, + 0xB9, 0x8C, 0xB7, 0x09, 0x9C, 0x16, 0x37, 0xB2, 0xD4, 0x3C, 0x22, 0xF2, 0x41, 0x01, 0x42, 0xC7, 0x05, 0xDC, 0x9B, 0xFD, 0x0C, + 0x51, 0x80, 0x18, 0xB0, 0x8B, 0xD0, 0x11, 0x4C, 0x49, 0x96, 0xDE, 0x4D, 0x71, 0x0B, 0xAD, 0xED, 0xD4, 0x61, 0x4C, 0x8C, 0x2E, + 0x46, 0x31, 0x21, 0x4D, 0x66, 0xC7, 0xFA, 0x58, 0xDE, 0x85, 0x44, 0x89, 0x87, 0xFA, 0xB1, 0x65, 0xA0, 0x35, 0xDF, 0x8A, 0x3B, + 0x02, 0x77, 0x3C, 0xC8, 0xB5, 0x2A, 0x90, 0x04, 0x84, 0x3C, 0xD5, 0x9C, 0x8F, 0xAE, 0x08, 0x21, 0x28, 0xC2, 0xF0, 0x07, 0x5D, + 0xAD, 0x2E, 0x1B, 0x21, 0x70, 0x19, 0xD2, 0x35, 0x33, 0x34, 0xD5, 0x34, 0xBD, 0x25, 0x49, 0x66, 0x26, 0x59, 0xA0, 0x6A, 0x5D, + 0xCA, 0xCA, 0xB0, 0xF5, 0xE3, 0x3E, 0x3F, 0xA6, 0xC3, 0x69, 0x97, 0x0E, 0x8D, 0xA4, 0x1F, 0xB1, 0xC3, 0x77, 0xC4, 0x8D, 0xAD, + 0x64, 0x6E, 0x3E, 0x41, 0xC9, 0xDC, 0x58, 0x4A, 0x26, 0x1D, 0x2F, 0x0B, 0x2D, 0x93, 0x14, 0xCC, 0x3E, 0xF7, 0x30, 0x39, 0x43, + 0x3D, 0x0B, 0xB7, 0x55, 0x74, 0x9A, 0xF8, 0x23, 0x67, 0x64, 0x4A, 0x5B, 0x6C, 0xF9, 0x8A, 0x88, 0x57, 0xDB, 0x9C, 0xAD, 0xB1, + 0x9F, 0xC5, 0x3F, 0x4E, 0xF5, 0xBE, 0xBB, 0xD1, 0xFA, 0x68, 0xB8, 0x09, 0x97, 0x34, 0x79, 0xB1, 0xDE, 0x42, 0xD3, 0x60, 0xE2, + 0x2F, 0x61, 0x4F, 0xDF, 0x80, 0x1E, 0x98, 0x46, 0x99, 0xD0, 0xF4, 0x82, 0xB1, 0x51, 0x24, 0x43, 0x83, 0xEE, 0x32, 0xDA, 0x40, + 0x19, 0xD8, 0xFB, 0x65, 0x89, 0xD0, 0x56, 0x6C, 0x37, 0x41, 0x78, 0x14, 0x5B, 0xB2, 0x3C, 0xB0, 0xA4, 0xAB, 0xEE, 0x7E, 0x81, + 0x1E, 0x64, 0xAF, 0xF4, 0x24, 0x65, 0x37, 0x71, 0x99, 0x7C, 0x64, 0xB6, 0x70, 0x4F, 0x8D, 0x09, 0x21, 0x21, 0x77, 0x6C, 0xF3, + 0x88, 0xC3, 0x06, 0x21, 0xC1, 0xF4, 0x3D, 0x39, 0x9A, 0x73, 0x7F, 0x86, 0x14, 0x16, 0x89, 0x24, 0x26, 0xBF, 0x62, 0xFD, 0x72, + 0xB4, 0x9E, 0x6F, 0x56, 0xF5, 0xD6, 0x5B, 0x98, 0x5A, 0xE9, 0x22, 0x83, 0x2E, 0x0C, 0x48, 0x33, 0x47, 0x5B, 0xDC, 0xE9, 0xC3, + 0x05, 0x2B, 0xE7, 0xCC, 0xD0, 0x28, 0x42, 0xEA, 0xC9, 0x59, 0xF4, 0x10, 0xF2, 0x49, 0x2A, 0x95, 0x34, 0x2A, 0x44, 0xB4, 0x94, + 0xF3, 0xEF, 0x64, 0x21, 0x45, 0x17, 0xDE, 0x32, 0x2A, 0xEC, 0x66, 0x59, 0x49, 0x16, 0x91, 0x27, 0xBF, 0x40, 0x03, 0x97, 0x5A, + 0xBE, 0xEC, 0x24, 0x3A, 0xB2, 0xCA, 0xCA, 0x9A, 0x9C, 0x7C, 0xB0, 0x26, 0xFF, 0x32, 0x6A, 0xDE, 0xC5, 0x6B, 0x25, 0xED, 0x88, + 0x03, 0x2B, 0x63, 0xFF, 0x02, 0xC6, 0x58, 0xFE, 0xB2, 0x34, 0x12, 0x10, 0xE2, 0x6F, 0xB9, 0xDB, 0x8B, 0x91, 0x2A, 0x1C, 0x61, + 0xFE, 0x03, 0x05, 0x66, 0x23, 0x19, 0x4D, 0x5F, 0xA0, 0x4D, 0xC7, 0x64, 0xFB, 0x34, 0x76, 0x04, 0x9E, 0x33, 0xCD, 0xB9, 0x00, + 0xDD, 0x21, 0x3B, 0x58, 0xE4, 0xD1, 0x1F, 0x84, 0x2C, 0xB7, 0xF7, 0x4E, 0xF2, 0xAF, 0xD0, 0x8D, 0x12, 0x76, 0xF0, 0x10, 0x8A, + 0x56, 0x93, 0x05, 0x04, 0x2C, 0x35, 0x9C, 0x82, 0x6A, 0xC6, 0x3B, 0xF4, 0xC7, 0x61, 0x66, 0x8A, 0x14, 0xEB, 0x96, 0xBB, 0x4D, + 0x93, 0x01, 0xC2, 0xB0, 0x6C, 0xD1, 0x52, 0x83, 0xF9, 0x81, 0x7F, 0x48, 0xA0, 0x2B, 0x69, 0x72, 0xE1, 0x0F, 0x9F, 0x28, 0x97, + 0x51, 0xA2, 0xF1, 0x58, 0x7B, 0x63, 0x9E, 0x3E, 0x72, 0xB8, 0x1A, 0xCF, 0x1F, 0xB9, 0xA2, 0x13, 0x99, 0x63, 0x90, 0xFB, 0xBE, + 0x1C, 0xD2, 0x51, 0x4F, 0x6E, 0xB0, 0x6A, 0xAB, 0xF7, 0x65, 0xB3, 0x41, 0x60, 0x0D, 0x1F, 0x45, 0xB9, 0xCD, 0x33, 0x76, 0x74, + 0xD9, 0x4C, 0x44, 0xB2, 0x99, 0x5F, 0xC3, 0x24, 0xED, 0x44, 0xF5, 0xD6, 0x2C, 0xEE, 0xC1, 0xAD, 0x8A, 0x9B, 0xCF, 0x65, 0x74, + 0x89, 0x4D, 0xA3, 0x0B, 0xAD, 0xDA, 0xD0, 0x5A, 0x5E, 0x6A, 0xE1, 0x49, 0x6B, 0x0A, 0x7C, 0xAA, 0x45, 0xE4, 0x71, 0xB7, 0x0D, + 0x45, 0xC5, 0x21, 0xB0, 0x2C, 0x4F, 0x2E, 0xBD, 0x50, 0x2C, 0x67, 0xCF, 0x5C, 0x81, 0x61, 0x93, 0x61, 0x67, 0xBF, 0xFD, 0x65, + 0x56, 0x19, 0xB2, 0x43, 0xD4, 0x93, 0x12, 0x98, 0x24, 0x71, 0x53, 0x04, 0xD3, 0x7C, 0x08, 0x30, 0xEF, 0xD7, 0x16, 0x9D, 0x5A, + 0x6C, 0xC5, 0x54, 0xE5, 0xCD, 0x82, 0xAA, 0x3C, 0x48, 0x6B, 0xC6, 0x77, 0x2C, 0x8B, 0x89, 0x23, 0x4D, 0x88, 0xAD, 0x63, 0x43, + 0x84, 0x0D, 0x60, 0x85, 0x66, 0x1F, 0x36, 0x6B, 0x6C, 0xE7, 0x97, 0x1C, 0x8D, 0xA3, 0x1A, 0x92, 0xA0, 0xBE, 0x3C, 0x4D, 0xD9, + 0x34, 0x9D, 0x38, 0x19, 0xC5, 0xB8, 0x96, 0x5A, 0x6B, 0x45, 0x2A, 0xDC, 0xD5, 0x53, 0x01, 0x57, 0xA1, 0x60, 0xDA, 0x9D, 0xCD, + 0x02, 0x6B, 0x5E, 0xE4, 0x09, 0x80, 0x65, 0x35, 0x11, 0xC8, 0x92, 0xF8, 0xA9, 0xF5, 0x5F, 0x29, 0xB7, 0x7F, 0x68, 0x99, 0xF6, + 0xB3, 0xD5, 0xC6, 0xCF, 0x4A, 0xB3, 0x8D, 0x3D, 0xB9, 0x46, 0x5A, 0x2D, 0x39, 0x0B, 0xAA, 0x43, 0xF2, 0x8F, 0xAA, 0x22, 0x74, + 0x47, 0x71, 0x02, 0x45, 0x25, 0x8E, 0x6C, 0x69, 0x3D, 0x32, 0x7B, 0x95, 0xCA, 0x44, 0xD3, 0xE8, 0x60, 0x6B, 0x37, 0x0D, 0x1D, + 0x76, 0x83, 0x61, 0x6D, 0x56, 0xA4, 0xFA, 0x20, 0xE4, 0xAF, 0xAA, 0x1C, 0x2F, 0xE4, 0x89, 0x40, 0x6F, 0x05, 0x41, 0x0D, 0x31, + 0xB1, 0x3E, 0x15, 0x13, 0xE7, 0x5F, 0xD5, 0x22, 0xA1, 0xB7, 0xF1, 0xE4, 0x08, 0x69, 0x35, 0xA9, 0xA3, 0x2E, 0xE5, 0xA1, 0xC5, + 0x8F, 0xF4, 0x95, 0xEB, 0xB8, 0x38, 0xE1, 0xAF, 0x36, 0xC4, 0x7D, 0x97, 0x5A, 0x72, 0xE5, 0xD1, 0x66, 0x73, 0xC0, 0x74, 0x0A, + 0xB9, 0xF4, 0x32, 0x16, 0xEE, 0x1A, 0x5C, 0xEC, 0xA8, 0x95, 0x9A, 0xA8, 0x7C, 0xF4, 0x3F, 0x5A, 0xD4, 0xBB, 0x0F, 0x19, 0x0C, + 0x56, 0x1D, 0x26, 0xFB, 0xAA, 0x38, 0xC7, 0x5D, 0xBD, 0xC1, 0x20, 0x24, 0x61, 0x0D, 0x4F, 0xB6, 0x3B, 0xF7, 0x78, 0xB4, 0xFD, + 0x74, 0x8B, 0x54, 0x76, 0x5F, 0x7B, 0xF5, 0x1D, 0x9C, 0x99, 0x4A, 0x02, 0x8A, 0x02, 0x92, 0x3D, 0x18, 0xDB, 0x79, 0x6C, 0x3A, + 0x55, 0x8C, 0x2D, 0x81, 0xA2, 0xB9, 0x34, 0x3F, 0x5B, 0xAE, 0x67, 0xD7, 0x06, 0x61, 0xF0, 0x1C, 0x8B, 0x89, 0xC8, 0x65, 0x24, + 0xCC, 0x01, 0xA4, 0x0A, 0x28, 0x96, 0x6A, 0x98, 0x38, 0xA2, 0x5A, 0x1F, 0xF6, 0xBE, 0x24, 0x88, 0x5D, 0xEF, 0x4A, 0xC4, 0x9C, + 0xAB, 0xE6, 0x6E, 0xBA, 0xF5, 0xC0, 0x77, 0xBD, 0xFA, 0x85, 0x12, 0x60, 0xF2, 0x30, 0x2C, 0xD3, 0xDB, 0x13, 0xA4, 0x60, 0xEA, + 0x7D, 0xEC, 0xBA, 0x09, 0x40, 0x1C, 0xC0, 0xA8, 0xC0, 0x99, 0x67, 0x20, 0xCC, 0x2D, 0xAA, 0x5F, 0x3A, 0x47, 0xAA, 0x34, 0x9B, + 0x9A, 0xBA, 0x43, 0xC0, 0x1D, 0x32, 0x49, 0xFE, 0xC8, 0xF8, 0x5E, 0x1A, 0x3E, 0x8A, 0x81, 0xE2, 0x5D, 0x0B, 0x34, 0xED, 0x6D, + 0x9A, 0xF4, 0x9C, 0xF4, 0x39, 0x7A, 0xCE, 0xD2, 0xD6, 0x73, 0x96, 0x9F, 0xA0, 0xE7, 0x2C, 0x2D, 0x3D, 0x07, 0xFF, 0x2D, 0x80, + 0x6D, 0x30, 0xA5, 0xEB, 0x84, 0x05, 0x69, 0x38, 0x43, 0xD4, 0x70, 0x6C, 0xFB, 0xE1, 0x46, 0xAB, 0x9E, 0x78, 0x50, 0x29, 0x5C, + 0x44, 0x8C, 0xF3, 0x57, 0x74, 0xD3, 0x21, 0xCD, 0x93, 0x99, 0x9A, 0x67, 0x3E, 0xA5, 0x0B, 0x30, 0x9C, 0x06, 0xE8, 0x93, 0x4B, + 0x16, 0xBE, 0x56, 0x3B, 0xF3, 0x9D, 0x76, 0xA9, 0x5B, 0x8A, 0x5E, 0x6C, 0xE9, 0x44, 0xAC, 0x88, 0x14, 0x96, 0xB4, 0x71, 0x18, + 0x46, 0x82, 0x0E, 0x4F, 0xE3, 0xCE, 0x14, 0x64, 0xE9, 0x53, 0x4D, 0x2D, 0xAC, 0x93, 0xF7, 0x5A, 0xC1, 0x90, 0xED, 0x96, 0x07, + 0xC8, 0x94, 0x04, 0x90, 0x66, 0xA1, 0x30, 0xD5, 0x1C, 0x7A, 0x01, 0x0C, 0x9E, 0x84, 0x76, 0x62, 0x6C, 0xF4, 0x2D, 0x17, 0x98, + 0x40, 0xC5, 0x6B, 0xB2, 0x2D, 0x3B, 0x34, 0xF7, 0xDA, 0x99, 0x35, 0xBA, 0x9C, 0xD6, 0x6E, 0x88, 0x80, 0x00, 0x0E, 0x28, 0x87, + 0x7F, 0x61, 0x2F, 0xBD, 0xC2, 0xF3, 0x6C, 0xFA, 0xEE, 0xCD, 0x5E, 0xC9, 0x0B, 0x2F, 0x47, 0x5D, 0xE9, 0x19, 0xD4, 0xDB, 0x59, + 0xFD, 0x57, 0xCC, 0xD1, 0x07, 0x42, 0x80, 0xCD, 0x23, 0x2F, 0x77, 0xB5, 0xEE, 0x96, 0x96, 0x97, 0xA6, 0xB4, 0x6C, 0x60, 0xBA, + 0x51, 0x64, 0xAE, 0x4D, 0x9E, 0xDC, 0x95, 0xAC, 0x79, 0x9A, 0xCB, 0xDB, 0x18, 0xBE, 0x31, 0xFF, 0xE4, 0x25, 0x1A, 0x2E, 0xF7, + 0xCB, 0xAA, 0xA2, 0x9B, 0xF9, 0x01, 0xA7, 0x7F, 0xBC, 0x55, 0x2F, 0xDC, 0x98, 0x9D, 0x70, 0x6F, 0x1B, 0x16, 0xCC, 0x68, 0x82, + 0xAD, 0x13, 0xB8, 0x5A, 0x5F, 0x16, 0x46, 0x61, 0xFD, 0x1E, 0x62, 0x8F, 0x89, 0x94, 0xF5, 0x05, 0xFB, 0x44, 0x06, 0x62, 0x1C, + 0x3A, 0x75, 0x96, 0xE4, 0xDE, 0x3E, 0x49, 0x15, 0x7D, 0x8E, 0x8D, 0x4C, 0x2E, 0x92, 0x4C, 0x0A, 0x67, 0xE6, 0x1D, 0x2B, 0x6F, + 0x33, 0xA8, 0x9A, 0x39, 0x73, 0x93, 0x05, 0xEC, 0x7F, 0x2A, 0x43, 0x93, 0x7F, 0xC0, 0x2D, 0x42, 0x65, 0x50, 0x31, 0x05, 0x2D, + 0x6D, 0x13, 0xA5, 0x0B, 0xC3, 0x06, 0xCE, 0x84, 0x30, 0xCF, 0x7F, 0x90, 0x01, 0x91, 0x16, 0x64, 0xB5, 0x15, 0x97, 0x77, 0xF8, + 0x9E, 0x56, 0x8C, 0xCD, 0xC6, 0xB6, 0x80, 0xAA, 0x12, 0x02, 0x23, 0x97, 0xF6, 0x39, 0x53, 0xD6, 0x2A, 0x36, 0xF3, 0xDB, 0x16, + 0x3A, 0x72, 0xA0, 0xA3, 0x27, 0xAB, 0x4F, 0x64, 0xED, 0xFC, 0xCB, 0xB7, 0xC4, 0xAC, 0xD8, 0x50, 0x84, 0x99, 0xD0, 0x34, 0x2A, + 0x4E, 0x7F, 0x69, 0xE5, 0x77, 0x51, 0xF9, 0x9D, 0x55, 0x7E, 0x2F, 0x5D, 0xE7, 0x25, 0x44, 0x2C, 0x86, 0x79, 0x02, 0x46, 0x03, + 0xBD, 0xF2, 0xD1, 0xD5, 0x7D, 0x0E, 0xC4, 0x1A, 0x78, 0x34, 0x0E, 0xDD, 0x00, 0xA7, 0xBE, 0xBC, 0x31, 0x80, 0xC5, 0xA4, 0x0F, + 0xB2, 0xD5, 0x33, 0x30, 0x0D, 0x1B, 0x12, 0x10, 0x32, 0x2B, 0x43, 0x29, 0x6D, 0x21, 0xF3, 0xA9, 0x63, 0x5C, 0xE1, 0x45, 0x6B, + 0x9D, 0xE5, 0x6A, 0xBE, 0x52, 0x5A, 0x0B, 0xC9, 0xB1, 0x04, 0x68, 0x0A, 0x88, 0xEE, 0xA4, 0x21, 0x46, 0x58, 0xE9, 0x2D, 0x66, + 0x2F, 0xD9, 0x82, 0x60, 0xFD, 0x8F, 0x3B, 0xBC, 0x40, 0xA1, 0xED, 0xA2, 0xBE, 0x56, 0xE9, 0x8F, 0xBA, 0xC0, 0x17, 0xF4, 0x99, + 0xA9, 0xAA, 0x70, 0xE9, 0xA2, 0x19, 0xB9, 0x1F, 0x85, 0xE2, 0xF0, 0x43, 0x9C, 0x0D, 0xA8, 0x83, 0x87, 0xE5, 0xD3, 0x87, 0xA5, + 0x36, 0xB1, 0x24, 0x87, 0xCC, 0x6C, 0xED, 0xA8, 0x8E, 0xE6, 0x8B, 0xE9, 0xB3, 0x15, 0xEA, 0xDD, 0xC4, 0x3B, 0xE3, 0x27, 0xDE, + 0x78, 0x44, 0x1A, 0xB7, 0xEE, 0x18, 0x4A, 0xDE, 0x2D, 0xE8, 0x6D, 0xCF, 0x29, 0xA9, 0x3D, 0xC2, 0xBA, 0x32, 0x20, 0xE8, 0xA7, + 0xA2, 0x0B, 0x58, 0x3B, 0x6B, 0x10, 0xEA, 0xD3, 0x96, 0x7D, 0x88, 0xE1, 0x7B, 0x40, 0x7D, 0x7B, 0x99, 0x5B, 0xC7, 0x8B, 0x78, + 0x3E, 0xA6, 0x2F, 0x12, 0x28, 0xE1, 0xFE, 0xC8, 0x76, 0x46, 0x75, 0x9D, 0x43, 0x26, 0xAB, 0x15, 0xBB, 0x89, 0x57, 0x2D, 0xBC, + 0x30, 0x21, 0x50, 0xA5, 0x25, 0x0F, 0x10, 0xE8, 0xC8, 0xE2, 0x01, 0x5B, 0xA2, 0x4D, 0xA9, 0xD6, 0xF5, 0x8A, 0x9C, 0xAD, 0xC8, + 0xB6, 0xE9, 0x59, 0xA4, 0x89, 0xCA, 0x3B, 0x53, 0x17, 0x28, 0xF4, 0x1D, 0x3A, 0xFB, 0x82, 0x85, 0x64, 0x47, 0xF2, 0x0B, 0x29, + 0x95, 0xCF, 0xBC, 0x9F, 0x47, 0x66, 0xA2, 0x6B, 0x81, 0x9B, 0xC0, 0xA0, 0xE4, 0x07, 0x8B, 0xA7, 0x2C, 0x5A, 0x78, 0xE9, 0x8D, + 0xDB, 0x5C, 0xA5, 0xE0, 0x25, 0x16, 0x78, 0xE1, 0xF1, 0x53, 0x82, 0x56, 0xCE, 0x57, 0x45, 0xC4, 0x45, 0x0F, 0xA0, 0x2A, 0x25, + 0xF8, 0x23, 0x20, 0x4A, 0xFA, 0x08, 0xD0, 0x47, 0x66, 0x59, 0x17, 0x9F, 0xBF, 0x5A, 0xAD, 0x4C, 0xF3, 0x85, 0x7D, 0x76, 0x69, + 0xAD, 0xC8, 0x12, 0x56, 0x64, 0x69, 0xDC, 0x23, 0x44, 0xF7, 0x62, 0x73, 0x20, 0x13, 0x48, 0x68, 0xB7, 0x67, 0x46, 0xC3, 0x78, + 0xC1, 0xDA, 0x4A, 0xF3, 0xAD, 0xDD, 0x42, 0xA7, 0xDA, 0x90, 0x71, 0xFB, 0x84, 0xF3, 0x6E, 0xCD, 0x35, 0xB7, 0x22, 0x99, 0x12, + 0xBC, 0x8F, 0xF7, 0x01, 0x4A, 0x65, 0x05, 0xC7, 0xF3, 0x66, 0x9B, 0x50, 0x4A, 0x32, 0xA1, 0x44, 0xE8, 0x89, 0x11, 0x5A, 0x84, + 0x66, 0x0A, 0xA5, 0xD8, 0x78, 0x87, 0xC8, 0xC3, 0xDA, 0x31, 0xE8, 0x94, 0xD0, 0xA6, 0xC7, 0x9D, 0xA2, 0x47, 0x55, 0xBB, 0x62, + 0xE2, 0xD1, 0x64, 0x56, 0x6D, 0x4A, 0x0C, 0x0D, 0x16, 0x70, 0x01, 0xD3, 0xCB, 0xF0, 0x1A, 0x6A, 0x69, 0x9D, 0x56, 0x11, 0x63, + 0xC6, 0x9A, 0xD8, 0x0E, 0xBF, 0x4E, 0x8E, 0xDE, 0x91, 0x16, 0x9C, 0x47, 0x25, 0x30, 0xDE, 0x4E, 0x92, 0x2E, 0xD8, 0x9F, 0xBF, + 0x90, 0xB3, 0x9A, 0xA1, 0x58, 0xBC, 0x3A, 0xE9, 0xC9, 0x4E, 0x13, 0x05, 0x68, 0x52, 0x61, 0xEB, 0x7E, 0x12, 0x25, 0x2E, 0x48, + 0x90, 0x21, 0x06, 0x95, 0xEA, 0xEA, 0xA6, 0x31, 0x5D, 0x82, 0xA9, 0xD2, 0x84, 0x79, 0x27, 0x46, 0x6E, 0x37, 0xA6, 0x38, 0x36, + 0x4D, 0x67, 0xB5, 0xAE, 0x5D, 0x85, 0x14, 0x34, 0x55, 0x20, 0x2E, 0x1D, 0xF6, 0x52, 0xCE, 0xFB, 0xB6, 0xDB, 0x7C, 0xA2, 0x8D, + 0x4F, 0x42, 0x97, 0xD4, 0xCD, 0x38, 0x49, 0x8A, 0x4C, 0x67, 0x75, 0xFB, 0xA4, 0xB0, 0x62, 0x88, 0xAA, 0x00, 0x8E, 0x7D, 0x11, + 0xAB, 0x22, 0x1E, 0x60, 0x7B, 0x5C, 0x3C, 0x50, 0xB4, 0xEC, 0xEA, 0xAB, 0x26, 0xB3, 0x38, 0xFB, 0x2A, 0xF6, 0xF7, 0x85, 0x8D, + 0xB8, 0x1C, 0xA0, 0xF6, 0x75, 0xAC, 0xED, 0x7A, 0x07, 0x0C, 0x35, 0x7C, 0x02, 0x00, 0x32, 0x24, 0x65, 0xF9, 0x27, 0x01, 0xF2, + 0x06, 0xF4, 0x09, 0x20, 0xAD, 0xA7, 0xA1, 0xC8, 0xF6, 0xC3, 0x20, 0xDA, 0x79, 0xAA, 0x7B, 0xA7, 0xBA, 0xCC, 0x39, 0x07, 0xA8, + 0xCC, 0x61, 0x06, 0x5C, 0xA2, 0x88, 0xF2, 0xA7, 0x54, 0x67, 0xB1, 0x16, 0x85, 0x2F, 0x0C, 0xD4, 0x9A, 0x7A, 0x8B, 0x6C, 0x73, + 0x4D, 0xF6, 0x68, 0xBA, 0xB1, 0x03, 0x7F, 0x93, 0xB4, 0x1C, 0xF4, 0xE1, 0xEF, 0x46, 0x7E, 0x14, 0xF2, 0x63, 0x99, 0xFC, 0xC9, + 0x16, 0x3C, 0x49, 0x7F, 0x42, 0xE6, 0xD9, 0x50, 0x14, 0xA7, 0x8F, 0x42, 0x7E, 0x50, 0x19, 0x9E, 0xA4, 0x3F, 0x91, 0xC5, 0x61, + 0x0A, 0x57, 0xE9, 0x42, 0x71, 0x76, 0x32, 0xAB, 0xB8, 0xAB, 0x4A, 0x37, 0xCA, 0x2E, 0x08, 0x4A, 0x18, 0x84, 0x02, 0x10, 0x56, + 0x6E, 0x2B, 0x17, 0xBD, 0x93, 0x69, 0x36, 0xCD, 0xDB, 0xE5, 0x6C, 0x26, 0xAF, 0x78, 0xAB, 0xA5, 0x4D, 0x37, 0x94, 0x92, 0x79, + 0x54, 0xF8, 0xD3, 0x5E, 0x38, 0x0A, 0xBB, 0xF4, 0xDF, 0x48, 0x7D, 0xF5, 0xE0, 0xBF, 0x6E, 0xD8, 0x0F, 0xFB, 0x33, 0xB4, 0xB8, + 0x48, 0xA3, 0x34, 0x96, 0xEE, 0x86, 0xEE, 0xFF, 0x8E, 0x7A, 0xA1, 0xE7, 0x61, 0x38, 0x0A, 0x65, 0x21, 0x0A, 0x71, 0x71, 0x52, + 0x7D, 0x3A, 0x2A, 0x52, 0x75, 0xA1, 0xED, 0x59, 0x78, 0x8E, 0xE9, 0x77, 0xF1, 0xFA, 0xDF, 0xD9, 0x83, 0xCE, 0xA9, 0xF5, 0x3F, + 0x0B, 0xF9, 0xED, 0x27, 0x7E, 0x30, 0xB1, 0x0F, 0xD6, 0xD9, 0xE1, 0xEE, 0xC5, 0xB9, 0xDF, 0x3F, 0x3B, 0xBC, 0xF4, 0xC2, 0x70, + 0x8D, 0xEA, 0x21, 0x39, 0xA4, 0xEA, 0x46, 0x00, 0x50, 0x53, 0x2A, 0x4C, 0x7D, 0x61, 0x0C, 0x9F, 0x68, 0xA3, 0xD3, 0x93, 0x34, + 0xB7, 0xDC, 0x16, 0x96, 0xA9, 0x74, 0x6E, 0x81, 0xB9, 0x91, 0x67, 0x81, 0x29, 0x28, 0x08, 0x96, 0x65, 0x02, 0xC4, 0x78, 0x20, + 0x50, 0xC3, 0x7C, 0x12, 0x3C, 0x5A, 0x66, 0x0E, 0xD1, 0xD8, 0x2D, 0x8B, 0x17, 0xB0, 0x23, 0xE0, 0x1F, 0x61, 0xF6, 0x8B, 0x93, + 0x15, 0x24, 0xE0, 0x1F, 0xDD, 0x09, 0x91, 0x81, 0xD1, 0x11, 0xC3, 0xDB, 0x78, 0x40, 0x49, 0xA6, 0xB5, 0x43, 0x34, 0x88, 0xC5, + 0x05, 0x08, 0xD4, 0x36, 0x4A, 0x12, 0x73, 0x7F, 0x83, 0xE8, 0x0D, 0x8C, 0x1E, 0x54, 0x01, 0x9E, 0xC6, 0x9B, 0xE3, 0x16, 0x14, + 0x44, 0xD2, 0x6D, 0x54, 0xD7, 0xD9, 0x53, 0x79, 0x05, 0xA6, 0x96, 0xE5, 0x2F, 0x84, 0xE5, 0xC9, 0x55, 0x0B, 0xEF, 0xD1, 0xEC, + 0x02, 0x10, 0x0B, 0x5C, 0x27, 0x67, 0x90, 0xB9, 0xD8, 0x19, 0x61, 0x57, 0x56, 0x0A, 0xD3, 0x68, 0x83, 0xE8, 0x8F, 0x46, 0xC7, + 0xC6, 0x7D, 0x4B, 0xBE, 0x17, 0xE8, 0x61, 0xB2, 0x3D, 0xA8, 0x2F, 0x75, 0xB5, 0x07, 0xF3, 0x52, 0x28, 0x90, 0xC3, 0x6D, 0x72, + 0x19, 0x94, 0xB4, 0x86, 0xA2, 0x5E, 0xFF, 0x1C, 0xC5, 0x86, 0x6C, 0xDB, 0xEB, 0x5F, 0x84, 0xF8, 0x11, 0xF9, 0xF8, 0xEF, 0xAB, + 0x57, 0xAF, 0xCE, 0xB7, 0x58, 0xF0, 0xEA, 0xAA, 0x3F, 0x0A, 0xE0, 0x57, 0x37, 0xC4, 0x5F, 0xF0, 0x11, 0x9D, 0x5F, 0x8A, 0x56, + 0xA0, 0x14, 0xD4, 0xDE, 0xD3, 0x92, 0x6C, 0xE8, 0x52, 0x94, 0xC0, 0xDF, 0x1A, 0xA8, 0x8F, 0xF5, 0x81, 0x86, 0x58, 0xB0, 0x07, + 0x05, 0xA1, 0xD6, 0xC5, 0x31, 0x24, 0x51, 0x42, 0x9F, 0x27, 0xF4, 0xCE, 0x54, 0xCA, 0x80, 0xA7, 0xF4, 0x87, 0x3B, 0x85, 0xF6, + 0x5B, 0x1F, 0x64, 0x74, 0xEE, 0xFD, 0xEF, 0xF4, 0x3E, 0xC4, 0x3B, 0xD5, 0x1D, 0x7D, 0xFB, 0x48, 0x7C, 0x83, 0xC6, 0x41, 0x7F, + 0x61, 0x27, 0x97, 0x95, 0x53, 0xBA, 0x9E, 0x28, 0x7F, 0xCA, 0x82, 0xE6, 0xF9, 0xE1, 0xE6, 0x9A, 0xCC, 0x5D, 0x01, 0x76, 0xA8, + 0x93, 0xDF, 0xA1, 0x33, 0x4B, 0x93, 0xCB, 0x51, 0x85, 0xEA, 0xF0, 0x8B, 0x4F, 0x1A, 0xA7, 0x4D, 0x5E, 0x58, 0x11, 0x7B, 0x5B, + 0x2C, 0xA9, 0x5D, 0xB8, 0x6E, 0x34, 0x70, 0xCE, 0x0D, 0x03, 0xA7, 0x59, 0x0C, 0xD7, 0x66, 0x15, 0x08, 0x3E, 0x5F, 0xF5, 0xC9, + 0xE2, 0x33, 0xC5, 0xE7, 0x94, 0x26, 0x81, 0xED, 0xAC, 0x21, 0xF1, 0x0D, 0xA1, 0xD1, 0xE6, 0x41, 0x90, 0xFA, 0x7B, 0x87, 0xB6, + 0xF6, 0x7D, 0x6A, 0xBF, 0x1B, 0x5C, 0x41, 0x5F, 0x93, 0xDE, 0x98, 0x5D, 0xF5, 0xCE, 0x06, 0x17, 0xC3, 0x49, 0x1F, 0xBE, 0xFA, + 0xDD, 0x97, 0xE7, 0xBD, 0x51, 0x7F, 0x32, 0xC0, 0xEF, 0xB3, 0x8B, 0xE1, 0x60, 0x34, 0x1C, 0x9D, 0x4D, 0x86, 0xE3, 0x51, 0x88, + 0x36, 0x5B, 0xB9, 0xDC, 0x6D, 0x90, 0x1A, 0x21, 0x62, 0x57, 0x5D, 0x6E, 0xE3, 0xA7, 0x79, 0xF0, 0x1F, 0xC2, 0x5E, 0x37, 0xCC, + 0xCC, 0xE3, 0x1A, 0x68, 0x93, 0xCB, 0x56, 0x7C, 0x54, 0x44, 0x05, 0x66, 0xCB, 0xC5, 0xFE, 0xC1, 0x8A, 0x5A, 0x3E, 0xBB, 0xBA, + 0xEA, 0xFD, 0x01, 0x63, 0x1A, 0xF4, 0x68, 0x55, 0x04, 0x75, 0x8C, 0x9D, 0x0D, 0x1D, 0x22, 0x42, 0x26, 0x2F, 0x71, 0x59, 0x0A, + 0x83, 0x84, 0x55, 0x3A, 0x06, 0xF9, 0x01, 0x49, 0x7A, 0x95, 0x01, 0x43, 0x83, 0xF5, 0x3E, 0x6A, 0xB0, 0xEF, 0xEF, 0xB6, 0xF3, + 0xD7, 0x5F, 0xDF, 0xA5, 0x74, 0xDC, 0xF3, 0x6C, 0x08, 0x70, 0x03, 0x6F, 0x44, 0x0B, 0xAF, 0xBF, 0x82, 0x4D, 0x8B, 0xC1, 0xEC, + 0x56, 0xD1, 0x21, 0x84, 0x86, 0x27, 0x6A, 0x7F, 0x0C, 0x87, 0x44, 0x85, 0xD5, 0xDA, 0x52, 0xE6, 0x88, 0x1C, 0x4D, 0xD6, 0xBB, + 0x79, 0x36, 0xDA, 0xB1, 0x5B, 0x14, 0xB1, 0x03, 0xEB, 0xF7, 0x6D, 0xE2, 0x84, 0xA2, 0x32, 0x07, 0x22, 0xCD, 0x86, 0x82, 0x2E, + 0x40, 0xEF, 0x1F, 0x6A, 0xCA, 0x4B, 0xF1, 0x73, 0xB2, 0xEF, 0xF1, 0xF3, 0xC7, 0xEF, 0x70, 0xF4, 0x95, 0x3E, 0xB9, 0x88, 0xF6, + 0x9C, 0xB6, 0xBE, 0xA5, 0x1A, 0xD0, 0xD8, 0x05, 0x36, 0x46, 0xBB, 0xFC, 0x5D, 0xE4, 0xE0, 0x5D, 0xAC, 0x9C, 0x54, 0xB9, 0x43, + 0x89, 0xA9, 0x74, 0x1F, 0xDF, 0xD8, 0x9F, 0x6A, 0x41, 0x04, 0x6A, 0xC7, 0x1A, 0xC8, 0x48, 0x12, 0x7E, 0xA0, 0xB1, 0xBB, 0xB4, + 0xE8, 0x85, 0x7C, 0x64, 0x5C, 0x3E, 0xAA, 0xC2, 0xDE, 0x00, 0x33, 0x2D, 0xE4, 0x63, 0x37, 0x25, 0x75, 0x49, 0x7C, 0xB6, 0x5D, + 0xB4, 0x85, 0x78, 0x28, 0xB8, 0xB2, 0x8F, 0xCE, 0x05, 0x82, 0x60, 0x21, 0xF3, 0xB2, 0x90, 0x67, 0x99, 0x30, 0x0A, 0xDC, 0xE4, + 0x59, 0x94, 0xEF, 0x1C, 0x8B, 0xB7, 0x94, 0x53, 0x7D, 0x17, 0x96, 0x35, 0x9C, 0x17, 0xF5, 0x8B, 0xCF, 0x1C, 0xEE, 0x58, 0xF7, + 0xA4, 0xA8, 0x68, 0xE2, 0x6C, 0x36, 0xE6, 0x73, 0x41, 0x8D, 0x8F, 0x6B, 0x83, 0xAA, 0x2C, 0x8D, 0x2C, 0xFF, 0xD0, 0xE4, 0x52, + 0x2B, 0x45, 0x11, 0xB2, 0x80, 0x70, 0xF3, 0x93, 0x96, 0x66, 0x34, 0xBF, 0xAD, 0xCB, 0x35, 0x5A, 0xF2, 0xB1, 0x3B, 0x43, 0x2F, + 0xFB, 0x72, 0x7F, 0x6F, 0x13, 0xBF, 0xD2, 0x05, 0x4F, 0xAE, 0x8A, 0x65, 0x66, 0x96, 0x2D, 0xA0, 0x99, 0x39, 0x4A, 0x54, 0x13, + 0x23, 0x31, 0xF3, 0x70, 0x6F, 0x08, 0xC6, 0xD5, 0xDE, 0xF6, 0x0D, 0x28, 0x70, 0x8C, 0x68, 0xB5, 0x60, 0xAB, 0xE4, 0xCE, 0x1C, + 0x92, 0x61, 0xE5, 0xE1, 0x30, 0xEB, 0x86, 0xC3, 0x3C, 0x92, 0xAD, 0x55, 0xED, 0x35, 0x40, 0xF9, 0x81, 0x9C, 0xC7, 0x9C, 0xA2, + 0x3A, 0xE8, 0x0D, 0x4D, 0x0A, 0x9A, 0xF8, 0xC7, 0x44, 0x81, 0xB1, 0x4F, 0xE7, 0x2E, 0xD8, 0x96, 0x49, 0x9A, 0x14, 0x96, 0xF8, + 0x58, 0xB1, 0x42, 0x21, 0x7C, 0xA2, 0xD5, 0xBA, 0x17, 0xA9, 0x20, 0x70, 0xD1, 0x45, 0x40, 0x37, 0x56, 0x19, 0xBA, 0xC3, 0x2F, + 0xD1, 0xD9, 0x08, 0x04, 0x3B, 0x2E, 0x2B, 0xE4, 0x6D, 0x21, 0x12, 0x33, 0x01, 0xA1, 0xA1, 0x3C, 0x2E, 0xF6, 0xF8, 0x94, 0x86, + 0x96, 0xC4, 0x64, 0xDE, 0xE0, 0xF4, 0x9F, 0x71, 0x03, 0x63, 0xFE, 0x84, 0x1E, 0x61, 0x2B, 0x0F, 0xB1, 0x75, 0xA6, 0xF8, 0x3A, + 0x4E, 0x6F, 0x94, 0x81, 0x13, 0xAD, 0x3E, 0xAD, 0x6C, 0x53, 0xA2, 0x4D, 0x37, 0xC7, 0x0C, 0x32, 0x45, 0x80, 0x08, 0x56, 0xB4, + 0xBD, 0x56, 0x1B, 0xBE, 0x31, 0x18, 0x50, 0x2F, 0x80, 0x1F, 0xAF, 0x28, 0x03, 0x51, 0xA2, 0x45, 0xC8, 0xB9, 0x52, 0x22, 0xAE, + 0x37, 0x4B, 0x75, 0x55, 0x22, 0x2B, 0xA4, 0xF8, 0xAF, 0x14, 0x07, 0x58, 0xBE, 0x24, 0xD4, 0x6F, 0xC2, 0xE5, 0x53, 0x17, 0xCE, + 0xAB, 0xE7, 0x5A, 0xA6, 0xB1, 0x49, 0x17, 0xDB, 0x6E, 0x6B, 0xD6, 0x5B, 0x43, 0xD2, 0x44, 0xB8, 0xEC, 0xC3, 0x18, 0x69, 0xC9, + 0x95, 0x21, 0x02, 0x4C, 0x56, 0x4B, 0xFD, 0xFC, 0xCD, 0xE6, 0xC2, 0xC5, 0x41, 0xEA, 0x8A, 0xDA, 0x48, 0x40, 0x7E, 0xAC, 0xEA, + 0x2B, 0xAC, 0x56, 0x0F, 0xC0, 0x11, 0x2E, 0x1B, 0x2C, 0x98, 0xF0, 0xD0, 0x4C, 0xC0, 0xD8, 0x50, 0x73, 0x03, 0x6D, 0x86, 0xE1, + 0x18, 0x0C, 0xBD, 0xE5, 0x56, 0xAD, 0x41, 0x2C, 0x99, 0xF9, 0x7C, 0x11, 0x47, 0x9C, 0xD5, 0x2B, 0x7A, 0x3E, 0x91, 0x53, 0xF4, + 0x6A, 0x18, 0x08, 0xC1, 0xB4, 0xBC, 0x1A, 0xC0, 0x86, 0x52, 0xEA, 0x53, 0x30, 0xCC, 0x55, 0x0B, 0x56, 0xD8, 0x50, 0x62, 0xCE, + 0x07, 0xF9, 0x69, 0x81, 0x54, 0x52, 0xB6, 0x3E, 0x8A, 0xB1, 0x72, 0xFE, 0xA7, 0xB2, 0xF2, 0x2C, 0xB8, 0xBA, 0x3A, 0xFF, 0xB2, + 0xE4, 0x5A, 0x4B, 0x2D, 0x17, 0xA4, 0x5F, 0x94, 0x45, 0xD5, 0x8D, 0x6B, 0xB9, 0x51, 0x3C, 0xD9, 0x2C, 0x54, 0x34, 0x1B, 0x06, + 0xAD, 0x8C, 0x43, 0x3F, 0x24, 0xE8, 0x3F, 0x3F, 0x60, 0x07, 0x8F, 0x15, 0xEA, 0x28, 0x05, 0x0D, 0x0B, 0xDF, 0x26, 0x8D, 0x85, + 0x5F, 0x01, 0xDA, 0x0F, 0xEF, 0xBD, 0x34, 0xD6, 0x91, 0x39, 0x71, 0x72, 0xDE, 0x46, 0x7A, 0xE4, 0x4F, 0xF6, 0x4C, 0x23, 0x6F, + 0x0F, 0x0E, 0x9D, 0x14, 0x65, 0xAC, 0x55, 0xDD, 0x1C, 0x4E, 0x1E, 0x9F, 0x1B, 0x16, 0x7B, 0xE5, 0xA5, 0xFC, 0x74, 0xF2, 0x23, + 0x3A, 0x25, 0x96, 0x2D, 0x86, 0x42, 0x35, 0xF9, 0x52, 0x6B, 0xAE, 0xB4, 0x32, 0xD9, 0x9D, 0xCF, 0xA6, 0xE5, 0xC9, 0x70, 0xB6, + 0xC5, 0x3F, 0x83, 0xD9, 0xD5, 0xD5, 0x05, 0x7D, 0xF5, 0xE1, 0xAB, 0x77, 0x46, 0x9F, 0x3D, 0xF8, 0xEC, 0xF3, 0x59, 0x31, 0xF5, + 0x7C, 0x6B, 0xBC, 0xED, 0x8B, 0x57, 0xCE, 0x01, 0x87, 0x17, 0x4A, 0x24, 0xE1, 0x8B, 0x6E, 0xE5, 0xCB, 0xE1, 0x28, 0x5E, 0xD8, + 0x8E, 0x86, 0x41, 0xD8, 0x90, 0x1E, 0xEC, 0x14, 0x1B, 0x58, 0xF8, 0x78, 0x9A, 0x60, 0xA8, 0xB3, 0x64, 0x47, 0x77, 0x89, 0x90, + 0x42, 0xFD, 0xDD, 0x6E, 0x1D, 0x79, 0x58, 0xC7, 0x6A, 0x46, 0xA8, 0x90, 0xFE, 0x26, 0x1A, 0xF6, 0x5F, 0x0E, 0x5F, 0x9E, 0x9D, + 0xF7, 0x5F, 0x8E, 0x42, 0x83, 0x53, 0xC1, 0x20, 0x37, 0x51, 0x33, 0xB5, 0x1E, 0x30, 0x3F, 0x9B, 0x4B, 0xDE, 0xC6, 0x66, 0xDF, + 0x74, 0x7F, 0xBE, 0xA6, 0x7A, 0x07, 0x2E, 0xA0, 0x43, 0xDA, 0xEA, 0xF7, 0x9E, 0xDF, 0xD6, 0x68, 0x3F, 0x0F, 0x38, 0xA8, 0x29, + 0x4D, 0x57, 0xD1, 0x28, 0xA8, 0x52, 0x96, 0xDA, 0x43, 0x65, 0x7A, 0x28, 0x68, 0xAD, 0xD7, 0x55, 0xC4, 0xB6, 0xD9, 0xD9, 0xC4, + 0x52, 0x51, 0x9D, 0xD5, 0x46, 0xD2, 0xDD, 0x9A, 0x72, 0x32, 0xEC, 0x52, 0xF3, 0x3D, 0x0A, 0xB7, 0x25, 0xC2, 0xC9, 0x2A, 0xEA, + 0xA6, 0x1F, 0x1A, 0x80, 0xFE, 0x38, 0xF1, 0x7B, 0xC7, 0x2C, 0xD8, 0x76, 0xED, 0x86, 0x6C, 0x05, 0x55, 0x77, 0x2E, 0xBD, 0x51, + 0xDD, 0xDD, 0xD7, 0x74, 0x53, 0x7B, 0xC5, 0x0D, 0x1B, 0x56, 0xDC, 0x50, 0x81, 0xD4, 0xB0, 0xA6, 0x2A, 0x83, 0xFC, 0xDB, 0xDD, + 0x74, 0xB7, 0x07, 0x75, 0x54, 0xD1, 0x3E, 0x0F, 0xEE, 0x45, 0x6C, 0xD9, 0x42, 0x97, 0x04, 0x5E, 0xB0, 0x10, 0x6A, 0x69, 0xBD, + 0x53, 0x5B, 0x89, 0xE6, 0x50, 0xC0, 0x36, 0x68, 0x81, 0x51, 0xD5, 0x5C, 0x0F, 0x63, 0x63, 0x4E, 0x38, 0xA4, 0x4A, 0x7B, 0x10, + 0x20, 0x17, 0x55, 0x40, 0x2A, 0x5A, 0xA8, 0x93, 0xB8, 0xD4, 0xA5, 0xD3, 0xAC, 0x90, 0x2A, 0x02, 0x36, 0x46, 0x7B, 0x5F, 0xDE, + 0x00, 0x2A, 0x73, 0x74, 0xCE, 0xC2, 0xCA, 0x09, 0xAD, 0x00, 0x38, 0x98, 0xC8, 0x2F, 0x71, 0x2A, 0x89, 0x22, 0xF5, 0xB8, 0xC4, + 0x7B, 0x23, 0x24, 0x4E, 0xA9, 0x5C, 0x43, 0xFE, 0xF7, 0xBB, 0x52, 0x75, 0xA4, 0x2A, 0xDA, 0x0B, 0x90, 0x63, 0x80, 0x6E, 0x29, + 0xCC, 0xF7, 0xA8, 0xAD, 0xD6, 0x40, 0x09, 0x09, 0x7A, 0x11, 0x15, 0x84, 0x57, 0xD8, 0x9D, 0x50, 0x56, 0x10, 0x27, 0xB0, 0x95, + 0xD6, 0x3E, 0x24, 0x76, 0x74, 0x56, 0x3C, 0xFE, 0xAD, 0xC5, 0x8E, 0xB2, 0x27, 0x95, 0x35, 0x63, 0xCA, 0x40, 0x11, 0xDF, 0xD1, + 0x17, 0xD9, 0x21, 0xDB, 0xF8, 0x8E, 0x22, 0xDE, 0x02, 0xDF, 0xBC, 0x70, 0x4B, 0x61, 0xB6, 0x8B, 0x56, 0x15, 0xFE, 0xDA, 0xA9, + 0x28, 0x8F, 0x84, 0x8B, 0x5F, 0x18, 0xA0, 0xB7, 0xD5, 0xE5, 0xF8, 0xC5, 0xA2, 0x80, 0x1A, 0x0A, 0xC0, 0x7B, 0x49, 0x19, 0x3D, + 0x23, 0xE3, 0xC2, 0xCA, 0xE9, 0x1B, 0x39, 0x16, 0x05, 0x59, 0xA5, 0x06, 0x63, 0x12, 0x58, 0x86, 0x47, 0x20, 0x7E, 0x44, 0x82, + 0xE5, 0xEB, 0x82, 0x81, 0x6A, 0x82, 0x1C, 0x68, 0x99, 0x55, 0x75, 0x64, 0x74, 0x30, 0x94, 0x39, 0xD2, 0x83, 0xD6, 0x29, 0x7F, + 0xDC, 0x27, 0x39, 0xA3, 0xB3, 0xDB, 0x16, 0x1D, 0x23, 0xB6, 0x62, 0x54, 0xA1, 0x96, 0xA0, 0xCF, 0xCA, 0x90, 0x7E, 0xB8, 0x4E, + 0x76, 0x15, 0x44, 0xED, 0x51, 0x0B, 0x2D, 0x41, 0xC0, 0x56, 0x0B, 0x65, 0x58, 0x52, 0x1E, 0x1E, 0xCA, 0xC3, 0x9B, 0x6B, 0x20, + 0xF0, 0x8C, 0x3D, 0x19, 0x09, 0xCA, 0xBB, 0x4C, 0x79, 0xF4, 0x27, 0xD3, 0x28, 0x1D, 0x3E, 0x92, 0x4D, 0xD2, 0x71, 0xE2, 0x71, + 0x6B, 0x78, 0x38, 0x4F, 0xCB, 0x99, 0x7F, 0x84, 0xE1, 0x9E, 0x36, 0x07, 0x97, 0x46, 0x43, 0x4A, 0x71, 0x48, 0xE9, 0xCE, 0x5F, + 0x7F, 0x7D, 0xCB, 0xAD, 0x42, 0xBA, 0x1B, 0x61, 0xB7, 0x73, 0xD4, 0x5C, 0x3B, 0xFB, 0x79, 0x46, 0xF9, 0x1E, 0x85, 0xEE, 0xFC, + 0x7F, 0x17, 0x16, 0xE8, 0x17, 0x8C, 0x18, 0xA5, 0xE3, 0x02, 0x0D, 0xF7, 0xC4, 0x05, 0x72, 0x28, 0x9C, 0x78, 0x59, 0xD2, 0xF6, + 0x3C, 0x09, 0x6B, 0x61, 0x83, 0xB4, 0x1B, 0xA5, 0xC3, 0x27, 0xA5, 0xEE, 0xBC, 0x44, 0x2E, 0x9C, 0xE4, 0x5F, 0x6D, 0x46, 0x42, + 0xE0, 0x4E, 0xB1, 0x32, 0x10, 0x42, 0x0A, 0xFC, 0x24, 0x02, 0x0D, 0x7F, 0x3A, 0x93, 0x21, 0x0B, 0xD0, 0xED, 0x93, 0xBB, 0xBE, + 0xCA, 0x34, 0x15, 0xD8, 0x60, 0x67, 0x1A, 0x14, 0x44, 0x48, 0x5D, 0x71, 0x07, 0x48, 0xC7, 0xF8, 0xE2, 0x3E, 0x3D, 0x46, 0x3B, + 0xDA, 0x66, 0x59, 0x06, 0x56, 0x06, 0xCC, 0x9A, 0xF2, 0xBD, 0x90, 0x0D, 0x89, 0x48, 0xC5, 0x76, 0xA9, 0x3D, 0xB1, 0x7F, 0x0C, + 0xE1, 0x9B, 0x07, 0xFF, 0xA1, 0x11, 0x35, 0x5C, 0xB3, 0xFB, 0x97, 0x46, 0xF4, 0x21, 0x40, 0x64, 0x22, 0x01, 0x75, 0xC0, 0x5D, + 0xB0, 0xE6, 0x48, 0x3B, 0x2E, 0x8F, 0xBF, 0xB4, 0x69, 0xD2, 0x0D, 0x87, 0x3F, 0x7E, 0x8F, 0x58, 0x8B, 0x71, 0x2A, 0xA4, 0x42, + 0xC5, 0xE7, 0xAF, 0x96, 0xAE, 0x22, 0x4C, 0x07, 0xC6, 0x18, 0xF8, 0x85, 0x71, 0x26, 0xE3, 0x41, 0x54, 0x28, 0x46, 0xE4, 0xA2, + 0xF3, 0x9E, 0xB8, 0x0C, 0x4A, 0xB4, 0x1B, 0x1B, 0x26, 0xD4, 0x83, 0x82, 0xC0, 0x7C, 0xFA, 0x28, 0x0D, 0x77, 0x10, 0x13, 0x2E, + 0xE9, 0xDB, 0x24, 0xBC, 0x53, 0xD5, 0x9D, 0xE4, 0xE7, 0x78, 0x38, 0xD6, 0x1A, 0x45, 0x0F, 0x2E, 0x12, 0x29, 0x7A, 0x41, 0xE8, + 0xCB, 0x2B, 0x62, 0x84, 0x24, 0xD5, 0x1D, 0xC7, 0x13, 0x3A, 0x51, 0xC9, 0x88, 0x07, 0x94, 0x6F, 0xD6, 0x64, 0xB5, 0x7B, 0xB3, + 0x36, 0x8A, 0xEA, 0x81, 0x31, 0x92, 0x6A, 0xAE, 0xC9, 0x26, 0xB4, 0x93, 0x21, 0x5F, 0x89, 0x46, 0xAF, 0xC6, 0x32, 0x94, 0xF1, + 0x3C, 0xC9, 0x3D, 0x4C, 0x17, 0xC1, 0xA5, 0x76, 0x99, 0x03, 0x6F, 0xC9, 0x05, 0x50, 0xC7, 0xC7, 0x7E, 0x6E, 0x4D, 0xA5, 0x7B, + 0xC6, 0x73, 0xD0, 0x63, 0xA5, 0xE4, 0x50, 0x01, 0xDE, 0x11, 0x30, 0xC3, 0x74, 0x53, 0x47, 0xFF, 0x92, 0x5A, 0x9B, 0xC6, 0x4D, + 0x00, 0xBF, 0x3E, 0x99, 0xD3, 0x7C, 0x16, 0xE8, 0xB8, 0x20, 0xD5, 0x18, 0x20, 0x30, 0xC1, 0x8E, 0xFE, 0x2D, 0x0C, 0x21, 0x88, + 0x0B, 0xB7, 0x71, 0x58, 0xBF, 0xA1, 0xA0, 0x62, 0xED, 0xAB, 0xB7, 0x14, 0x38, 0x3E, 0xAB, 0xE9, 0xDC, 0x6B, 0x31, 0x52, 0xC9, + 0xE4, 0x9D, 0x58, 0x8B, 0x63, 0x48, 0xFB, 0x50, 0x56, 0xB9, 0x17, 0xE4, 0xBE, 0xC0, 0x53, 0xF8, 0x39, 0x9E, 0xBE, 0x36, 0x05, + 0x24, 0xC6, 0x8B, 0x3D, 0x78, 0x9D, 0x21, 0x33, 0xA3, 0x2D, 0xE2, 0x92, 0x2B, 0x74, 0xE2, 0x1B, 0x99, 0x88, 0xDB, 0xE1, 0xC1, + 0xFB, 0x61, 0xAA, 0xF6, 0xC3, 0x5E, 0x60, 0x45, 0xB3, 0xAE, 0xDE, 0x2E, 0xA8, 0x3F, 0x3D, 0x41, 0xB3, 0x68, 0x45, 0x74, 0x04, + 0x4C, 0x4F, 0x4B, 0x0A, 0xEA, 0xC8, 0xF8, 0xDF, 0x5D, 0xBA, 0xC7, 0xDC, 0x49, 0x53, 0xCC, 0xC3, 0xD7, 0x8B, 0x3D, 0x97, 0x7B, + 0x08, 0x90, 0x6D, 0xA7, 0xEA, 0xDD, 0x5B, 0xAF, 0xC3, 0x8B, 0x09, 0x27, 0x3D, 0x59, 0xEB, 0x5B, 0x3C, 0x9E, 0x48, 0x4A, 0xD6, + 0x10, 0x9D, 0xBF, 0x56, 0x5D, 0x95, 0x57, 0xED, 0xF0, 0x13, 0xAD, 0x27, 0xE0, 0x95, 0xC7, 0x5E, 0x46, 0x0D, 0x57, 0xCF, 0xCD, + 0x55, 0x8D, 0x7E, 0xA9, 0x8D, 0x8F, 0x2C, 0x4F, 0x96, 0x0F, 0x4F, 0x54, 0xE5, 0x85, 0x44, 0x0D, 0xDC, 0x19, 0x9B, 0xC3, 0xFD, + 0x1A, 0xB5, 0x74, 0x41, 0x51, 0xD3, 0xF1, 0xD4, 0x87, 0x1B, 0x45, 0x6A, 0xB7, 0x93, 0xB8, 0xD9, 0x17, 0xE5, 0x67, 0x4F, 0x75, + 0x5A, 0x81, 0x95, 0xA8, 0x97, 0xCF, 0x10, 0xD9, 0x6C, 0x30, 0x75, 0xD8, 0x3F, 0xF7, 0x92, 0x3D, 0xE9, 0xD1, 0xBD, 0x97, 0x30, + 0x8D, 0xFA, 0x20, 0x89, 0x1D, 0x75, 0xB9, 0xD7, 0x4C, 0xEA, 0x58, 0xC2, 0x39, 0xBD, 0x87, 0x62, 0x2C, 0xE2, 0xD4, 0x58, 0xC4, + 0xD8, 0x81, 0x08, 0xC7, 0x6D, 0x84, 0x76, 0x49, 0xC3, 0x02, 0x46, 0x8A, 0x8F, 0x9A, 0x54, 0x36, 0xAF, 0x0C, 0xCD, 0xB1, 0x19, + 0x86, 0x49, 0x60, 0x01, 0x2E, 0x0F, 0x1E, 0x06, 0x5F, 0x2F, 0x9E, 0xFD, 0xF0, 0x56, 0xD6, 0x92, 0x74, 0x16, 0xD1, 0x90, 0xE5, + 0x18, 0x0D, 0x26, 0x5E, 0xAF, 0x57, 0x0F, 0xFC, 0xF9, 0x1D, 0x98, 0x8E, 0xDD, 0x25, 0xC6, 0x42, 0x66, 0x22, 0xB5, 0x14, 0x11, + 0xD7, 0x40, 0x4D, 0x55, 0x91, 0x8D, 0x31, 0xF2, 0x3E, 0x81, 0x84, 0x00, 0xA1, 0x94, 0x6C, 0xE1, 0x9C, 0x3F, 0x95, 0x25, 0xDF, + 0x8D, 0x0A, 0xDF, 0xBD, 0xBB, 0x67, 0xD7, 0xE8, 0x22, 0xF7, 0x4E, 0x44, 0x86, 0x78, 0xF7, 0xAE, 0x32, 0x21, 0x8A, 0x39, 0xC8, + 0x40, 0xBE, 0xBC, 0x05, 0x94, 0x34, 0x75, 0x5C, 0x66, 0x48, 0x8B, 0xF0, 0xFD, 0x15, 0xDF, 0xA3, 0x32, 0x9E, 0x7A, 0x6C, 0xE3, + 0xF4, 0x8F, 0x53, 0x8C, 0x6C, 0xE8, 0x05, 0x81, 0x59, 0x0F, 0xF7, 0x65, 0xF8, 0x09, 0x80, 0xC2, 0xBF, 0xEA, 0x66, 0x80, 0xC9, + 0x69, 0x20, 0x5D, 0x45, 0x85, 0x96, 0xC6, 0x34, 0x48, 0xD3, 0xA3, 0x94, 0xBA, 0x16, 0x39, 0x90, 0x55, 0xDE, 0xFF, 0x12, 0x90, + 0x3E, 0x41, 0x69, 0x65, 0x47, 0xBA, 0x98, 0x82, 0x52, 0x70, 0x7E, 0xB8, 0x53, 0xDF, 0xE3, 0xA7, 0x90, 0xB0, 0xBD, 0x11, 0xAA, + 0x47, 0x83, 0x40, 0xA0, 0xBC, 0xF3, 0x42, 0xEF, 0xDE, 0x9B, 0x85, 0xF2, 0x7A, 0xCB, 0x3F, 0x38, 0x87, 0xF2, 0x02, 0x50, 0x3E, + 0x41, 0x3A, 0xBA, 0x0F, 0xF0, 0xEB, 0x3E, 0xA2, 0x28, 0xD6, 0xB9, 0xE4, 0x98, 0x90, 0x18, 0xC6, 0x91, 0x2D, 0x78, 0x73, 0x9B, + 0x47, 0xD0, 0x29, 0xA0, 0x6B, 0xDF, 0xF1, 0x70, 0x09, 0xDE, 0xB0, 0xEC, 0x5E, 0xCE, 0xAF, 0x62, 0xCD, 0xBB, 0xE7, 0x7C, 0x5D, + 0x6D, 0xA2, 0x78, 0x3A, 0x37, 0xBC, 0xEC, 0xC3, 0x25, 0x34, 0xFD, 0xCE, 0x25, 0x52, 0x6D, 0x82, 0x70, 0x11, 0x6D, 0x1A, 0x2F, + 0x8A, 0x27, 0x13, 0xE1, 0xDD, 0x3A, 0xDE, 0xF0, 0x48, 0x0A, 0xB7, 0xDC, 0xC9, 0x31, 0x99, 0x4F, 0x17, 0xB3, 0xCB, 0x32, 0x82, + 0xC1, 0xB6, 0xF5, 0xBB, 0x34, 0xFE, 0x46, 0x48, 0x96, 0x1B, 0xBA, 0x60, 0xEC, 0xE7, 0x34, 0xE2, 0x17, 0xC5, 0x11, 0x49, 0x47, + 0xEA, 0xDA, 0xB6, 0x2B, 0x78, 0xD2, 0x5D, 0xF8, 0xE2, 0x7D, 0x00, 0x68, 0x07, 0xEC, 0x8B, 0x46, 0x40, 0x4A, 0x14, 0x08, 0xFE, + 0x60, 0x87, 0x2A, 0x7D, 0x51, 0xC8, 0x0B, 0x71, 0x1F, 0x8C, 0x60, 0xA5, 0x09, 0x55, 0x46, 0xCC, 0x4A, 0x9B, 0xC1, 0x8B, 0x24, + 0x20, 0x2F, 0x01, 0x7D, 0x40, 0x8D, 0x29, 0x2F, 0x0A, 0xFF, 0x43, 0x81, 0x77, 0x2E, 0xBC, 0x10, 0xC0, 0x4D, 0x16, 0x57, 0x57, + 0x83, 0x6D, 0x9F, 0xDB, 0x7E, 0x2F, 0xB6, 0xA9, 0x70, 0x42, 0x9D, 0x6E, 0xB0, 0x2B, 0x44, 0xC6, 0x2C, 0x54, 0x9F, 0x52, 0x81, + 0x8B, 0xA2, 0xE8, 0x76, 0x22, 0xE2, 0xD7, 0x14, 0xD3, 0x17, 0xF8, 0xA0, 0x1B, 0xDF, 0xC1, 0x5E, 0x14, 0x53, 0x6A, 0x7A, 0x16, + 0x2A, 0x18, 0x7A, 0x17, 0x12, 0x86, 0x40, 0x1C, 0xB9, 0xFB, 0xFA, 0xC3, 0x0B, 0x97, 0x14, 0x12, 0xDA, 0xF7, 0x2A, 0x00, 0xAA, + 0x86, 0xCC, 0xB2, 0xBD, 0xB3, 0xED, 0x6D, 0xB8, 0xC0, 0x9B, 0xAC, 0x50, 0x61, 0x87, 0x34, 0x04, 0xFF, 0x04, 0xE3, 0x8D, 0xBE, + 0xA2, 0x5D, 0xC3, 0xF7, 0x0B, 0x25, 0xFE, 0x10, 0x62, 0x4B, 0x8A, 0x0A, 0x22, 0x42, 0x0A, 0xE8, 0x10, 0x3B, 0x22, 0x09, 0x26, + 0x14, 0x47, 0xE5, 0x40, 0x5F, 0x0D, 0x53, 0xC6, 0xDC, 0xF0, 0x89, 0x78, 0x61, 0x4D, 0x84, 0x9C, 0x07, 0x3E, 0x12, 0x42, 0xF5, + 0x42, 0x24, 0xA9, 0xE1, 0x04, 0x63, 0x84, 0xF6, 0xA9, 0x56, 0x4C, 0x8C, 0xA3, 0x64, 0xB5, 0x41, 0x8C, 0xB5, 0x3D, 0x68, 0xD3, + 0x23, 0xBC, 0xDD, 0xD7, 0x11, 0x67, 0xCF, 0xEC, 0x2D, 0x9F, 0x59, 0xEC, 0x5E, 0xE2, 0x0D, 0x7A, 0xDE, 0xA8, 0x20, 0x3A, 0xC7, + 0xC7, 0xCF, 0xA6, 0x51, 0x83, 0x44, 0x9D, 0xE0, 0x35, 0x00, 0xD6, 0x04, 0x95, 0x7A, 0xA9, 0xCF, 0xF7, 0xC4, 0xD7, 0xBD, 0x27, + 0x1C, 0x90, 0x12, 0x1E, 0x36, 0x2A, 0xE5, 0x61, 0xA3, 0x9A, 0xAC, 0x11, 0x89, 0xDE, 0xB2, 0xED, 0xC0, 0x13, 0x37, 0x79, 0xB6, + 0x59, 0x4F, 0x98, 0x93, 0x50, 0x43, 0x13, 0x40, 0x73, 0x7D, 0x78, 0xD8, 0x22, 0xE8, 0x43, 0x02, 0x52, 0x71, 0xC6, 0xA7, 0x7E, + 0xF3, 0xC3, 0x9B, 0x60, 0x7C, 0x40, 0xAB, 0x35, 0xBA, 0xAF, 0x34, 0x2D, 0x48, 0xE9, 0x70, 0xDE, 0x7B, 0xA3, 0x90, 0x32, 0x42, + 0x8B, 0xCF, 0xCD, 0x27, 0x58, 0x7C, 0x6E, 0x2C, 0x8B, 0x0F, 0x62, 0x49, 0x1B, 0x7C, 0xFA, 0x1C, 0xC5, 0xBD, 0x2E, 0x0F, 0xD4, + 0x35, 0xE4, 0x81, 0xBA, 0x60, 0x01, 0xD3, 0x3D, 0xF6, 0xDE, 0x4B, 0x58, 0x3C, 0xF8, 0xB7, 0x87, 0xCC, 0x34, 0xF7, 0x5F, 0x22, + 0xDF, 0xCC, 0x7D, 0xC8, 0xBD, 0xE5, 0x37, 0x03, 0xF0, 0x41, 0x8E, 0x1E, 0x4C, 0xD3, 0x1A, 0x9B, 0x82, 0x42, 0x0F, 0xF8, 0x17, + 0xDA, 0xFC, 0x88, 0x7F, 0x07, 0x41, 0x78, 0x87, 0x7F, 0x87, 0xC6, 0xFC, 0xDD, 0xEC, 0xBB, 0xA7, 0xCE, 0x59, 0xB5, 0x8A, 0x09, + 0x4D, 0xEA, 0x5D, 0x61, 0x79, 0x28, 0xAB, 0xD8, 0x48, 0x76, 0x72, 0x2D, 0xDE, 0x33, 0x26, 0x12, 0x25, 0xD8, 0x97, 0xDE, 0x97, + 0xFA, 0xF9, 0x2B, 0x23, 0x7A, 0x92, 0x69, 0x3E, 0x32, 0x92, 0x79, 0xF7, 0xB5, 0x64, 0x42, 0xA9, 0x7D, 0x63, 0xFE, 0xDA, 0xBE, + 0x31, 0x6F, 0xF4, 0x62, 0xEF, 0x3F, 0xF8, 0xB3, 0xD6, 0xAA, 0xB8, 0x84, 0x28, 0x45, 0x7A, 0xFD, 0x9B, 0x8B, 0xDA, 0xFA, 0x37, + 0x97, 0x9F, 0x43, 0xD6, 0x18, 0x93, 0xF3, 0xC6, 0xB4, 0xA3, 0x6A, 0x20, 0x6A, 0xA1, 0x34, 0xD5, 0x1D, 0x25, 0x5D, 0xC6, 0xF6, + 0xA9, 0xD3, 0xE9, 0x97, 0x35, 0xBC, 0x89, 0x6B, 0x16, 0xEE, 0xF0, 0xF6, 0x62, 0x06, 0x83, 0xEA, 0x2D, 0x39, 0x43, 0x7D, 0x37, + 0x8A, 0x4D, 0x51, 0x0B, 0x9D, 0xC1, 0xAE, 0x96, 0xC3, 0xE2, 0xB8, 0x74, 0x40, 0x85, 0x6C, 0x6D, 0x5F, 0x24, 0xE0, 0xC4, 0x11, + 0x09, 0xD8, 0xAE, 0x5E, 0xF1, 0xE8, 0x33, 0x32, 0x71, 0x05, 0xEA, 0x99, 0xA9, 0xE1, 0xC8, 0x51, 0xCB, 0xBE, 0x6E, 0x6F, 0x4E, + 0xEB, 0xAD, 0x7D, 0xDD, 0x5E, 0x20, 0x01, 0x17, 0xB9, 0x31, 0xDB, 0xFB, 0xBB, 0x30, 0x0A, 0xAA, 0x2E, 0x4C, 0x52, 0xA9, 0x74, + 0xC1, 0xB3, 0xA8, 0x0B, 0xA4, 0xC7, 0xFD, 0x6D, 0x63, 0x09, 0xD9, 0x28, 0x67, 0x08, 0x1D, 0x90, 0xD9, 0x18, 0x2A, 0xF5, 0xDF, + 0x18, 0x47, 0x48, 0x84, 0x44, 0x1F, 0x63, 0xD4, 0x17, 0x66, 0x63, 0x86, 0x27, 0xA6, 0x22, 0x2F, 0x3B, 0x64, 0xE8, 0x06, 0x23, + 0x5E, 0x1A, 0xB9, 0xA4, 0x2E, 0x6C, 0x6C, 0x1E, 0x04, 0x32, 0x94, 0xB0, 0xF6, 0x9B, 0xCF, 0xA4, 0x95, 0xFA, 0x5D, 0x37, 0xB3, + 0x79, 0x91, 0x42, 0xDC, 0x41, 0x55, 0x83, 0x7D, 0x46, 0xC6, 0x00, 0x15, 0x8B, 0x90, 0x19, 0x77, 0x53, 0x9F, 0xB2, 0xC9, 0xD4, + 0x26, 0x0D, 0x94, 0x12, 0xE3, 0x3E, 0x26, 0xE7, 0xB1, 0x82, 0xB6, 0x8D, 0xD6, 0x8C, 0x29, 0xB0, 0x62, 0x3D, 0x4C, 0x6B, 0x33, + 0x64, 0xB5, 0x27, 0xAE, 0x49, 0xD3, 0xAC, 0xDC, 0x5A, 0x46, 0x0F, 0x67, 0x3D, 0xFA, 0xC9, 0xAD, 0x21, 0xB7, 0x96, 0x35, 0x64, + 0x4F, 0xE9, 0x1D, 0xDA, 0xBC, 0x9A, 0x38, 0x81, 0x89, 0xE3, 0x84, 0x07, 0xB9, 0x75, 0xCE, 0x79, 0xA3, 0x64, 0x7F, 0x6B, 0x48, + 0xF6, 0x6B, 0x25, 0xD5, 0x07, 0x2A, 0x50, 0x89, 0x13, 0xCB, 0x09, 0x5A, 0xBE, 0x6C, 0x8E, 0x87, 0x2B, 0x98, 0xA4, 0x62, 0x94, + 0x1C, 0x61, 0x30, 0x2F, 0x90, 0xBB, 0x7B, 0x30, 0xA9, 0x4A, 0x78, 0x16, 0x61, 0x7A, 0x83, 0x71, 0xA9, 0x44, 0x3A, 0x12, 0x4F, + 0x44, 0xE9, 0xE9, 0xCC, 0x59, 0xFA, 0x52, 0xCB, 0x0F, 0xC0, 0x37, 0xD6, 0x41, 0x83, 0xD0, 0xBC, 0x76, 0xCB, 0xCC, 0x58, 0x45, + 0xC8, 0x9A, 0x5C, 0x00, 0x22, 0xE5, 0x84, 0xEC, 0x3F, 0x3C, 0x35, 0x92, 0xD9, 0xE8, 0x23, 0x77, 0xF3, 0x74, 0x08, 0xFF, 0x1B, + 0x2B, 0xD8, 0xC9, 0x65, 0x6E, 0xEE, 0x53, 0xA5, 0xF1, 0x23, 0x74, 0xC6, 0xED, 0x57, 0x64, 0xBC, 0xB1, 0x19, 0xAA, 0xE2, 0xA6, + 0xF8, 0x4A, 0xE0, 0xF2, 0x6A, 0xA3, 0x87, 0xB0, 0x0C, 0xF2, 0x86, 0xD8, 0x17, 0xD3, 0xCD, 0x74, 0x39, 0x9B, 0x49, 0xE1, 0xDD, + 0x8C, 0x5A, 0x51, 0x18, 0x51, 0x2B, 0xB0, 0x50, 0x68, 0x57, 0xE1, 0x21, 0x5C, 0x4B, 0xC9, 0x59, 0x10, 0xA4, 0x2A, 0x38, 0x22, + 0xAB, 0x19, 0x1C, 0x1D, 0x3C, 0x43, 0xF6, 0xC0, 0xAB, 0xD8, 0x3D, 0x88, 0x9B, 0xF4, 0xAE, 0x1E, 0x44, 0x96, 0xAB, 0x07, 0xC2, + 0xF6, 0x42, 0x85, 0x47, 0xE0, 0x4D, 0x5E, 0x56, 0xD1, 0xB0, 0xC0, 0x50, 0x1D, 0xAE, 0x08, 0x1F, 0x0B, 0x19, 0x1B, 0xE4, 0xC6, + 0x99, 0x29, 0x62, 0x83, 0xB8, 0x02, 0x87, 0x2C, 0x54, 0x6C, 0x90, 0xB9, 0xCE, 0x4D, 0xAA, 0xC8, 0x5C, 0x18, 0x37, 0xCE, 0x8D, + 0x09, 0x47, 0x63, 0xAF, 0xFE, 0xA5, 0xAE, 0xE0, 0xFB, 0x8D, 0x14, 0x82, 0xEF, 0xB1, 0x19, 0x4F, 0x26, 0x54, 0xDF, 0x4B, 0xA0, + 0xAA, 0x0E, 0x12, 0xC2, 0x6A, 0x24, 0xEF, 0x50, 0x01, 0x2E, 0xF9, 0x10, 0xB7, 0x94, 0xC7, 0x35, 0x94, 0x2E, 0xCF, 0xC4, 0xF4, + 0xF1, 0x12, 0x5E, 0x87, 0xBF, 0x39, 0xE4, 0x80, 0x29, 0xA9, 0x15, 0xB2, 0xCC, 0xD3, 0xC0, 0x32, 0x0E, 0x39, 0x82, 0xBA, 0x75, + 0x1F, 0x41, 0xE1, 0x40, 0x55, 0xB0, 0x64, 0x19, 0xCD, 0x90, 0x93, 0x8E, 0x17, 0x26, 0x66, 0x98, 0x20, 0xBF, 0xCA, 0x95, 0xB1, + 0x6F, 0x7E, 0xB0, 0xE2, 0x2E, 0x6A, 0x32, 0xAA, 0x65, 0xB2, 0x42, 0xA6, 0xEA, 0xD7, 0x0D, 0x8E, 0x47, 0xAC, 0x12, 0x31, 0x70, + 0x87, 0x1B, 0x53, 0x40, 0x0F, 0x8A, 0x78, 0x7A, 0x72, 0xBC, 0xAA, 0x10, 0x2A, 0x0E, 0x48, 0x6A, 0x33, 0x3C, 0xA9, 0x24, 0xAB, + 0x87, 0x2B, 0x3E, 0xC7, 0xE3, 0x18, 0x34, 0xBB, 0x9E, 0x21, 0xE3, 0x6A, 0x9C, 0xC9, 0x90, 0x3C, 0x84, 0x51, 0x19, 0x08, 0xA4, + 0xF6, 0xA8, 0x46, 0xDE, 0x74, 0x90, 0x77, 0x63, 0x9D, 0x72, 0x1D, 0x10, 0x18, 0xC1, 0xC0, 0xAE, 0x2B, 0x30, 0x82, 0x1D, 0xF3, + 0xC0, 0x90, 0xFF, 0x8C, 0x09, 0xE4, 0x97, 0x76, 0xA9, 0x6E, 0x6E, 0xD8, 0x36, 0xDD, 0xF1, 0x12, 0x1C, 0x81, 0xCF, 0x00, 0x40, + 0x2B, 0xF6, 0x99, 0x39, 0x86, 0x7D, 0xA1, 0x77, 0xA4, 0x08, 0x3A, 0x13, 0x41, 0x03, 0x39, 0x48, 0xE6, 0x89, 0x97, 0x91, 0xB9, + 0x3F, 0x4E, 0xCF, 0xCD, 0xFE, 0xF3, 0x4F, 0x3E, 0x51, 0x3A, 0xD6, 0xCC, 0x27, 0x05, 0x88, 0xA9, 0xFA, 0x94, 0xAB, 0xF8, 0xE3, + 0x91, 0x0E, 0xB2, 0xE3, 0x94, 0xEC, 0x27, 0x35, 0xA9, 0x18, 0xDF, 0xF8, 0x9D, 0x8D, 0x0D, 0x24, 0xE8, 0xD4, 0xBD, 0xD2, 0x36, + 0x96, 0xB0, 0x05, 0x6E, 0xE7, 0x0B, 0x24, 0x58, 0xCC, 0xF5, 0x08, 0x89, 0xAC, 0xFE, 0xBC, 0x77, 0x48, 0x5C, 0x28, 0x73, 0x20, + 0xCA, 0xDD, 0x68, 0xE3, 0xF1, 0x71, 0xF5, 0x98, 0x58, 0x12, 0x83, 0x11, 0xDE, 0x46, 0x86, 0x0A, 0xE6, 0x0C, 0xCE, 0x8A, 0x76, + 0x73, 0x2D, 0x68, 0x4D, 0x36, 0x6F, 0x85, 0xFF, 0x99, 0x98, 0x2C, 0x4A, 0x85, 0x8C, 0xE4, 0x9A, 0x2C, 0x46, 0xE1, 0xB1, 0xE8, + 0xAB, 0x21, 0x9C, 0x8E, 0xE8, 0x00, 0xDF, 0x9A, 0xB2, 0x28, 0xAB, 0x72, 0x22, 0x78, 0xF3, 0xE4, 0xA1, 0xF4, 0x61, 0x24, 0x73, + 0x64, 0xE0, 0x40, 0x10, 0xBC, 0x8D, 0x10, 0x0C, 0xE4, 0xF4, 0x37, 0xC3, 0xEB, 0xD8, 0x0D, 0x86, 0x72, 0x22, 0x44, 0x44, 0xB9, + 0x6A, 0xD8, 0x1C, 0x89, 0xE1, 0xEA, 0x10, 0x32, 0xF3, 0x15, 0x19, 0x81, 0x61, 0x07, 0x42, 0x3F, 0x03, 0xBC, 0x76, 0x83, 0x87, + 0xC2, 0xEB, 0x64, 0x53, 0x8E, 0xB3, 0x5C, 0x73, 0xE6, 0x9E, 0x7A, 0x50, 0x25, 0x79, 0xEA, 0x41, 0x15, 0x77, 0x63, 0x4D, 0x0F, + 0xAA, 0x24, 0x4F, 0x3E, 0xA8, 0x62, 0x35, 0xB8, 0xE7, 0xBA, 0x87, 0x74, 0x45, 0x24, 0xE5, 0xB1, 0x5A, 0x0F, 0x74, 0x19, 0x33, + 0x78, 0x4D, 0x7D, 0xE7, 0x10, 0x41, 0xEE, 0x61, 0xDB, 0x98, 0xCE, 0x0E, 0x38, 0x53, 0x2F, 0xF9, 0xA1, 0xFD, 0x7E, 0x35, 0xCE, + 0xB2, 0x04, 0x0A, 0x7B, 0x80, 0x38, 0x8E, 0x15, 0xFB, 0x83, 0xFF, 0xC8, 0x0F, 0x20, 0xC6, 0x8B, 0x90, 0x2C, 0x79, 0xE3, 0x32, + 0xDC, 0x94, 0xC9, 0x6A, 0x7C, 0x2B, 0x57, 0xA6, 0x38, 0x3F, 0x5D, 0xCB, 0xE2, 0xAF, 0x59, 0xBC, 0x80, 0xE2, 0xCB, 0x86, 0xE2, + 0xE2, 0xE0, 0xF3, 0x41, 0x16, 0x77, 0x97, 0x32, 0x0E, 0x3B, 0x3F, 0x9A, 0x07, 0x9A, 0x7B, 0x2B, 0xA9, 0x73, 0xCE, 0x8F, 0xF6, + 0x51, 0xA4, 0xA3, 0x82, 0x50, 0x5F, 0xEF, 0xC4, 0xFB, 0x41, 0xEA, 0xE5, 0xEB, 0xFA, 0x6B, 0x6A, 0xC1, 0xA5, 0x75, 0xF4, 0x5A, + 0x81, 0xAE, 0x06, 0x6D, 0x62, 0xFC, 0xE8, 0x5C, 0xE3, 0x3B, 0x11, 0xF4, 0x7E, 0xBA, 0x02, 0xCD, 0x02, 0xB4, 0x02, 0x76, 0xA2, + 0x3E, 0x65, 0x4D, 0xDB, 0xAF, 0xD0, 0xA4, 0x96, 0x27, 0xCF, 0xCC, 0x89, 0x9C, 0x60, 0x82, 0xAD, 0x53, 0xF3, 0x7A, 0x0B, 0x87, + 0x9C, 0x9F, 0xEB, 0x26, 0x50, 0x48, 0x02, 0x12, 0x9B, 0x94, 0xC2, 0x68, 0x3B, 0x2E, 0xB5, 0xD9, 0xD6, 0x6E, 0xBD, 0x76, 0xAA, + 0xDE, 0x04, 0x9F, 0xBA, 0x50, 0x5A, 0x85, 0xEF, 0x80, 0x53, 0x76, 0x3B, 0xCE, 0x1C, 0xBE, 0xA4, 0x1D, 0x2D, 0xB5, 0x6B, 0x81, + 0x45, 0x9F, 0x3E, 0xEE, 0x18, 0xCA, 0x49, 0xD4, 0xEE, 0xE9, 0x89, 0xB3, 0x78, 0x09, 0xA9, 0x71, 0x1A, 0x6F, 0xD6, 0x3E, 0xE0, + 0x5C, 0x5E, 0xB6, 0x50, 0x39, 0x99, 0xB7, 0xD5, 0x88, 0x27, 0xCF, 0xE8, 0x65, 0x2B, 0x95, 0x53, 0xFA, 0x9B, 0x8E, 0x13, 0x37, + 0xDA, 0x29, 0x25, 0x78, 0xBC, 0xAD, 0xB8, 0xA4, 0xD0, 0x23, 0x50, 0x9F, 0xE0, 0x41, 0x39, 0xFC, 0x3C, 0x1E, 0x94, 0x3F, 0xC5, + 0x6B, 0xF3, 0xD9, 0x8B, 0xFD, 0xC7, 0x16, 0x29, 0xC6, 0x89, 0x75, 0x3C, 0xAF, 0x58, 0x42, 0x8E, 0x90, 0xD3, 0xC5, 0x1F, 0x2C, + 0x17, 0x9A, 0x2F, 0x8B, 0xB9, 0x1E, 0x93, 0x10, 0x6A, 0x7E, 0xE3, 0x1B, 0x0D, 0x22, 0xBF, 0xFA, 0xE0, 0xC0, 0xBF, 0x8B, 0x64, + 0x6D, 0xD5, 0xA6, 0x47, 0x12, 0xBA, 0xCF, 0xF0, 0x58, 0xA4, 0xC7, 0x02, 0x44, 0xF3, 0xFA, 0xD9, 0x80, 0x7F, 0x9D, 0xFF, 0xA2, + 0xE8, 0x5A, 0xA8, 0x41, 0x12, 0x90, 0x7F, 0x69, 0x08, 0xFC, 0xA2, 0xAE, 0x8C, 0x7C, 0x52, 0x08, 0x7C, 0x75, 0xFC, 0x6A, 0x0E, + 0xA5, 0x22, 0x8A, 0x4B, 0xFF, 0x6D, 0xC8, 0x55, 0xA1, 0xB7, 0xCC, 0xE2, 0xFB, 0x34, 0x24, 0x4B, 0x3D, 0x2A, 0x6A, 0xA1, 0xA1, + 0xF7, 0x04, 0x86, 0xCE, 0x27, 0x78, 0xC6, 0x6F, 0xAD, 0xB6, 0x5C, 0x04, 0x86, 0xCE, 0x1D, 0x81, 0xA1, 0xF1, 0x1A, 0xB4, 0x59, + 0x81, 0x02, 0x43, 0xE7, 0xB5, 0xC0, 0xD0, 0x09, 0xBA, 0x12, 0x57, 0x9A, 0x4D, 0x9A, 0xFC, 0xCA, 0x52, 0xF1, 0xC8, 0xC2, 0x73, + 0x96, 0x78, 0x6C, 0x1F, 0x99, 0xC5, 0x9F, 0xB0, 0xC4, 0x63, 0x6B, 0x89, 0x0B, 0x07, 0x0B, 0xE3, 0xD4, 0xAC, 0x2B, 0x97, 0x38, + 0x9D, 0x9A, 0xF5, 0xCC, 0x13, 0xAE, 0x78, 0xDF, 0x09, 0x97, 0x30, 0x25, 0xA9, 0x23, 0xAE, 0x77, 0x22, 0xC1, 0x15, 0x87, 0x79, + 0x6E, 0x9F, 0x2A, 0xD5, 0x4A, 0x86, 0x6C, 0x17, 0x3F, 0x6D, 0x9A, 0x8C, 0x6D, 0xD3, 0x24, 0x59, 0xE0, 0x44, 0x53, 0x81, 0x3E, + 0x88, 0xB6, 0xCD, 0x70, 0x32, 0x1F, 0xC6, 0xD8, 0xBD, 0xCC, 0xAE, 0x12, 0x2D, 0x88, 0x65, 0xC2, 0xD2, 0xA7, 0x0D, 0x65, 0x7E, + 0x32, 0xCD, 0xD0, 0xD2, 0x27, 0xEA, 0x4C, 0xF1, 0xE7, 0xCC, 0x88, 0x87, 0x6B, 0x84, 0x83, 0xAC, 0xC5, 0x80, 0x0E, 0x1D, 0x26, + 0x29, 0xB4, 0x48, 0xC5, 0xFF, 0x3A, 0x8B, 0x54, 0x83, 0x53, 0xB4, 0xD3, 0x22, 0x25, 0x86, 0xE8, 0xB4, 0x33, 0x99, 0xB3, 0xA3, + 0x2C, 0x47, 0x7F, 0xD3, 0x1C, 0xE3, 0xF6, 0xA6, 0x34, 0x90, 0xA3, 0x40, 0x3A, 0x24, 0x66, 0xB4, 0x59, 0x54, 0x1D, 0x31, 0x59, + 0x44, 0x95, 0xD9, 0x67, 0x4C, 0x92, 0x0A, 0x28, 0x6C, 0x74, 0x7C, 0xA0, 0x59, 0x45, 0x92, 0x01, 0x5A, 0x47, 0x12, 0xBB, 0x4E, + 0x45, 0x07, 0x8A, 0x9F, 0x6B, 0x6C, 0xB2, 0x50, 0xEC, 0x38, 0x60, 0xC4, 0xD3, 0xC4, 0x83, 0x4C, 0x46, 0x16, 0x43, 0x8C, 0xFF, + 0x05, 0xC6, 0x1B, 0x97, 0x80, 0x97, 0x4E, 0x7C, 0x1B, 0x61, 0x86, 0x2D, 0x40, 0xE8, 0x9A, 0x84, 0xAA, 0xF9, 0x61, 0xB6, 0x80, + 0xF8, 0x79, 0xB6, 0x80, 0x54, 0x0F, 0xAE, 0x02, 0xC0, 0x67, 0xD0, 0x9D, 0x2B, 0x2D, 0x56, 0x94, 0xE7, 0xF9, 0x33, 0x75, 0xE5, + 0x78, 0x9F, 0x36, 0x5A, 0x89, 0x37, 0x13, 0xA6, 0xFC, 0x45, 0x65, 0xE9, 0x12, 0x27, 0x43, 0x64, 0xF1, 0x47, 0x9E, 0x6B, 0x54, + 0x64, 0x3E, 0xFA, 0x4C, 0x5C, 0x65, 0x0E, 0x6B, 0x40, 0xBC, 0x43, 0xEF, 0xAB, 0x20, 0x9D, 0x66, 0x0D, 0x7C, 0xD3, 0xB9, 0x72, + 0xCC, 0x17, 0x68, 0x27, 0xC1, 0xE9, 0x1F, 0xFF, 0xF8, 0xFD, 0xFE, 0xDD, 0xEC, 0xF4, 0x26, 0xF4, 0x40, 0x02, 0x4B, 0xA7, 0xF3, + 0x99, 0xE5, 0x22, 0x97, 0x7B, 0xB0, 0xEA, 0xBD, 0x59, 0x98, 0x19, 0x2A, 0xB8, 0x3F, 0x0F, 0x26, 0xF3, 0xB6, 0xF7, 0xCE, 0x1B, + 0xCF, 0x03, 0xE5, 0x0B, 0xC3, 0xE5, 0x86, 0xF5, 0xFC, 0x1B, 0xEE, 0x7F, 0xF3, 0x5F, 0x21, 0xBE, 0x9E, 0x37, 0xC7, 0x43, 0xAA, + 0xC7, 0xBB, 0x71, 0x12, 0xFE, 0x17, 0xD0, 0x82, 0x94, 0x2A, 0x5E, 0xB3, 0xFF, 0xDA, 0x00, 0x63, 0x21, 0xD7, 0x17, 0xDC, 0xB9, + 0xC2, 0xC2, 0xCA, 0x2C, 0xD6, 0xC0, 0xC1, 0x98, 0xCA, 0xDD, 0x29, 0xB4, 0xA7, 0xCF, 0x78, 0x37, 0xD5, 0xBE, 0x73, 0x94, 0x7D, + 0xC2, 0x76, 0x9A, 0xD9, 0x12, 0x33, 0x21, 0x54, 0xEF, 0xA6, 0xB5, 0xD7, 0x56, 0x61, 0xB4, 0xF4, 0xA0, 0x42, 0x38, 0x0F, 0x37, + 0x44, 0xA8, 0xC6, 0xD3, 0xA9, 0x45, 0x30, 0xF1, 0xE7, 0x11, 0xC6, 0x0B, 0x89, 0x55, 0xB4, 0x5B, 0x23, 0x3B, 0xC6, 0x30, 0xB7, + 0xF3, 0x28, 0x0E, 0x55, 0xAE, 0x7D, 0x01, 0xC9, 0x88, 0x0F, 0xE4, 0xBA, 0x7D, 0x54, 0x36, 0x48, 0xD3, 0x95, 0xD7, 0x5F, 0x5D, + 0xB2, 0x78, 0xAE, 0x67, 0xE2, 0x80, 0x16, 0x5C, 0x0F, 0xAE, 0xE5, 0xC6, 0x74, 0x39, 0x9B, 0xB0, 0x44, 0x8A, 0xB9, 0xF1, 0xDC, + 0x09, 0x5E, 0x86, 0xF2, 0x80, 0x60, 0xD4, 0xB1, 0x82, 0x02, 0x45, 0x8B, 0xFE, 0x94, 0x04, 0xBD, 0xB3, 0xF8, 0x0E, 0x76, 0xC6, + 0xA2, 0xFA, 0xF6, 0x9A, 0xEE, 0x3A, 0xCA, 0xEC, 0x34, 0x55, 0x27, 0xAE, 0xD5, 0xA9, 0x92, 0xA0, 0xE3, 0x61, 0x50, 0x93, 0x06, + 0x1D, 0x0F, 0x94, 0x6D, 0x76, 0xD9, 0x01, 0x3A, 0x07, 0x51, 0x85, 0x7A, 0x9B, 0x4C, 0xF7, 0xC7, 0x0F, 0xCB, 0x54, 0xFB, 0x3A, + 0x93, 0xC3, 0x6C, 0x64, 0xAB, 0x04, 0x97, 0x8A, 0xB2, 0xEF, 0x01, 0xD8, 0x67, 0xA9, 0x28, 0xA9, 0x29, 0x4D, 0x70, 0x5D, 0x84, + 0xA6, 0xE5, 0xC8, 0x78, 0xE0, 0x47, 0x9C, 0x22, 0xE0, 0xA7, 0x16, 0x06, 0x8C, 0x31, 0xD5, 0xE7, 0x50, 0x65, 0xF3, 0x41, 0x78, + 0x8E, 0x19, 0x0D, 0x2D, 0xE2, 0xF1, 0xEA, 0x93, 0xAA, 0x0B, 0x54, 0x1A, 0xB1, 0xD0, 0xF3, 0xE9, 0xCA, 0xD0, 0x27, 0x3C, 0xFD, + 0x4A, 0x4D, 0x8D, 0xFD, 0x46, 0x5A, 0xA2, 0x0C, 0x2B, 0xA4, 0x31, 0xD7, 0xF7, 0x2B, 0xD8, 0x09, 0xF6, 0xD0, 0xDB, 0xFE, 0x26, + 0x74, 0xC1, 0xA7, 0x9E, 0xD4, 0xF9, 0x24, 0x77, 0x7F, 0x1D, 0x4D, 0xCE, 0xDE, 0x02, 0x56, 0xA6, 0x97, 0x34, 0xB7, 0xE7, 0x48, + 0x2F, 0x69, 0x3F, 0x37, 0x37, 0x69, 0x6E, 0x7B, 0x0C, 0xC8, 0x39, 0x21, 0x8F, 0xF8, 0x2F, 0xC9, 0x6B, 0x73, 0x4A, 0xE5, 0x7B, + 0x16, 0xC6, 0x84, 0x56, 0xD1, 0x89, 0x26, 0x74, 0x8A, 0x36, 0xCE, 0xE9, 0xD6, 0xF3, 0x2A, 0xBC, 0x8B, 0x2C, 0x3B, 0xAD, 0xD7, + 0xB6, 0xEF, 0x29, 0xEE, 0x39, 0x13, 0x05, 0x9D, 0x03, 0xF4, 0xD2, 0x5D, 0x20, 0xFD, 0xD7, 0x27, 0x5E, 0xF8, 0x21, 0xA4, 0x73, + 0x72, 0x6F, 0xEC, 0xA1, 0x23, 0xBC, 0xC7, 0xEF, 0x5B, 0x53, 0x4F, 0x57, 0x73, 0x40, 0x88, 0x00, 0xA8, 0x8C, 0x72, 0x65, 0x9B, + 0xC2, 0xC0, 0xF5, 0xF2, 0x60, 0xBA, 0xA4, 0x31, 0xFA, 0xE5, 0xF1, 0x79, 0x00, 0x00, 0x0F, 0x69, 0x00, 0x74, 0x65, 0x19, 0xAD, + 0x15, 0xBE, 0x27, 0xEE, 0x5B, 0x97, 0xAF, 0x5E, 0xBD, 0x1A, 0x60, 0x63, 0x15, 0xE7, 0x9E, 0x06, 0x9F, 0x13, 0xF1, 0x8E, 0x6D, + 0x5C, 0xF5, 0x3B, 0x31, 0xCD, 0xC2, 0x21, 0xEC, 0x07, 0x07, 0xF8, 0x7A, 0xC7, 0x9C, 0xC1, 0x6C, 0xAA, 0xEE, 0xDD, 0xB1, 0x78, + 0x22, 0x02, 0x60, 0xA4, 0x5B, 0xD7, 0x2F, 0x92, 0xB1, 0x07, 0x52, 0x49, 0xB2, 0x40, 0xA9, 0x98, 0x3C, 0xBE, 0x4B, 0xE1, 0x4D, + 0x8B, 0xF3, 0x50, 0x26, 0x2B, 0xF3, 0x3D, 0xA9, 0xC0, 0x83, 0x2D, 0xCC, 0xF7, 0x84, 0xDF, 0xCB, 0x46, 0xCE, 0x59, 0xBF, 0x15, + 0xB5, 0x34, 0x96, 0xDA, 0x84, 0x43, 0xCF, 0xD8, 0xAA, 0x52, 0xFD, 0x08, 0x5E, 0xAC, 0x4C, 0x02, 0x13, 0xE8, 0xE7, 0x43, 0xF4, + 0xE2, 0xBD, 0x17, 0x3A, 0xB3, 0x83, 0x31, 0xE5, 0x23, 0x8F, 0x6D, 0x68, 0x6A, 0x4E, 0x4D, 0xD0, 0x1C, 0x56, 0x9B, 0x99, 0xF3, + 0xEA, 0x1F, 0xD5, 0x03, 0x97, 0xD0, 0x44, 0x59, 0x99, 0xE2, 0xBE, 0x31, 0xC7, 0xF1, 0x4D, 0xDF, 0x9A, 0x66, 0x3D, 0x7F, 0x90, + 0x23, 0xA7, 0x50, 0x20, 0xAC, 0x37, 0x6E, 0x7D, 0x80, 0xC2, 0x2F, 0x30, 0xA6, 0x40, 0x8B, 0xCF, 0x78, 0xA8, 0xC0, 0x96, 0x85, + 0xFA, 0x63, 0xCF, 0xF0, 0x2C, 0x96, 0xEE, 0xF6, 0x26, 0xC4, 0xDA, 0xF5, 0x56, 0x18, 0x41, 0xF3, 0x50, 0x43, 0x80, 0x7E, 0xB6, + 0xC6, 0x08, 0x78, 0x6F, 0x1E, 0x6D, 0x92, 0x8A, 0xCA, 0x40, 0x5E, 0x17, 0x77, 0xE3, 0x69, 0x45, 0xE9, 0x5B, 0xF5, 0x08, 0x33, + 0x50, 0xA5, 0x41, 0x90, 0xDA, 0xD7, 0xDC, 0x44, 0x24, 0x3D, 0xEA, 0x69, 0xCD, 0xC7, 0x17, 0x2F, 0x8A, 0xA9, 0xB0, 0x7E, 0x7C, + 0x00, 0xB0, 0xA5, 0x49, 0x64, 0x42, 0x64, 0x80, 0xC5, 0xDF, 0x66, 0xFF, 0x8C, 0x8B, 0x5B, 0xFF, 0x43, 0x30, 0xFE, 0x30, 0x8B, + 0x08, 0xB6, 0x2F, 0x80, 0x0A, 0x10, 0x50, 0x74, 0x77, 0x17, 0x49, 0x48, 0x18, 0xF8, 0x18, 0x9A, 0xF6, 0x69, 0x2F, 0x05, 0x3F, + 0x78, 0x51, 0x98, 0xFE, 0xEC, 0x48, 0x4C, 0x92, 0x9C, 0xD0, 0x31, 0x6A, 0x63, 0x41, 0x27, 0x1C, 0xDA, 0xE7, 0xB3, 0xEA, 0x52, + 0x33, 0xE6, 0x6D, 0x6E, 0xCE, 0x9A, 0x24, 0xBB, 0xDA, 0x34, 0x7B, 0xD4, 0x85, 0xB8, 0x26, 0x49, 0x98, 0xA4, 0x9E, 0x51, 0x42, + 0xA5, 0x80, 0x0C, 0x8D, 0x33, 0x65, 0x2F, 0x33, 0xE1, 0x8B, 0xAD, 0x9A, 0xAA, 0x4F, 0x20, 0xB4, 0x3B, 0xDE, 0x93, 0x6D, 0xCE, + 0x2F, 0x41, 0x90, 0x0B, 0xCC, 0x39, 0x40, 0x0B, 0xC6, 0xCF, 0x03, 0xC9, 0x41, 0x4E, 0x1C, 0x98, 0x27, 0xE9, 0x4C, 0x83, 0xA1, + 0xC8, 0x6C, 0x63, 0x13, 0x1A, 0xC5, 0xF8, 0x2A, 0x9B, 0xC9, 0xAD, 0x91, 0xD6, 0x24, 0xAB, 0x7B, 0xB7, 0x8F, 0xD7, 0x55, 0x6F, + 0xB5, 0xE0, 0xF5, 0xAA, 0xA5, 0x7A, 0x11, 0x57, 0x4E, 0xFE, 0xD1, 0x5D, 0xC5, 0x9B, 0xDF, 0xE7, 0x6E, 0xFC, 0x4B, 0x79, 0xCF, + 0x84, 0x8B, 0x9F, 0x44, 0xA8, 0xBF, 0xE2, 0xD6, 0x37, 0xCF, 0x56, 0x5C, 0x0E, 0x7D, 0xF1, 0x1E, 0xA3, 0x30, 0x70, 0x06, 0x39, + 0xBE, 0xDB, 0x41, 0x9D, 0xC2, 0x5F, 0x1A, 0xEE, 0x4D, 0x4A, 0x4D, 0xB9, 0x3B, 0xD8, 0x65, 0x5F, 0xD9, 0x18, 0xEF, 0x92, 0xA2, + 0xA0, 0x17, 0x89, 0x05, 0xB4, 0x96, 0xCA, 0xEC, 0xFD, 0x9D, 0x5D, 0x36, 0xB5, 0xEE, 0x22, 0x19, 0x3B, 0x2C, 0x3F, 0xE8, 0x00, + 0x0C, 0x7F, 0x81, 0x1A, 0x2F, 0x5F, 0xAB, 0x77, 0x47, 0x7A, 0xAD, 0x6E, 0xB7, 0x77, 0x48, 0x33, 0xE8, 0x05, 0xF8, 0x85, 0x52, + 0xC1, 0x90, 0x3B, 0xCA, 0x77, 0x68, 0xA0, 0x4F, 0xF8, 0x83, 0xEF, 0xCD, 0x86, 0x78, 0xFB, 0xD8, 0x74, 0x3E, 0x22, 0x97, 0xD1, + 0x5C, 0xF9, 0x66, 0x95, 0x7C, 0x91, 0xAD, 0x91, 0xD7, 0xEB, 0xFD, 0x8B, 0x5F, 0x57, 0x6A, 0xD8, 0xBF, 0xD4, 0xD5, 0xA5, 0xCA, + 0x9C, 0x56, 0xEE, 0x31, 0xE1, 0x96, 0x94, 0xD6, 0x6E, 0x1C, 0x51, 0x80, 0x27, 0xE3, 0x56, 0x47, 0x59, 0xB9, 0xD5, 0xE1, 0x24, + 0x81, 0x47, 0xBC, 0x80, 0x63, 0x5D, 0x59, 0x0A, 0x04, 0xC5, 0x10, 0x2D, 0x28, 0x4D, 0xEA, 0x45, 0x41, 0xE4, 0x62, 0xA1, 0x24, + 0xF3, 0x37, 0x12, 0x2D, 0x24, 0x01, 0x90, 0xCB, 0x65, 0xF5, 0x9A, 0x12, 0xAF, 0x64, 0x5F, 0x72, 0xF9, 0x60, 0x5F, 0x59, 0x0A, + 0xF0, 0x7A, 0x3D, 0xAC, 0x1A, 0xEF, 0x03, 0x5D, 0x6A, 0x01, 0x02, 0xC3, 0x5F, 0xF3, 0x70, 0xD9, 0xF6, 0xA6, 0x1F, 0xB8, 0xDF, + 0x25, 0x2D, 0x08, 0xF5, 0xEA, 0x8D, 0xBE, 0xEF, 0x23, 0x81, 0xB5, 0x23, 0x49, 0x34, 0x02, 0x1B, 0xF3, 0xC0, 0x11, 0x4F, 0xDC, + 0xDD, 0x41, 0x9C, 0xD8, 0x50, 0x24, 0x16, 0x08, 0x14, 0x70, 0x4C, 0xDC, 0x29, 0x97, 0x9E, 0x88, 0xD6, 0x74, 0xF0, 0x2C, 0x31, + 0x2B, 0xF8, 0x56, 0x49, 0x32, 0xB5, 0x12, 0x15, 0x4F, 0x5E, 0x93, 0x94, 0xD0, 0xC3, 0xCB, 0x41, 0x16, 0xB0, 0x56, 0xE9, 0xB6, + 0x37, 0x06, 0xFD, 0x6F, 0x55, 0x26, 0xEB, 0x15, 0x6B, 0x71, 0xD7, 0x44, 0x40, 0x52, 0xB5, 0xC9, 0xA8, 0x87, 0x2C, 0x07, 0x1B, + 0xEC, 0x61, 0x6B, 0x3B, 0x05, 0x7E, 0xB0, 0xAB, 0x10, 0x05, 0x0C, 0xA3, 0xBE, 0x7A, 0xF9, 0x26, 0x5F, 0x5B, 0xC0, 0x35, 0x65, + 0xDC, 0x90, 0x07, 0x25, 0x6C, 0x5E, 0xBB, 0x44, 0x39, 0x52, 0xFB, 0xEB, 0x0A, 0x34, 0xA3, 0x9A, 0x33, 0xF1, 0x60, 0x67, 0x1A, + 0x93, 0xEC, 0xA8, 0x8F, 0x08, 0x78, 0xC6, 0xE3, 0x87, 0x31, 0xAE, 0x76, 0xB1, 0x7D, 0xB6, 0x01, 0x2C, 0x14, 0x24, 0xDB, 0x9E, + 0x5E, 0x61, 0xBB, 0xFA, 0x81, 0x19, 0x37, 0x54, 0xD9, 0x27, 0xFB, 0xB5, 0x14, 0xFB, 0x45, 0xA9, 0x47, 0xA6, 0xA4, 0x11, 0xA0, + 0x0B, 0x98, 0xDB, 0xB4, 0xBA, 0xF5, 0x1B, 0x34, 0x52, 0x86, 0x1E, 0x3E, 0x75, 0xC6, 0xD1, 0x0C, 0x84, 0xA2, 0x96, 0x6D, 0x51, + 0x31, 0x8A, 0xBB, 0xDE, 0xE8, 0x15, 0x86, 0xA5, 0xC2, 0x34, 0x24, 0x31, 0x53, 0x4C, 0x74, 0x56, 0x9B, 0x82, 0xD4, 0x36, 0x9B, + 0x01, 0x65, 0xD9, 0x5B, 0x00, 0x8F, 0x75, 0x04, 0x89, 0x6A, 0xB7, 0x36, 0x65, 0x1E, 0x71, 0x5E, 0x0B, 0x03, 0xBA, 0xF4, 0x08, + 0x2F, 0x44, 0x4E, 0x2C, 0x30, 0xC7, 0xD3, 0x46, 0xCD, 0x4F, 0xCC, 0x52, 0xC7, 0x5A, 0x42, 0x52, 0x38, 0xE3, 0xEF, 0x1B, 0x53, + 0x44, 0x23, 0x29, 0xF6, 0xD2, 0xF7, 0xC6, 0xFC, 0x51, 0x98, 0x3F, 0xE4, 0x0B, 0x1E, 0x22, 0x4B, 0xFD, 0x64, 0x16, 0xCF, 0xF8, + 0x21, 0x2D, 0x81, 0xF7, 0xE6, 0x62, 0x1D, 0xA6, 0x75, 0x1C, 0x27, 0xBC, 0x80, 0x67, 0xC5, 0x3E, 0x12, 0x8F, 0x82, 0x68, 0x10, + 0xD4, 0x8F, 0xC2, 0xFC, 0x21, 0x5F, 0x05, 0x31, 0x41, 0xC0, 0x9F, 0x8D, 0x20, 0x1C, 0x1F, 0x73, 0xC9, 0xA9, 0x96, 0x03, 0x22, + 0xD9, 0x7D, 0xE0, 0x4A, 0xBF, 0x4D, 0x6E, 0x6E, 0x49, 0xC6, 0x48, 0xF9, 0x7F, 0x8D, 0x03, 0xD8, 0x52, 0x14, 0x23, 0x7B, 0x14, + 0xFC, 0x45, 0x14, 0x0E, 0x9D, 0x78, 0x26, 0x05, 0x60, 0x33, 0xB6, 0x1B, 0xE4, 0xC8, 0x91, 0x0C, 0x88, 0x15, 0x7C, 0xE1, 0x6A, + 0x5E, 0x66, 0x5A, 0x0D, 0xD3, 0x23, 0x28, 0xAE, 0xA6, 0xE4, 0x03, 0x50, 0xEE, 0xB6, 0x54, 0xAE, 0xD5, 0x98, 0x30, 0x23, 0x55, + 0xB0, 0x26, 0xCC, 0x51, 0x8D, 0xF3, 0x26, 0x8D, 0x4F, 0x36, 0x5C, 0xF4, 0x18, 0x8B, 0x00, 0x8C, 0xA3, 0x5A, 0x81, 0x27, 0x96, + 0x42, 0xA4, 0x07, 0xBC, 0xDD, 0xD6, 0xFB, 0x42, 0xC0, 0xDD, 0x78, 0x96, 0xB1, 0x69, 0xB5, 0x7B, 0xDD, 0xCE, 0x3E, 0x5A, 0x43, + 0xA9, 0x40, 0x91, 0xB3, 0x54, 0x22, 0x3E, 0x37, 0x45, 0x43, 0xBB, 0x83, 0xFE, 0x6B, 0xC6, 0x1F, 0x43, 0xE6, 0xC8, 0xC9, 0x1B, + 0x69, 0x02, 0x4F, 0x65, 0xFF, 0xAF, 0x11, 0x36, 0xB4, 0x7D, 0x36, 0x3C, 0x14, 0x12, 0xA2, 0x4E, 0x07, 0x38, 0x92, 0x90, 0xAC, + 0x66, 0x9F, 0x1E, 0x9F, 0x20, 0x24, 0xD1, 0xA0, 0x9E, 0x90, 0x67, 0xBC, 0x1E, 0xD4, 0xDF, 0x7B, 0x85, 0xF3, 0x99, 0xAC, 0x3D, + 0x35, 0x59, 0xFB, 0x82, 0xF3, 0xF6, 0x44, 0x73, 0xEC, 0x2C, 0x72, 0xB2, 0xDB, 0xD0, 0xE6, 0xE4, 0x99, 0x93, 0x6B, 0x9B, 0xB7, + 0x4F, 0x32, 0xCE, 0xA0, 0xF1, 0xA5, 0x2D, 0xFB, 0xE1, 0x73, 0x66, 0x6E, 0x23, 0xA1, 0x60, 0xF4, 0x2F, 0xDE, 0x03, 0x9F, 0xC7, + 0x0A, 0x81, 0xC9, 0xF8, 0x45, 0x1B, 0x90, 0x76, 0x07, 0x1B, 0x34, 0x62, 0x34, 0x31, 0xD2, 0xA4, 0xD9, 0x83, 0x59, 0x8C, 0xDF, + 0x58, 0xE6, 0x0B, 0xBE, 0xCE, 0xA5, 0xA8, 0xF5, 0x05, 0x0C, 0x53, 0x4A, 0xEC, 0xDA, 0x60, 0x0C, 0xD2, 0x1C, 0xF2, 0x7B, 0xE9, + 0x4A, 0x87, 0x3B, 0x73, 0x4D, 0x64, 0xE5, 0xFD, 0xEB, 0x6D, 0xC4, 0x70, 0xDA, 0x59, 0x90, 0xAC, 0x96, 0xD0, 0x4C, 0x70, 0x29, + 0x87, 0x4B, 0xAB, 0x47, 0xBD, 0x4B, 0xD7, 0x76, 0x21, 0x39, 0x9B, 0xC9, 0xF2, 0x18, 0x6F, 0x5E, 0xBC, 0x95, 0x21, 0x1B, 0x4C, + 0x2C, 0xDA, 0xDB, 0x38, 0xD7, 0x9E, 0xA8, 0x09, 0x55, 0xF0, 0x3E, 0x6C, 0xBD, 0x56, 0xE3, 0xEA, 0x2D, 0x1C, 0x4D, 0x6C, 0x1D, + 0x0D, 0xA8, 0x55, 0x87, 0x41, 0x34, 0x6A, 0x6B, 0xF2, 0x19, 0xCB, 0x90, 0x96, 0x0B, 0xAE, 0x2B, 0xDA, 0x6A, 0x7D, 0xEC, 0x52, + 0x25, 0x11, 0x3A, 0xE9, 0x51, 0x6E, 0x1A, 0x7C, 0xD0, 0xD9, 0xA4, 0x45, 0x72, 0x93, 0xB2, 0x85, 0x98, 0xF1, 0x04, 0x75, 0xE6, + 0x2F, 0xD4, 0xBB, 0xEC, 0x6A, 0x6E, 0x91, 0x3B, 0x4A, 0xCE, 0xCA, 0xE7, 0x16, 0x9B, 0x05, 0xE1, 0xAE, 0x60, 0xB0, 0x29, 0x61, + 0x5B, 0x18, 0x37, 0x95, 0x0F, 0xAA, 0xA9, 0xBE, 0xDE, 0x4E, 0x64, 0x7D, 0xC8, 0xD8, 0x5F, 0xC5, 0x26, 0x27, 0xAC, 0x42, 0x37, + 0xF5, 0xE4, 0x68, 0x30, 0x0E, 0x3B, 0xF6, 0x8D, 0xBB, 0x24, 0xBF, 0xAA, 0x2D, 0x76, 0x46, 0xBA, 0xB2, 0xDC, 0x91, 0x81, 0xFB, + 0x7C, 0x39, 0xCD, 0x38, 0xBC, 0x89, 0x57, 0xE6, 0xC2, 0x22, 0xD8, 0xB8, 0x43, 0xEC, 0x1B, 0x37, 0x75, 0x6E, 0xBF, 0x2C, 0x8F, + 0xA3, 0x57, 0x58, 0xD6, 0xEF, 0xBF, 0x9B, 0x25, 0xC5, 0xD3, 0x0A, 0x84, 0xF3, 0xB0, 0x2B, 0xA1, 0x81, 0xE6, 0xE4, 0xB8, 0x17, + 0xDA, 0x68, 0xE2, 0xD5, 0xF1, 0xD3, 0xB0, 0x2D, 0x62, 0x19, 0xB1, 0x47, 0xB9, 0x49, 0x59, 0xB1, 0x51, 0x2C, 0x29, 0x8F, 0x02, + 0x74, 0xD1, 0x5D, 0xF3, 0x96, 0xE5, 0x66, 0x76, 0x7B, 0x38, 0x1D, 0xDE, 0x60, 0x47, 0x84, 0x65, 0x1D, 0x94, 0x4E, 0x11, 0x71, + 0x1C, 0xB2, 0x89, 0x21, 0x11, 0x72, 0x61, 0x12, 0x60, 0x99, 0x8D, 0xEF, 0xF8, 0xD0, 0x72, 0x82, 0x63, 0x2C, 0xEA, 0xEA, 0xA2, + 0xEA, 0x54, 0x02, 0xCA, 0x85, 0x99, 0x63, 0xD5, 0x67, 0xCF, 0x5C, 0xF5, 0x1C, 0xB4, 0xF7, 0x45, 0x96, 0x82, 0xAC, 0x95, 0x14, + 0xDF, 0x27, 0x69, 0x52, 0x32, 0x6C, 0x3D, 0x98, 0x08, 0x0C, 0xE2, 0xB7, 0x04, 0x2B, 0x69, 0x5C, 0x9D, 0xD9, 0xDF, 0x59, 0x9D, + 0xA6, 0x42, 0xEF, 0x5A, 0x13, 0x1C, 0x48, 0xB4, 0xC2, 0x19, 0xF8, 0x73, 0x83, 0x27, 0x48, 0xC7, 0x6B, 0xAA, 0xA5, 0x57, 0xBC, + 0x79, 0x52, 0xC4, 0x33, 0x45, 0x98, 0x04, 0x6C, 0x50, 0xD7, 0xE3, 0x4B, 0x65, 0x52, 0x5F, 0x5F, 0x77, 0xC6, 0xFA, 0xBA, 0x6B, + 0x5C, 0x5F, 0x16, 0xE6, 0xC2, 0x4C, 0xAF, 0xB2, 0x2A, 0x45, 0xCA, 0x75, 0x26, 0xC0, 0xE6, 0xF1, 0x6B, 0x6D, 0xB0, 0xC5, 0x9A, + 0x11, 0x7E, 0xAF, 0x48, 0x01, 0xBC, 0x67, 0xB1, 0x3E, 0xC6, 0xBA, 0x16, 0x7F, 0xCA, 0xC0, 0x19, 0x9E, 0xDB, 0x18, 0xA4, 0x05, + 0x5A, 0x52, 0x0D, 0x3B, 0x2A, 0x40, 0x91, 0x85, 0xCC, 0x45, 0x91, 0x34, 0x79, 0x97, 0xCA, 0xFB, 0xC5, 0xE6, 0x75, 0x22, 0x3B, + 0xBA, 0xCC, 0xC2, 0xB4, 0xE8, 0xE8, 0x56, 0xC4, 0xB9, 0xC9, 0xC2, 0x5C, 0x3A, 0xEA, 0xAC, 0xC3, 0x50, 0x8D, 0x5A, 0x0B, 0x71, + 0x02, 0x2B, 0x83, 0x14, 0x49, 0x67, 0x3C, 0x1D, 0x7F, 0xC2, 0x3E, 0x26, 0x09, 0x2E, 0x73, 0xAE, 0x82, 0x55, 0xCF, 0x4F, 0xB4, + 0xB4, 0xC1, 0xED, 0x08, 0xA5, 0x65, 0x46, 0xE0, 0x47, 0x11, 0xE5, 0x34, 0xB1, 0x4F, 0x1F, 0x1C, 0x87, 0x09, 0xB1, 0x19, 0x2B, + 0x46, 0x88, 0x32, 0xF3, 0x60, 0xAF, 0x08, 0x30, 0x6F, 0x12, 0x01, 0xE2, 0x43, 0x44, 0x00, 0x3C, 0x7E, 0x98, 0x37, 0x87, 0x97, + 0x59, 0xEC, 0x89, 0x2F, 0x33, 0x47, 0xD3, 0x48, 0x1E, 0xC6, 0xC8, 0xEF, 0xD1, 0x40, 0x53, 0x18, 0x16, 0x1A, 0x11, 0x5C, 0xC4, + 0xB4, 0x5D, 0x57, 0xC7, 0xE4, 0x30, 0xD7, 0x2C, 0xB8, 0xC8, 0x79, 0xE0, 0x88, 0xC8, 0xB8, 0x50, 0x1B, 0x10, 0x1A, 0xC0, 0xCD, + 0x01, 0x71, 0xE0, 0x17, 0x35, 0xC3, 0x4E, 0x05, 0xFA, 0xA4, 0x02, 0xB9, 0xDF, 0x7C, 0x34, 0x94, 0x6E, 0xB7, 0x6A, 0x2C, 0xE2, + 0x9E, 0x70, 0xA5, 0x3D, 0x3C, 0x01, 0xDA, 0x5F, 0x7B, 0xE7, 0xB9, 0x82, 0x9D, 0xA0, 0xE5, 0x34, 0x4C, 0x5C, 0x6E, 0xD2, 0xCE, + 0xC5, 0xF0, 0x74, 0x4C, 0x24, 0x27, 0x71, 0xEB, 0x05, 0xA4, 0x17, 0x82, 0x65, 0x99, 0xAC, 0x47, 0x70, 0xCA, 0xCC, 0x75, 0x26, + 0xC1, 0x93, 0xA7, 0x93, 0x19, 0xAD, 0xA8, 0x8C, 0xAC, 0x9B, 0x7C, 0x75, 0x2C, 0xE8, 0x1B, 0xE8, 0x66, 0x3A, 0x0B, 0x71, 0x46, + 0x80, 0xD6, 0xE1, 0x9F, 0x0D, 0xCC, 0xC4, 0xC6, 0x5C, 0x19, 0x9B, 0xA0, 0x9C, 0x6E, 0x66, 0xC2, 0x78, 0x85, 0xBE, 0x67, 0xF8, + 0xCB, 0xBC, 0xB5, 0x21, 0x48, 0x27, 0x19, 0x53, 0x0E, 0xAE, 0x8C, 0x62, 0x3C, 0x0F, 0xC4, 0xB1, 0x00, 0x24, 0xF1, 0x87, 0x80, + 0x55, 0x58, 0x1F, 0xBA, 0xA4, 0x4F, 0x30, 0x65, 0xDC, 0x13, 0xAF, 0xD8, 0x6E, 0x33, 0x75, 0x96, 0x45, 0xF6, 0x45, 0x0E, 0x43, + 0x62, 0xC2, 0x90, 0x73, 0xCE, 0x84, 0x74, 0x63, 0x2C, 0xC8, 0x04, 0x7B, 0x94, 0x97, 0xCA, 0xB9, 0x38, 0x0E, 0xED, 0x16, 0xCE, + 0xBE, 0xC4, 0x9B, 0xD3, 0x0D, 0x9D, 0x15, 0x8E, 0xCE, 0x70, 0xD5, 0x19, 0x9D, 0x15, 0xCE, 0xCE, 0xE6, 0xCE, 0xCE, 0x1C, 0x3D, + 0xCC, 0xCD, 0x1E, 0xC4, 0x59, 0xC0, 0x1C, 0x9A, 0x0C, 0x17, 0x26, 0x8B, 0x59, 0x6A, 0xE3, 0xF0, 0x72, 0x8F, 0x2A, 0x95, 0x37, + 0x08, 0x18, 0xA0, 0xCF, 0xA0, 0xF0, 0xBA, 0x08, 0x97, 0x2E, 0x65, 0x8A, 0xEE, 0x0A, 0x2E, 0x4D, 0xB5, 0x68, 0x16, 0x5A, 0x3F, + 0xB5, 0xCD, 0x76, 0x49, 0x9B, 0x61, 0x90, 0x57, 0xA4, 0x68, 0x65, 0xDD, 0x4A, 0x6D, 0xE9, 0xD3, 0x7F, 0x91, 0x84, 0xF8, 0xFF, + 0xF7, 0x74, 0x48, 0x61, 0xB4, 0x88, 0xDB, 0x65, 0x25, 0x05, 0x37, 0xCD, 0x4A, 0x92, 0x94, 0xBC, 0x9B, 0x76, 0xF0, 0x54, 0xED, + 0xD7, 0xBE, 0x6B, 0x9F, 0xD6, 0xBB, 0x6F, 0x30, 0x4E, 0xB9, 0x71, 0x76, 0xB7, 0x57, 0x22, 0x40, 0x34, 0x25, 0x1C, 0x4D, 0x26, + 0x18, 0xBA, 0x93, 0x5A, 0x86, 0x6C, 0xDF, 0xC4, 0x10, 0xED, 0xBC, 0x7C, 0x2A, 0x6F, 0x23, 0x6F, 0xEA, 0xB5, 0xF7, 0x6C, 0xBE, + 0x36, 0x9A, 0x3B, 0xEF, 0xB3, 0x24, 0xF5, 0x61, 0xC9, 0x06, 0x6D, 0x6F, 0xE6, 0x5D, 0x4A, 0xAA, 0xB1, 0x05, 0x80, 0x60, 0x21, + 0x94, 0xCF, 0x45, 0x28, 0x64, 0x15, 0xDC, 0x3B, 0xBF, 0xB9, 0x8D, 0xF3, 0x6F, 0x60, 0xD9, 0x8B, 0xE0, 0x7B, 0x3C, 0xA7, 0x32, + 0x8B, 0x42, 0x20, 0x7A, 0x94, 0xE3, 0xC7, 0xED, 0x7C, 0x11, 0xDE, 0x06, 0x66, 0x37, 0xF2, 0x19, 0x4C, 0xEA, 0xA5, 0x22, 0xAD, + 0x73, 0xA9, 0x78, 0xC1, 0x11, 0xA9, 0x1E, 0x69, 0x17, 0x6D, 0xBD, 0xAF, 0xE1, 0x0D, 0x78, 0x24, 0x2F, 0x87, 0x98, 0x58, 0xA1, + 0x30, 0xCA, 0xC3, 0x03, 0xD4, 0x18, 0xC9, 0xE3, 0x32, 0x42, 0x86, 0x70, 0xC9, 0xCF, 0x59, 0x1A, 0xC2, 0xBB, 0x2D, 0x83, 0x4B, + 0xE7, 0x8A, 0x58, 0xF2, 0x4D, 0x77, 0x05, 0x2C, 0x08, 0xFA, 0xE8, 0x86, 0x62, 0x8F, 0xFF, 0x50, 0xF4, 0x3D, 0x1E, 0x28, 0x0B, + 0xE3, 0xF9, 0xA1, 0x35, 0xCB, 0x87, 0x24, 0x6B, 0x7B, 0xBC, 0x23, 0xED, 0x4E, 0x87, 0x15, 0xE3, 0x03, 0x93, 0x2B, 0x7C, 0x61, + 0x6C, 0x43, 0xEF, 0x01, 0xE6, 0xF7, 0xB0, 0x87, 0xF6, 0x35, 0xD4, 0xEF, 0xC5, 0x89, 0x47, 0x1E, 0x2E, 0xC3, 0x75, 0xB8, 0xA0, + 0x2D, 0xB4, 0x3F, 0x7D, 0xAF, 0xF6, 0xD0, 0x60, 0xBC, 0xAC, 0x6D, 0x9F, 0x04, 0xC6, 0x9D, 0x15, 0xCA, 0x4C, 0xF7, 0x89, 0x2C, + 0xAC, 0xDE, 0xE7, 0x9D, 0xB9, 0xF5, 0xBD, 0xA7, 0x1A, 0x76, 0xAF, 0xEF, 0x75, 0x87, 0xBA, 0x97, 0xA7, 0xCE, 0x8A, 0x16, 0xF2, + 0xC4, 0x50, 0x37, 0x85, 0xA4, 0x2D, 0x43, 0xED, 0x2A, 0xD6, 0xC8, 0x63, 0x43, 0x28, 0x72, 0x79, 0x6F, 0xF1, 0xBD, 0xA5, 0x75, + 0x40, 0x22, 0x5B, 0x94, 0xB1, 0xC9, 0xEA, 0xFB, 0x23, 0x6C, 0xF2, 0xCF, 0x31, 0x32, 0xF5, 0x7A, 0xC0, 0xED, 0xA6, 0x5E, 0xE7, + 0x26, 0xCB, 0x6E, 0x56, 0x22, 0xF6, 0x09, 0x3E, 0x90, 0xF0, 0x55, 0xFA, 0xE0, 0xCD, 0xA2, 0x47, 0x2D, 0x2F, 0x56, 0x9F, 0xCF, + 0x62, 0xC7, 0xC7, 0x6C, 0xEA, 0xFD, 0x4F, 0xF2, 0xD4, 0x9A, 0xA9, 0xAD, 0x57, 0xA5, 0xE0, 0xAB, 0x35, 0x85, 0x78, 0x4C, 0x50, + 0x27, 0xAE, 0xE2, 0xA2, 0xFC, 0x41, 0x50, 0x9A, 0x77, 0x0A, 0xEB, 0x8F, 0x42, 0x60, 0x92, 0x88, 0x28, 0x5E, 0xF3, 0x2E, 0x89, + 0xF9, 0x8A, 0xE3, 0xDA, 0x24, 0xF2, 0x3A, 0x1E, 0x5E, 0xB9, 0xD5, 0x2D, 0xCC, 0x61, 0x01, 0x7E, 0x55, 0xFA, 0xDD, 0x60, 0x52, + 0xEB, 0xCB, 0xEF, 0x81, 0xFA, 0xA6, 0x12, 0x85, 0x5F, 0xD9, 0x09, 0x9D, 0x28, 0x29, 0xF2, 0xC6, 0x4E, 0xE9, 0x11, 0x79, 0xF8, + 0x00, 0x19, 0x47, 0x38, 0xD4, 0x71, 0xBF, 0x20, 0xBA, 0x1B, 0xF8, 0x6E, 0x93, 0xAF, 0xC6, 0x09, 0x77, 0xD6, 0x19, 0xE7, 0x52, + 0xF2, 0xCF, 0xED, 0x1B, 0x5B, 0x81, 0x78, 0x71, 0xCE, 0xA7, 0x88, 0xBB, 0xD6, 0xD5, 0x78, 0xFB, 0x62, 0x97, 0x14, 0x03, 0xC6, + 0xAE, 0x2B, 0x06, 0xA8, 0x91, 0xC0, 0x3F, 0x74, 0xAF, 0x00, 0xBD, 0xDC, 0xB9, 0x4A, 0xC8, 0x3A, 0x12, 0x0C, 0xFC, 0x26, 0x38, + 0xE8, 0xBD, 0x00, 0x95, 0x6C, 0x62, 0x56, 0x27, 0xBA, 0x31, 0xEB, 0xAC, 0x85, 0x6F, 0x51, 0xEC, 0xAB, 0x77, 0x29, 0x0C, 0x82, + 0xC6, 0xAC, 0x80, 0xAA, 0x82, 0x31, 0x45, 0x99, 0xB8, 0xA1, 0x82, 0xB7, 0xE8, 0x04, 0x68, 0xB4, 0x0B, 0x57, 0x02, 0x78, 0x6B, + 0x35, 0x02, 0x86, 0x50, 0x31, 0x42, 0xF2, 0xE3, 0x21, 0xE6, 0x8A, 0x33, 0x2B, 0x66, 0xCC, 0xC3, 0x19, 0xE7, 0xF7, 0x61, 0x3C, + 0xEE, 0xFF, 0x4E, 0xA4, 0x19, 0xAF, 0xB9, 0xF3, 0xDC, 0x29, 0x09, 0x4D, 0x79, 0xDB, 0x17, 0xA4, 0x21, 0x63, 0xDD, 0x0A, 0xA1, + 0x77, 0xDA, 0x9D, 0x4D, 0xAA, 0x69, 0x26, 0x7D, 0x54, 0xB2, 0x40, 0x20, 0x55, 0x14, 0x13, 0x25, 0x61, 0x61, 0x4D, 0xA6, 0x7D, + 0xBF, 0xEE, 0xF0, 0x13, 0xF6, 0x85, 0x7D, 0x89, 0x66, 0xF1, 0x09, 0x5E, 0xBF, 0x0B, 0xCB, 0xEB, 0xF7, 0x75, 0x96, 0x89, 0x65, + 0x9B, 0x72, 0xEF, 0x5E, 0x1E, 0x6E, 0x6E, 0xCE, 0x8D, 0xC4, 0x1B, 0x11, 0x84, 0x6E, 0x59, 0x31, 0x16, 0x2F, 0x78, 0xF0, 0x70, + 0xED, 0xF8, 0x0A, 0x04, 0xC7, 0xD4, 0x5D, 0x48, 0xD8, 0x69, 0x72, 0xB6, 0x88, 0xF4, 0x3B, 0x00, 0x2B, 0x86, 0xDC, 0x51, 0x9B, + 0x5F, 0xF0, 0x79, 0xB9, 0xDD, 0xE2, 0x09, 0x0F, 0xD3, 0x12, 0x45, 0x52, 0x12, 0x46, 0x16, 0x18, 0x8E, 0x4A, 0x78, 0x3D, 0x22, + 0x35, 0x17, 0xAC, 0x14, 0x01, 0x7F, 0x7D, 0x95, 0x8E, 0x41, 0x55, 0xE4, 0x4D, 0x16, 0x26, 0x6F, 0xB2, 0xD4, 0x1E, 0xCE, 0x44, + 0xB9, 0xE9, 0xD7, 0xB8, 0xBC, 0x8D, 0x90, 0xF5, 0x95, 0xB7, 0x32, 0xC9, 0x7E, 0xF1, 0x91, 0x95, 0x73, 0x2C, 0x40, 0x7F, 0xED, + 0x77, 0x2A, 0xB3, 0x58, 0xDF, 0x44, 0x68, 0xD1, 0x0B, 0x30, 0x68, 0x41, 0x72, 0x5D, 0xD1, 0x22, 0x46, 0x90, 0xC3, 0x32, 0x11, + 0xEE, 0xCE, 0xC2, 0xAB, 0x5A, 0xDE, 0x32, 0x3B, 0x4A, 0xA4, 0x36, 0xB0, 0xEC, 0xC4, 0x85, 0x0C, 0x09, 0xCC, 0xC2, 0x94, 0x26, + 0xFF, 0x92, 0x2B, 0xAC, 0x09, 0xC6, 0x72, 0xAC, 0xBC, 0xDA, 0xCE, 0x2F, 0x29, 0xCA, 0x65, 0x9E, 0x90, 0x00, 0xCE, 0xFD, 0x77, + 0x63, 0xE1, 0xB9, 0xCC, 0x40, 0xE8, 0xE0, 0x44, 0xA5, 0x6A, 0x6E, 0xAC, 0x77, 0x5B, 0xCD, 0x55, 0xC9, 0xE9, 0xFF, 0x54, 0xB2, + 0xE6, 0x53, 0xAE, 0x8F, 0x97, 0xAF, 0x4E, 0x7A, 0x3A, 0xAE, 0xBB, 0x5E, 0xDD, 0x82, 0x81, 0xE2, 0x1D, 0x8A, 0x42, 0xA9, 0xEA, + 0x56, 0xA8, 0x5C, 0x93, 0x40, 0xE8, 0x6D, 0xF3, 0xFC, 0xE1, 0x91, 0x24, 0x2A, 0xC3, 0xBD, 0xFB, 0xF8, 0xD8, 0x7B, 0xF4, 0xC8, + 0x8A, 0xAF, 0x18, 0x2E, 0x3E, 0xD4, 0x19, 0xD1, 0x5D, 0x21, 0x32, 0xB6, 0xA2, 0x0F, 0x78, 0x68, 0xD5, 0xC1, 0x9B, 0x69, 0x48, + 0x46, 0xB8, 0x41, 0x45, 0x4C, 0xBC, 0x57, 0x09, 0xE2, 0x9F, 0x8F, 0x37, 0x34, 0x73, 0x0C, 0x7F, 0x48, 0x4F, 0x13, 0x16, 0x9D, + 0xE4, 0x8E, 0xD6, 0x09, 0xDD, 0xA1, 0xBA, 0x5C, 0x5C, 0xA9, 0x04, 0xBD, 0x05, 0xC3, 0x0E, 0x9D, 0x44, 0x1B, 0x5D, 0x74, 0xBA, + 0x98, 0x05, 0xF8, 0xFC, 0x99, 0x41, 0x1D, 0x00, 0xBB, 0x95, 0x0D, 0xF0, 0xAD, 0x90, 0x4F, 0x51, 0x0F, 0xF7, 0x2C, 0xFE, 0xF0, + 0x83, 0xD1, 0x0B, 0x76, 0x8D, 0x1D, 0x19, 0xE9, 0x8E, 0xCE, 0x8C, 0xDC, 0xA6, 0x0E, 0x2B, 0x45, 0x78, 0xA7, 0x18, 0x5C, 0x8D, + 0x4B, 0x69, 0xA9, 0x49, 0xF6, 0xFA, 0xEA, 0x58, 0xFD, 0xFA, 0x96, 0x8E, 0x62, 0x8C, 0x57, 0xD5, 0x76, 0xF1, 0x76, 0xBB, 0xDE, + 0x6E, 0xE7, 0x3C, 0xC4, 0x73, 0x5A, 0x7F, 0xD9, 0x8E, 0x78, 0x6C, 0xCA, 0x17, 0xA9, 0xF1, 0xB8, 0x01, 0x92, 0x40, 0x40, 0x3E, + 0xFE, 0x3C, 0x47, 0x3D, 0xC7, 0xC0, 0x67, 0x3F, 0x9E, 0xE0, 0x0C, 0xE3, 0x85, 0x22, 0x90, 0x5A, 0xDA, 0xED, 0x35, 0x46, 0x49, + 0x7B, 0x9B, 0xDC, 0xB1, 0x6C, 0x53, 0x1A, 0x5E, 0xAB, 0xC1, 0xE3, 0xC9, 0x09, 0x48, 0x26, 0xB2, 0xE4, 0x2E, 0x30, 0xA4, 0x6C, + 0x71, 0xB7, 0x23, 0xA7, 0x88, 0xD3, 0x39, 0xAE, 0x37, 0xFE, 0xA2, 0xD1, 0xF7, 0xD0, 0xDD, 0x9B, 0x87, 0x14, 0x61, 0xD7, 0x62, + 0xBB, 0x87, 0x6F, 0x90, 0x7A, 0xC6, 0xD0, 0x04, 0xD1, 0xE1, 0xEA, 0xC2, 0x30, 0xD5, 0x73, 0x0A, 0x46, 0xBD, 0xE0, 0x0F, 0x1F, + 0x63, 0x0F, 0x08, 0x52, 0xCA, 0x97, 0x30, 0x24, 0x6A, 0x88, 0xF2, 0x30, 0xE3, 0x40, 0x25, 0xB8, 0x0B, 0x4C, 0xCA, 0x89, 0x89, + 0x9B, 0xF1, 0x1C, 0xA4, 0x83, 0x31, 0xB6, 0x92, 0x05, 0x08, 0xEC, 0x8E, 0x8B, 0xB3, 0xDD, 0xCB, 0x0A, 0xFD, 0x02, 0xB1, 0xD2, + 0xF3, 0x06, 0x52, 0xD0, 0x7B, 0x08, 0x3F, 0x42, 0xA1, 0x8F, 0xA6, 0x48, 0xFC, 0x31, 0xF0, 0x1F, 0x22, 0x7B, 0x8E, 0x81, 0x45, + 0x96, 0xD3, 0x8F, 0x62, 0x62, 0x1F, 0x88, 0x9A, 0x62, 0xF5, 0x30, 0xE8, 0xA5, 0x35, 0x47, 0x35, 0xAE, 0x83, 0x08, 0xA9, 0x70, + 0x49, 0x9C, 0x37, 0x84, 0xEB, 0x67, 0xD8, 0x32, 0x2B, 0x81, 0x58, 0xB2, 0xB2, 0x55, 0x6C, 0xD6, 0x48, 0x49, 0xCC, 0x78, 0xAE, + 0x43, 0x6C, 0xBA, 0xF4, 0x66, 0x54, 0x19, 0xDE, 0xBA, 0x99, 0x63, 0xE5, 0xAE, 0x97, 0xBC, 0x8D, 0x24, 0x79, 0xBA, 0x94, 0x7B, + 0xAD, 0xFE, 0x36, 0x29, 0xAF, 0x1C, 0x5F, 0xAF, 0x58, 0xCB, 0x88, 0xAE, 0x24, 0x2F, 0xC3, 0xAA, 0xCA, 0x20, 0xE6, 0xBB, 0x5C, + 0x9A, 0xBD, 0x2F, 0xF8, 0xA5, 0x5F, 0x8A, 0x46, 0xC3, 0x3F, 0xD5, 0x4D, 0x2D, 0x15, 0x1A, 0x46, 0xEE, 0xAA, 0xE8, 0xF9, 0x2C, + 0x74, 0xAC, 0x96, 0x17, 0x3C, 0x23, 0x04, 0xD1, 0x25, 0xD7, 0x61, 0x4E, 0xFF, 0x98, 0x7E, 0x75, 0xF2, 0x7F, 0x66, 0xA7, 0x9A, + 0xAF, 0xAE, 0x4D, 0xC1, 0xA9, 0xB4, 0xFD, 0xD2, 0xFD, 0x52, 0x46, 0x64, 0xB1, 0x44, 0x47, 0x7E, 0x83, 0xB3, 0x34, 0xC2, 0x65, + 0xF0, 0x9B, 0xD7, 0xF2, 0x2A, 0x04, 0xC6, 0x40, 0x97, 0x77, 0x32, 0x8C, 0xF8, 0x73, 0x12, 0x54, 0x3B, 0xA8, 0x15, 0xBE, 0xD3, + 0xA3, 0x83, 0x52, 0xF1, 0xA4, 0x24, 0xE4, 0x17, 0x3A, 0x41, 0x8C, 0x3C, 0xEA, 0x0A, 0x0E, 0x7B, 0xD4, 0xDB, 0x99, 0x13, 0xF6, + 0xEE, 0x36, 0x4E, 0x17, 0x2B, 0x56, 0x7B, 0xD1, 0xA3, 0x72, 0xA5, 0x2C, 0x0E, 0x6A, 0xD1, 0x65, 0xF0, 0x85, 0x1C, 0xBB, 0x3F, + 0x60, 0x11, 0x28, 0xBA, 0x05, 0x22, 0x6C, 0x8B, 0x9A, 0x30, 0xB1, 0xE8, 0xD5, 0x9A, 0xB5, 0x5A, 0x9E, 0x07, 0x2B, 0x7E, 0x50, + 0x2D, 0xEE, 0xE0, 0xA1, 0x10, 0x27, 0xB0, 0xA7, 0xAF, 0xCD, 0x49, 0x97, 0x1C, 0xD5, 0x44, 0x45, 0x9E, 0xDB, 0x04, 0xAE, 0x5B, + 0x70, 0x8E, 0x77, 0x47, 0x2A, 0x14, 0x78, 0x19, 0x20, 0xC4, 0x56, 0x0E, 0x2E, 0xC9, 0x89, 0x5D, 0xD6, 0x78, 0x1C, 0x65, 0xDC, + 0x6E, 0x97, 0x35, 0xDF, 0x75, 0xCE, 0x31, 0x1B, 0xA2, 0x52, 0x2A, 0xFC, 0xC2, 0xB0, 0xDE, 0x19, 0x25, 0xF1, 0xD1, 0x90, 0xCB, + 0x03, 0x86, 0x8E, 0xBA, 0x92, 0x63, 0xC2, 0x1C, 0xAF, 0x98, 0xD4, 0xE7, 0xEC, 0x51, 0xDD, 0x44, 0x3F, 0x32, 0xA2, 0x02, 0xD1, + 0x23, 0x49, 0xF6, 0xCC, 0x05, 0xD5, 0x84, 0x6A, 0x28, 0xA5, 0x6A, 0xF9, 0xB0, 0x9A, 0x42, 0xD2, 0x83, 0x3E, 0x72, 0x12, 0xD1, + 0x43, 0x14, 0x0A, 0x8D, 0xE7, 0x6E, 0x4A, 0xFD, 0xF6, 0x8C, 0x0B, 0xC3, 0xBB, 0xDD, 0x81, 0x64, 0xA2, 0x42, 0xE7, 0xDA, 0x18, + 0x73, 0x53, 0x59, 0xA2, 0xEF, 0x11, 0x3E, 0x63, 0xD6, 0x5E, 0xCB, 0xD1, 0x3F, 0x39, 0x71, 0x0D, 0xC0, 0xEC, 0x1A, 0x1F, 0xDE, + 0xE6, 0xE2, 0x79, 0x1A, 0xC1, 0x26, 0x01, 0x2B, 0xB7, 0x88, 0xF2, 0xC3, 0x54, 0x62, 0x2D, 0xC2, 0x83, 0x60, 0x7D, 0x8E, 0xB7, + 0xC6, 0xAE, 0x37, 0x09, 0x60, 0xDF, 0x5B, 0x25, 0x37, 0xB7, 0x25, 0x5E, 0x5E, 0xB6, 0xA4, 0xCB, 0x27, 0x83, 0x00, 0x94, 0x13, + 0xF1, 0xC2, 0x17, 0x3D, 0xE5, 0xDC, 0x41, 0x31, 0x3E, 0x18, 0x6B, 0x91, 0x59, 0xA4, 0x84, 0xA5, 0xE4, 0xF8, 0x39, 0x99, 0xB6, + 0x1B, 0xF6, 0x92, 0x9A, 0xC4, 0x6D, 0x57, 0x17, 0xDB, 0x31, 0x36, 0xC0, 0x95, 0xD6, 0x5C, 0xC4, 0x97, 0x4E, 0x84, 0xCA, 0x96, + 0x8B, 0x38, 0xD3, 0x09, 0xF7, 0x87, 0x4B, 0x78, 0x42, 0x9F, 0x9E, 0x1D, 0xCB, 0x52, 0x48, 0x2B, 0x79, 0xCA, 0x00, 0x53, 0x5E, + 0xB3, 0xE5, 0x8A, 0x51, 0xE7, 0xC2, 0xCC, 0x8E, 0x37, 0x18, 0x21, 0x9D, 0x5E, 0x17, 0x5B, 0xC7, 0xF4, 0x62, 0xC2, 0x88, 0x0A, + 0x02, 0x08, 0x58, 0x8B, 0x7E, 0x60, 0xD4, 0x02, 0xAE, 0x93, 0x24, 0x1D, 0x7E, 0x83, 0xCE, 0xEF, 0x9D, 0xE3, 0x0F, 0x4E, 0xC4, + 0xA4, 0xB4, 0x24, 0x1D, 0x7A, 0x37, 0x4D, 0xE8, 0x2C, 0x49, 0x47, 0xC6, 0x00, 0x11, 0xA1, 0xB3, 0x13, 0xE3, 0x49, 0x06, 0x0C, + 0xA1, 0x0D, 0x05, 0xE8, 0xCA, 0xA3, 0x88, 0x1C, 0x80, 0x3F, 0x79, 0x70, 0x31, 0x1E, 0x59, 0x3B, 0xE9, 0xDC, 0xE7, 0xF1, 0x7A, + 0xCD, 0xF2, 0x82, 0x47, 0xCB, 0xC6, 0x93, 0x01, 0x3C, 0xBA, 0xE5, 0xEE, 0xD4, 0x49, 0x07, 0x4D, 0x6B, 0x3C, 0xD8, 0x40, 0x7D, + 0x4C, 0xE6, 0x93, 0x7B, 0x12, 0x97, 0xC6, 0x08, 0xED, 0x6C, 0xBA, 0x08, 0xA6, 0x80, 0x13, 0x63, 0x95, 0x08, 0xA8, 0x17, 0x55, + 0x83, 0x76, 0x64, 0x1D, 0x66, 0x9D, 0x31, 0x9F, 0xE4, 0x41, 0x35, 0x8E, 0x8C, 0x84, 0xE6, 0x23, 0x81, 0xD0, 0x83, 0x78, 0x11, + 0xC2, 0xEA, 0x82, 0x1B, 0x11, 0x79, 0x0E, 0x1F, 0x35, 0xDD, 0x7D, 0x72, 0x94, 0x11, 0x77, 0xA4, 0x76, 0x8A, 0xCA, 0xEF, 0x92, + 0x34, 0xB9, 0x8B, 0x57, 0x9E, 0x6A, 0x99, 0xC7, 0x2B, 0xB7, 0xDB, 0x44, 0x4A, 0x18, 0xE9, 0x86, 0x79, 0x64, 0x73, 0xBB, 0x49, + 0x2C, 0x62, 0x62, 0x9F, 0xE6, 0x29, 0x5F, 0xCF, 0x79, 0xB8, 0x07, 0xFC, 0x06, 0x9C, 0x51, 0xF0, 0x87, 0x91, 0xA0, 0x3E, 0xB1, + 0x80, 0xD3, 0x30, 0xF5, 0x2B, 0xE8, 0x91, 0x02, 0x68, 0xDE, 0x70, 0x25, 0x6E, 0xE7, 0x07, 0x42, 0x38, 0xCD, 0x41, 0x5E, 0x87, + 0x55, 0xF1, 0xBD, 0x2C, 0x66, 0xDE, 0x08, 0xF6, 0x02, 0xDF, 0x90, 0x4B, 0x6B, 0xD1, 0x37, 0xEE, 0x81, 0x81, 0x66, 0xF7, 0x64, + 0x72, 0xE0, 0x9F, 0x20, 0x9F, 0x6A, 0x56, 0x70, 0xE0, 0x7C, 0xC9, 0x03, 0x13, 0xE7, 0x89, 0x94, 0x60, 0x81, 0x74, 0xD4, 0x24, + 0xE5, 0xC9, 0xAE, 0xB5, 0xD5, 0x9D, 0x9C, 0x94, 0x2F, 0x86, 0xAF, 0x80, 0x77, 0x7B, 0x11, 0xB7, 0x6B, 0x08, 0xC5, 0x0B, 0xF4, + 0xB9, 0x00, 0x38, 0xA7, 0x14, 0x4C, 0x7E, 0x42, 0x8D, 0x78, 0xCE, 0x92, 0x95, 0x3F, 0xF8, 0x52, 0x3D, 0x29, 0x7A, 0x3A, 0x3C, + 0xC9, 0x75, 0x6C, 0xF1, 0xD4, 0x78, 0x73, 0xE6, 0x8C, 0x5E, 0x25, 0xD4, 0xBF, 0x7B, 0xB8, 0xBC, 0x0B, 0xE8, 0xAE, 0xB8, 0x3A, + 0x1B, 0x5E, 0x06, 0xD9, 0x34, 0x9D, 0x16, 0xB3, 0xA8, 0xB8, 0xEA, 0x9F, 0x4D, 0x8A, 0xF6, 0xD9, 0x68, 0x5C, 0x5C, 0x8D, 0xFA, + 0xF0, 0x75, 0xDE, 0x83, 0xAF, 0x33, 0xF8, 0x3A, 0x19, 0x8E, 0x8B, 0x93, 0xD1, 0xCB, 0xED, 0x70, 0x00, 0xA5, 0xDA, 0xED, 0xCB, + 0xC4, 0x15, 0x6F, 0xCA, 0xBE, 0x47, 0x9E, 0x71, 0x55, 0x97, 0xCE, 0xB4, 0xE2, 0xA8, 0x4B, 0x4F, 0x8E, 0x94, 0x57, 0xF9, 0xA5, + 0xF2, 0xD6, 0xE7, 0x4F, 0x66, 0x09, 0x8F, 0x89, 0xB9, 0x7A, 0x23, 0xB4, 0x98, 0xC6, 0xF8, 0xF4, 0x4D, 0x3A, 0xDD, 0xBC, 0x7A, + 0xD5, 0xC7, 0xD0, 0xE6, 0xFE, 0xE0, 0x78, 0x13, 0x5C, 0x5D, 0x0D, 0xA1, 0x85, 0x9E, 0xFD, 0x6A, 0xA8, 0x2A, 0x9A, 0x6C, 0xA1, + 0xF0, 0x90, 0x0A, 0xF7, 0x46, 0x54, 0xBA, 0x0F, 0xA5, 0xFB, 0xF6, 0x4B, 0xA2, 0x76, 0xE9, 0xB3, 0x59, 0xA8, 0x12, 0xCE, 0xA0, + 0x07, 0x3C, 0x78, 0xEB, 0xEE, 0xE2, 0x57, 0x17, 0xBD, 0x97, 0x80, 0x7C, 0xDF, 0xCF, 0x80, 0xBF, 0x66, 0x00, 0x7B, 0x20, 0xCE, + 0xD0, 0x9E, 0x34, 0xFE, 0xA3, 0x1F, 0x0D, 0x8C, 0x53, 0x99, 0x62, 0xE7, 0xD0, 0x8A, 0xEE, 0x52, 0xF5, 0x76, 0xD6, 0x0B, 0xD1, + 0x14, 0x69, 0xE4, 0x9E, 0x81, 0xF2, 0x16, 0x66, 0x13, 0x3F, 0x3E, 0x3E, 0xCE, 0x0E, 0xED, 0x4B, 0x1C, 0x67, 0x76, 0xC3, 0x38, + 0xC0, 0xCA, 0x42, 0xCA, 0x46, 0xB3, 0xF4, 0xF3, 0xEA, 0xEE, 0x2E, 0xE5, 0xB6, 0xB0, 0x37, 0x22, 0x40, 0x8E, 0xB4, 0x22, 0x7C, + 0xFE, 0x74, 0x78, 0x52, 0xE1, 0xEC, 0xC6, 0x49, 0x14, 0x3B, 0x02, 0x32, 0x85, 0x11, 0x91, 0xF8, 0x7D, 0x26, 0x06, 0x59, 0xBC, + 0xEA, 0x05, 0x7C, 0x16, 0xCC, 0x78, 0x3D, 0xFE, 0x3C, 0xCA, 0xF0, 0xBE, 0x9C, 0x3B, 0x42, 0x8F, 0x7E, 0xDA, 0x5D, 0x52, 0x47, + 0xA1, 0xA8, 0x23, 0x89, 0xE6, 0x00, 0x4B, 0x85, 0x0E, 0xC4, 0x6B, 0x49, 0x09, 0x4C, 0xFB, 0xD6, 0x1F, 0x5E, 0x1C, 0xCF, 0x03, + 0xA0, 0x86, 0x90, 0x17, 0xAD, 0x10, 0x81, 0x28, 0x8A, 0x64, 0x92, 0x20, 0x51, 0x6D, 0xFD, 0xB3, 0x2E, 0x95, 0xEF, 0x8B, 0xF2, + 0x03, 0xFB, 0x61, 0x59, 0x59, 0x7E, 0x40, 0xC5, 0xCF, 0xB6, 0x58, 0xA4, 0xBB, 0x43, 0x63, 0x27, 0x0E, 0xB0, 0x78, 0x72, 0x00, + 0xD2, 0xF2, 0x72, 0x92, 0xD2, 0x69, 0x35, 0x88, 0x33, 0x8E, 0xB8, 0x1F, 0xA7, 0x7F, 0xF8, 0x93, 0x31, 0xAA, 0x3A, 0xF1, 0xC9, + 0x5F, 0xDD, 0x93, 0x97, 0xED, 0xD3, 0xD9, 0xE3, 0x70, 0x17, 0x7C, 0x59, 0x4B, 0xEC, 0xEF, 0xA2, 0x68, 0x6B, 0x27, 0x0D, 0x76, + 0x51, 0x30, 0xF9, 0xC7, 0xA9, 0x10, 0x94, 0x9E, 0x34, 0xF9, 0xEB, 0x27, 0x9C, 0x80, 0x7D, 0x72, 0x21, 0x6C, 0x95, 0x80, 0xD0, + 0x95, 0xE2, 0xCE, 0xF9, 0xB8, 0x33, 0xD8, 0x5D, 0x12, 0xDA, 0x0F, 0xEA, 0x35, 0x48, 0x3B, 0x7E, 0xA5, 0x11, 0x8A, 0x5A, 0xE2, + 0x48, 0x34, 0x56, 0xD2, 0xE3, 0x32, 0x1D, 0x97, 0xE1, 0xBC, 0xFC, 0x73, 0x9C, 0x73, 0x1D, 0x66, 0x27, 0x9F, 0x88, 0xB4, 0x7A, + 0x5C, 0x2E, 0xEB, 0x4A, 0xB4, 0x56, 0x8F, 0x82, 0x3A, 0xF0, 0x4A, 0x26, 0x55, 0xA5, 0xCA, 0x6A, 0x29, 0x0E, 0x08, 0x2F, 0xA8, + 0x99, 0x6E, 0xBD, 0x90, 0x70, 0xE3, 0x30, 0xA3, 0xE9, 0xA2, 0xE3, 0x67, 0x8A, 0x6D, 0x4E, 0x72, 0x29, 0x48, 0x27, 0x5C, 0x55, + 0x49, 0xEC, 0x57, 0x91, 0xCD, 0x41, 0xB0, 0xBB, 0xC4, 0xE5, 0x99, 0x50, 0xEF, 0x90, 0x2C, 0x79, 0xA6, 0xF4, 0x3C, 0x45, 0x18, + 0x7A, 0x00, 0x83, 0xE3, 0xD5, 0x32, 0x8E, 0x46, 0xFD, 0x36, 0x58, 0x42, 0x4F, 0x33, 0x63, 0xDD, 0x8A, 0x43, 0x4D, 0x50, 0x72, + 0xB0, 0xE5, 0x13, 0x61, 0x54, 0xB2, 0x03, 0x98, 0x47, 0x09, 0xD3, 0x04, 0xFA, 0x70, 0xAA, 0xD1, 0x86, 0x00, 0x75, 0x5D, 0xDA, + 0x3B, 0x92, 0xFB, 0x27, 0x3D, 0x60, 0x3E, 0xE8, 0x73, 0x1F, 0x28, 0x63, 0x9F, 0xD6, 0x2F, 0xA0, 0x99, 0x25, 0xFC, 0xE9, 0x49, + 0x77, 0x86, 0xA7, 0x13, 0x98, 0xF1, 0x5B, 0x92, 0x96, 0x17, 0x22, 0x72, 0x4E, 0x87, 0x3B, 0xB0, 0xA3, 0x7D, 0xBF, 0xD7, 0xBF, + 0xC0, 0x53, 0x80, 0xE9, 0x60, 0x66, 0x3D, 0x4D, 0x18, 0x52, 0x00, 0xAC, 0x72, 0xDA, 0xC5, 0x60, 0x2F, 0xC9, 0x34, 0x9D, 0x41, + 0x91, 0xEE, 0x0C, 0xBF, 0xDA, 0x3D, 0xFC, 0xEE, 0xF1, 0xEF, 0x3E, 0x7E, 0xF7, 0xF9, 0xF7, 0x60, 0x46, 0xCD, 0x68, 0x93, 0x5A, + 0xE6, 0x6E, 0x66, 0x60, 0x34, 0xD3, 0x37, 0x9A, 0xE9, 0x19, 0xCD, 0x74, 0x67, 0xF6, 0x2D, 0x1B, 0xFD, 0x92, 0x4E, 0x4E, 0x6D, + 0x21, 0xBB, 0xC7, 0x1A, 0xF8, 0x05, 0x2D, 0x85, 0xD8, 0x12, 0x7D, 0xF7, 0xF1, 0x7B, 0xC0, 0xBF, 0xA1, 0xA3, 0xD2, 0x6A, 0x29, + 0xAE, 0xB4, 0x34, 0x50, 0x2D, 0xF5, 0x8D, 0x96, 0x7A, 0x46, 0x4B, 0x5D, 0xBB, 0x25, 0x06, 0x42, 0x30, 0x88, 0x66, 0xE2, 0x19, + 0xF9, 0x28, 0x99, 0xA4, 0xE3, 0x2C, 0x34, 0x13, 0xBF, 0xC6, 0xC4, 0x6C, 0x9C, 0x86, 0xCC, 0x7C, 0x6F, 0x1E, 0xD2, 0x8A, 0x71, + 0x6C, 0xA6, 0x51, 0xB9, 0x78, 0x8C, 0x42, 0x95, 0x19, 0x0B, 0x49, 0x41, 0x5A, 0x6A, 0x8F, 0x4C, 0x61, 0x2A, 0xBF, 0xEA, 0x4E, + 0x7A, 0x63, 0x32, 0xEB, 0xA6, 0x64, 0x72, 0x3B, 0x01, 0x19, 0x9A, 0xAF, 0x40, 0xE6, 0xF7, 0x4E, 0xCB, 0x57, 0xDD, 0x49, 0x77, + 0xDC, 0xEF, 0x0D, 0xCF, 0x87, 0x17, 0x83, 0xB3, 0xE1, 0x85, 0xF6, 0x9C, 0xC4, 0xE5, 0x9A, 0x14, 0x3F, 0xC7, 0x3F, 0xA3, 0xDD, + 0x98, 0x81, 0x5E, 0x32, 0x1C, 0xF4, 0x2F, 0x5E, 0x0E, 0x86, 0x43, 0xBB, 0x48, 0xF9, 0x6A, 0x30, 0xEC, 0xF6, 0x2F, 0xFA, 0x83, + 0xE1, 0xD9, 0xD9, 0xE0, 0x62, 0xD4, 0xBF, 0xB8, 0x38, 0x63, 0xA0, 0xB2, 0x30, 0xDF, 0x4F, 0xAF, 0xAE, 0x06, 0xBD, 0x6D, 0xBF, + 0x37, 0x78, 0xD9, 0x7D, 0x39, 0xEA, 0x0E, 0xBB, 0xFC, 0xD9, 0x21, 0xBB, 0xF2, 0x55, 0xAF, 0x77, 0x3E, 0x1A, 0xBE, 0x1C, 0x0E, + 0x46, 0xDD, 0x8B, 0x7E, 0xBF, 0x7F, 0x71, 0x3E, 0x62, 0x27, 0xA3, 0xA1, 0xAE, 0x4D, 0xB2, 0x54, 0x9E, 0x01, 0x41, 0xFB, 0xE5, + 0x69, 0x6F, 0xD8, 0xED, 0xF5, 0x5F, 0x5E, 0x0C, 0xCF, 0x00, 0x92, 0xE1, 0x45, 0xEF, 0x9C, 0x9D, 0x9C, 0x75, 0x83, 0x4A, 0xAB, + 0xC2, 0xDF, 0x93, 0xEA, 0x2D, 0x57, 0x19, 0x2C, 0x3C, 0xFA, 0x5C, 0x65, 0x68, 0x72, 0x3C, 0xA5, 0xEF, 0x1F, 0x7F, 0xEE, 0xA3, + 0x6F, 0xBA, 0xE8, 0x21, 0x6B, 0xF7, 0xFA, 0xE7, 0xB0, 0x3B, 0x0D, 0xB6, 0x17, 0x03, 0x80, 0xBD, 0x7B, 0x7E, 0x6C, 0xF6, 0xF9, + 0x25, 0xFD, 0x58, 0x67, 0xF7, 0x7E, 0x3F, 0x3C, 0xC9, 0x82, 0x2F, 0x79, 0x99, 0x0B, 0xA3, 0x57, 0xE3, 0x7C, 0x20, 0x97, 0x2B, + 0x54, 0xA8, 0xAA, 0xF4, 0xC6, 0x28, 0xBE, 0x75, 0xF8, 0xA5, 0x9F, 0xBC, 0x7A, 0x35, 0xE8, 0x05, 0xED, 0x1E, 0x88, 0x5E, 0xF0, + 0xF9, 0xAA, 0x3F, 0x38, 0xEE, 0x8F, 0x46, 0xB0, 0x5F, 0xC9, 0x3E, 0x15, 0xA3, 0x82, 0x64, 0x98, 0x9B, 0x6C, 0x52, 0x4C, 0x00, + 0xF3, 0xE3, 0xF4, 0x4B, 0x98, 0xA2, 0x6E, 0x30, 0xEE, 0x52, 0x9A, 0x6B, 0xFC, 0x5F, 0xA6, 0x5F, 0x16, 0x50, 0xCC, 0x00, 0x33, + 0x3B, 0xE9, 0x8D, 0xBA, 0xB0, 0x43, 0x15, 0x6D, 0x09, 0x6C, 0x95, 0xFA, 0x64, 0xC8, 0x52, 0x6E, 0x25, 0xAD, 0x92, 0xA1, 0x99, + 0x9B, 0x05, 0x15, 0x7A, 0xCC, 0x8D, 0xCC, 0x22, 0xA8, 0x10, 0xA6, 0x99, 0x19, 0x07, 0x40, 0xA1, 0x61, 0x23, 0x27, 0x3A, 0x1B, + 0x3E, 0xC5, 0x89, 0x44, 0x89, 0xE7, 0x70, 0xA2, 0xF3, 0xCF, 0xC5, 0x89, 0xE8, 0x7B, 0x88, 0xDF, 0x43, 0xFE, 0x3D, 0xC2, 0xEF, + 0x11, 0xFF, 0x3E, 0xC3, 0xEF, 0x33, 0xFE, 0x7D, 0x3E, 0xA3, 0x6E, 0x9F, 0xE4, 0x5C, 0xE7, 0x46, 0xB7, 0x67, 0x46, 0xB7, 0x23, + 0xA3, 0xDB, 0xA1, 0xD1, 0xED, 0xC0, 0xE8, 0xB6, 0x6F, 0x74, 0xDB, 0x33, 0xBA, 0xFD, 0x5C, 0x9C, 0x0E, 0x7B, 0xA6, 0xEF, 0x21, + 0x7E, 0x8F, 0xF8, 0xF7, 0x08, 0xBF, 0xCF, 0xF8, 0xF7, 0x19, 0x7E, 0x9F, 0xF3, 0xEF, 0xF3, 0xA7, 0x38, 0xE3, 0xB9, 0xEA, 0xF9, + 0xCC, 0xE8, 0x79, 0x64, 0xF4, 0x3C, 0x34, 0x7A, 0x1E, 0x18, 0x3D, 0xF7, 0x8D, 0x9E, 0x7B, 0x46, 0xCF, 0x5D, 0xBB, 0x67, 0x41, + 0xAD, 0xDF, 0x92, 0xE7, 0x76, 0x95, 0x95, 0xF2, 0xD4, 0x0A, 0x2F, 0x35, 0x8A, 0x6A, 0x66, 0x6A, 0x94, 0x3C, 0x84, 0x9B, 0x86, + 0x29, 0x1E, 0x78, 0xF0, 0x93, 0xF1, 0x44, 0x73, 0xD4, 0x82, 0xCE, 0x27, 0x4F, 0x12, 0xCE, 0x51, 0x93, 0x00, 0x45, 0x77, 0x28, + 0xD9, 0x2E, 0xF1, 0xFE, 0x4C, 0xEF, 0x34, 0xA9, 0x32, 0x57, 0xCC, 0xCB, 0xAB, 0xEC, 0x35, 0x09, 0xEC, 0x7A, 0x50, 0xFE, 0xEC, + 0xE5, 0xE8, 0xE5, 0xE0, 0xAC, 0x5B, 0x2B, 0xFF, 0xAA, 0x77, 0xFE, 0xF2, 0xFC, 0xEC, 0xE5, 0xA0, 0x37, 0x18, 0x5E, 0x9C, 0xF5, + 0x07, 0xBD, 0xD1, 0x39, 0xEB, 0xBF, 0xEC, 0xDB, 0xD5, 0xFD, 0x42, 0xF0, 0x5D, 0xE4, 0x13, 0xA3, 0xEE, 0xB9, 0x78, 0x08, 0xD1, + 0x68, 0x8A, 0x3B, 0xF2, 0xD2, 0x99, 0xE7, 0x15, 0x30, 0x5D, 0x28, 0x03, 0x8C, 0xFB, 0x02, 0x8B, 0x76, 0x7B, 0x43, 0x76, 0x02, + 0xCC, 0x05, 0x19, 0x70, 0x1C, 0x25, 0xA7, 0x23, 0xFE, 0x4B, 0x35, 0x60, 0x76, 0x10, 0x9F, 0x0E, 0xFB, 0x2F, 0x87, 0x2F, 0xCF, + 0xCE, 0xFB, 0x2F, 0xCF, 0xDC, 0x5D, 0xCC, 0x9D, 0x6C, 0x38, 0x31, 0xD9, 0x70, 0xAF, 0xDB, 0x1F, 0x0A, 0x95, 0x0B, 0x54, 0xC8, + 0x2E, 0xAA, 0xBE, 0xCC, 0x1F, 0x8E, 0xBA, 0x83, 0xD1, 0xCB, 0x97, 0x67, 0xFD, 0xF3, 0xC1, 0x79, 0x17, 0x7A, 0xF8, 0x12, 0x61, + 0xB1, 0x38, 0xF1, 0x3C, 0x70, 0xC3, 0x34, 0x6F, 0x63, 0x1B, 0xC0, 0xCD, 0xBB, 0xDB, 0x5E, 0x77, 0x78, 0x31, 0x3A, 0x3F, 0xFB, + 0x32, 0x3E, 0xE6, 0x5F, 0x23, 0x13, 0xC6, 0x5D, 0x9D, 0x6B, 0xF3, 0x65, 0xCB, 0x77, 0x0F, 0x94, 0x1F, 0x53, 0x6C, 0xB8, 0x10, + 0x9F, 0x14, 0x64, 0x0D, 0xD8, 0x78, 0x21, 0xD9, 0xF8, 0x3C, 0xC2, 0x9B, 0x3D, 0xFD, 0xEE, 0x71, 0xBF, 0x3B, 0x3C, 0x0F, 0x37, + 0x91, 0x46, 0x05, 0x70, 0x6C, 0xDE, 0xDF, 0x71, 0x11, 0xB4, 0x33, 0xC5, 0xD6, 0xA1, 0x18, 0x8E, 0x73, 0xB2, 0x21, 0xBE, 0x1E, + 0x1B, 0x7C, 0x7D, 0x3E, 0xE1, 0x58, 0xFE, 0x32, 0xFE, 0x72, 0x03, 0x19, 0xC6, 0x30, 0xE7, 0x27, 0xBD, 0x2E, 0xC0, 0xFD, 0xA5, + 0xBF, 0x69, 0x57, 0x51, 0x12, 0xD4, 0xD6, 0x81, 0xC5, 0xD4, 0xC3, 0x6E, 0x38, 0x0C, 0x6A, 0x8B, 0xC2, 0xE2, 0xEC, 0xE1, 0x30, + 0xEC, 0x06, 0xD5, 0x15, 0x62, 0xB1, 0x77, 0xD9, 0x88, 0xB5, 0x5C, 0x2C, 0x1E, 0x4F, 0x6D, 0x20, 0x9F, 0x37, 0xAE, 0x84, 0x28, + 0x31, 0x15, 0xDF, 0x98, 0x8E, 0x60, 0x3B, 0x3B, 0x86, 0xDF, 0xA0, 0xA9, 0xE1, 0x92, 0x06, 0x94, 0x5D, 0xD0, 0xC6, 0x87, 0x09, + 0x7D, 0x9E, 0xD0, 0x3B, 0x53, 0x29, 0x03, 0x9E, 0xD2, 0x1F, 0xDA, 0xFC, 0x54, 0xB7, 0xC6, 0x73, 0xCD, 0xE6, 0x8C, 0xDA, 0xFD, + 0x6A, 0x07, 0x03, 0xD1, 0x7D, 0xE5, 0xDA, 0xB5, 0x52, 0x8F, 0x30, 0xA2, 0xE2, 0x16, 0x4D, 0x1D, 0xBD, 0xD9, 0xD5, 0xD5, 0x05, + 0x7D, 0xF5, 0xE1, 0xAB, 0x77, 0x46, 0x9F, 0x03, 0xF8, 0x14, 0xA4, 0x5F, 0xB9, 0xEF, 0x62, 0x35, 0x80, 0x85, 0x54, 0x23, 0xA2, + 0x6A, 0x5F, 0xB5, 0x37, 0x98, 0xF1, 0x06, 0x0C, 0xDD, 0x0D, 0xE8, 0xFF, 0xEF, 0x58, 0xAB, 0x8C, 0x23, 0x1D, 0x8C, 0xA7, 0xA1, + 0x9E, 0xAC, 0x32, 0x9F, 0xA9, 0xCA, 0x6D, 0xBD, 0x1F, 0xF8, 0xCB, 0x15, 0x6C, 0x91, 0x93, 0xB2, 0x1D, 0xF5, 0xC6, 0x39, 0xAC, + 0x8D, 0x21, 0x7D, 0xF7, 0xC7, 0xA3, 0x11, 0xD0, 0x2B, 0x68, 0xFC, 0x67, 0xC3, 0x51, 0xAF, 0x7F, 0x8C, 0xAE, 0x40, 0xA3, 0xB3, + 0x41, 0xBF, 0xAB, 0x52, 0xEC, 0x56, 0xDA, 0xBD, 0x20, 0x98, 0xF8, 0xD0, 0x41, 0x08, 0x95, 0x87, 0xC1, 0x18, 0xFE, 0x1D, 0x28, + 0xF5, 0x0A, 0x75, 0x2B, 0xA4, 0x93, 0x9A, 0x2A, 0x8A, 0xC7, 0x7D, 0x27, 0x20, 0xE6, 0x05, 0xD2, 0x73, 0xE8, 0xD2, 0x0A, 0x67, + 0x48, 0xA4, 0xC8, 0xFD, 0xAB, 0x85, 0x09, 0x0A, 0xF8, 0x29, 0x37, 0x3F, 0x71, 0xA0, 0xB3, 0x69, 0x41, 0xF6, 0x83, 0x31, 0xF0, + 0x3E, 0xB4, 0xFE, 0x20, 0xC7, 0x1A, 0xCA, 0x54, 0x7F, 0xD0, 0x13, 0xBA, 0xFF, 0xD9, 0xE0, 0x98, 0xD7, 0x82, 0x72, 0xFD, 0xC1, + 0x4B, 0x2C, 0x37, 0x38, 0x1B, 0x4D, 0xA0, 0x31, 0xDF, 0x3F, 0xA7, 0x32, 0xBD, 0x8B, 0xAD, 0xAF, 0x4A, 0xE1, 0xEF, 0xBE, 0xFD, + 0xDB, 0x68, 0x23, 0x38, 0x39, 0x1B, 0x8D, 0x06, 0x67, 0xA1, 0xE8, 0x85, 0xD0, 0xD4, 0x46, 0x11, 0x0E, 0xCD, 0xE1, 0x32, 0x11, + 0x31, 0xD5, 0xF6, 0x91, 0xDD, 0x40, 0xF3, 0xC1, 0x58, 0x42, 0x24, 0x8C, 0x17, 0x7B, 0x5A, 0x0F, 0x0B, 0x65, 0xC8, 0x4A, 0x41, + 0x1F, 0x4F, 0x9F, 0x63, 0xC8, 0xCA, 0x02, 0x32, 0x0D, 0xEA, 0x88, 0x6C, 0x13, 0xDC, 0x82, 0xD2, 0x43, 0x6B, 0x2B, 0xF3, 0x12, + 0xDE, 0x51, 0x0E, 0xD3, 0xE7, 0x98, 0xA6, 0xAC, 0xBA, 0x3B, 0x32, 0xEA, 0x27, 0xFB, 0x63, 0x55, 0xE2, 0xCD, 0x58, 0x61, 0xC7, + 0x34, 0xC8, 0xB3, 0xA0, 0x09, 0x36, 0x09, 0xAB, 0x90, 0xE4, 0x29, 0x2C, 0x45, 0xE3, 0x84, 0x93, 0xA8, 0x2F, 0x13, 0x5E, 0xBD, + 0x3A, 0xDB, 0xF6, 0x5E, 0xF6, 0x43, 0xF1, 0x1B, 0x10, 0x99, 0x6C, 0xA1, 0x42, 0x50, 0xA1, 0xDF, 0xA4, 0x46, 0xBF, 0x80, 0x5B, + 0xBB, 0x27, 0x24, 0xE1, 0x00, 0x89, 0x82, 0xE6, 0xB7, 0xED, 0xCB, 0xE9, 0x83, 0xF9, 0xEA, 0x06, 0x62, 0x32, 0x41, 0x20, 0x06, + 0x28, 0x43, 0xDD, 0x39, 0x10, 0x4E, 0x7F, 0xD8, 0x35, 0x13, 0xFA, 0xC7, 0x67, 0x03, 0x84, 0xC0, 0x48, 0x3B, 0xAB, 0x24, 0x69, + 0x20, 0x7D, 0xB3, 0xE2, 0xB6, 0x2F, 0xD8, 0xD7, 0x13, 0xB5, 0xB4, 0x6D, 0x2A, 0xFB, 0xB4, 0xA7, 0xD8, 0xB5, 0x16, 0x92, 0x6F, + 0xB7, 0x17, 0x88, 0xBD, 0x94, 0x14, 0x8F, 0x9E, 0xB6, 0xFD, 0x2A, 0x95, 0x43, 0x3B, 0x75, 0xF0, 0xE5, 0x7A, 0xD5, 0xDB, 0x6E, + 0xF3, 0x57, 0xA9, 0xB4, 0x81, 0x63, 0xE8, 0xA0, 0xCB, 0xA2, 0x9D, 0xBF, 0x4A, 0xE8, 0xC9, 0x72, 0x86, 0x87, 0xE9, 0x44, 0x83, + 0xE2, 0x3A, 0x10, 0x77, 0x0E, 0x40, 0x9F, 0xB7, 0xA2, 0x1D, 0xE5, 0x0A, 0xF4, 0xF3, 0x63, 0x14, 0x8E, 0x8A, 0xA8, 0xD7, 0xF6, + 0xCF, 0xB7, 0x64, 0x80, 0x7D, 0x86, 0x7B, 0x5E, 0xAA, 0xDC, 0xF3, 0x7A, 0x81, 0x2D, 0xD3, 0x97, 0xC2, 0x36, 0xB6, 0xCA, 0x88, + 0xDB, 0x8B, 0xB3, 0xEB, 0x5B, 0xE0, 0x97, 0xC4, 0x68, 0xF9, 0xFE, 0x9D, 0x76, 0xFE, 0x62, 0x39, 0xB7, 0xA9, 0xA7, 0x40, 0xB1, + 0x00, 0x6B, 0xA6, 0x3C, 0xD4, 0x1D, 0x87, 0x14, 0x5D, 0x0C, 0xF0, 0xF7, 0xD7, 0x5F, 0xDF, 0x71, 0xB3, 0x39, 0x7E, 0x7E, 0x5B, + 0xB1, 0xBB, 0xDA, 0xE7, 0x19, 0x50, 0xBA, 0xCA, 0x99, 0x55, 0x81, 0x1E, 0x77, 0x90, 0x28, 0x04, 0x0C, 0x18, 0x1E, 0x2B, 0xF2, + 0x7E, 0xEF, 0xDA, 0xFF, 0x79, 0xE2, 0x9D, 0x8A, 0x2A, 0x44, 0xFC, 0x0C, 0x9B, 0x1B, 0xD1, 0xE4, 0x2D, 0x97, 0x4B, 0x71, 0x3E, + 0x71, 0x05, 0xFC, 0x91, 0xFC, 0x3B, 0x4F, 0x98, 0x7C, 0x6C, 0x8A, 0x23, 0x00, 0x58, 0x1C, 0x3B, 0xC9, 0x03, 0x43, 0x1A, 0xC3, + 0x64, 0xC5, 0x99, 0x49, 0x42, 0xFD, 0xEF, 0x84, 0xEB, 0xAB, 0xD1, 0x7F, 0xE7, 0xF4, 0xD1, 0x86, 0xE9, 0x54, 0xE5, 0x47, 0x74, + 0xAA, 0x82, 0x89, 0x89, 0x9D, 0x08, 0x7B, 0x0B, 0xF1, 0x09, 0x42, 0x23, 0xE9, 0xBA, 0x21, 0x87, 0xBB, 0x0A, 0xB1, 0xBC, 0x99, + 0xA8, 0x4E, 0x6B, 0x14, 0xF8, 0xE6, 0x38, 0x7D, 0x26, 0x2E, 0xBA, 0x28, 0x27, 0x20, 0xC6, 0xBD, 0x16, 0x8E, 0x12, 0x7E, 0x77, + 0xC2, 0x55, 0x47, 0xDD, 0x1A, 0x66, 0x78, 0x67, 0x18, 0x84, 0xCB, 0x28, 0xD1, 0x77, 0x93, 0x55, 0x33, 0xEA, 0x16, 0x1E, 0xDE, + 0xA6, 0x40, 0xBF, 0x0C, 0xBC, 0x42, 0x31, 0xE1, 0x80, 0x33, 0x75, 0x21, 0x91, 0xE9, 0xEB, 0x88, 0xE3, 0x0C, 0xC7, 0x62, 0xDE, + 0x76, 0x74, 0xCF, 0xC5, 0x91, 0x0C, 0x68, 0x79, 0x8B, 0x18, 0x1C, 0xF4, 0xA4, 0x9A, 0xDA, 0x6B, 0xFF, 0xB7, 0x20, 0x43, 0x89, + 0x58, 0x5D, 0x4A, 0xE3, 0x1E, 0xD8, 0x7B, 0x1E, 0x81, 0xAC, 0x42, 0x5D, 0x86, 0x27, 0x7E, 0xD9, 0x36, 0xE4, 0x44, 0xDB, 0xCE, + 0x07, 0x2D, 0x99, 0x99, 0xA2, 0xB5, 0x2A, 0x90, 0x38, 0x72, 0xF7, 0xB3, 0x37, 0x98, 0x33, 0xE1, 0x47, 0xCE, 0x74, 0xDD, 0xA4, + 0xBB, 0x15, 0xAD, 0x86, 0xE2, 0xEB, 0x36, 0x09, 0x55, 0x78, 0x4F, 0x60, 0xF8, 0x8F, 0x80, 0x94, 0xB1, 0x2E, 0x84, 0x88, 0x19, + 0xEB, 0x92, 0xF2, 0xBA, 0xC9, 0x58, 0x57, 0xD9, 0xED, 0xC4, 0x82, 0x17, 0x5B, 0x85, 0x11, 0xB6, 0x58, 0x71, 0x58, 0x41, 0xD6, + 0x44, 0xF4, 0xAE, 0x90, 0x8B, 0x68, 0x96, 0x47, 0xC5, 0x8C, 0xE6, 0xC5, 0x8F, 0x39, 0xE7, 0x60, 0xB0, 0x3E, 0xB7, 0xEA, 0xBB, + 0x17, 0xA0, 0xEC, 0xA4, 0x7E, 0xF6, 0x03, 0x92, 0xAA, 0xD4, 0xEF, 0x41, 0xA0, 0xA4, 0xB2, 0x50, 0x37, 0x30, 0x34, 0x1A, 0x18, + 0xD9, 0x0D, 0x9C, 0x55, 0x1A, 0x38, 0xD7, 0x0D, 0x04, 0x55, 0xEC, 0xDA, 0x70, 0x2B, 0xB0, 0x1D, 0x7B, 0xA3, 0x8F, 0x82, 0xA5, + 0xC4, 0x9D, 0x26, 0x04, 0x21, 0x7B, 0xAA, 0xDF, 0x52, 0x3A, 0x55, 0x09, 0xC0, 0xFD, 0x55, 0x4D, 0x40, 0xB3, 0xA6, 0x19, 0xA3, + 0x26, 0xFD, 0x36, 0x6B, 0x52, 0x02, 0xC0, 0x6C, 0x83, 0xAB, 0xF8, 0x55, 0xC5, 0x84, 0x22, 0xC2, 0x82, 0xDE, 0x92, 0xC5, 0xC9, + 0xF2, 0x59, 0xBB, 0x45, 0x61, 0x48, 0x7C, 0x01, 0x52, 0xB6, 0x1A, 0x2C, 0xA0, 0xEB, 0x3F, 0x58, 0xA0, 0xD9, 0x29, 0x30, 0x57, + 0x5F, 0x7C, 0x40, 0x41, 0x33, 0xAB, 0x0A, 0x43, 0x9D, 0x51, 0x72, 0x18, 0x4E, 0xFC, 0x9E, 0xC4, 0x4F, 0xD5, 0x71, 0x4E, 0x02, + 0xC1, 0x31, 0xB4, 0x55, 0x00, 0x55, 0x81, 0x40, 0x70, 0x0D, 0x84, 0x34, 0x43, 0x51, 0xE7, 0xC5, 0x06, 0x1E, 0x70, 0x7E, 0x22, + 0xA3, 0xC3, 0xFE, 0x85, 0xEE, 0x51, 0xD0, 0x51, 0x1E, 0x99, 0x68, 0x96, 0xD0, 0x22, 0x17, 0xCE, 0x27, 0x64, 0x28, 0x9D, 0x30, + 0x20, 0xA1, 0xC1, 0xC5, 0x10, 0xFF, 0x82, 0xA0, 0xD2, 0x1B, 0xF7, 0xC7, 0x0C, 0x64, 0x94, 0x97, 0xE7, 0xBD, 0x51, 0x7F, 0x32, + 0x18, 0x0F, 0xC7, 0xA5, 0xC8, 0x2F, 0x29, 0x7F, 0x34, 0x3E, 0x83, 0x14, 0x99, 0x7F, 0x3E, 0xBE, 0x00, 0xA1, 0x1B, 0xD3, 0x5F, + 0x8E, 0x7B, 0xDD, 0x4F, 0x89, 0x4B, 0x0D, 0xE2, 0xC0, 0xA7, 0x85, 0xA5, 0x56, 0x21, 0xA8, 0x7B, 0x56, 0xD4, 0x2B, 0xCB, 0xE3, + 0x3C, 0xA8, 0x68, 0x47, 0x08, 0x91, 0x44, 0xE9, 0xD5, 0xB0, 0x3B, 0x49, 0x3B, 0xE8, 0x32, 0xCA, 0xA5, 0x3D, 0x91, 0x3F, 0x2E, + 0x29, 0x8D, 0x7C, 0x0D, 0x26, 0xC6, 0x37, 0x79, 0xC7, 0x40, 0xE6, 0xBD, 0xFA, 0xB1, 0xCB, 0x9C, 0xBE, 0x3F, 0xE8, 0x85, 0x0C, + 0xFD, 0x67, 0x73, 0xD8, 0x24, 0xDF, 0x71, 0xAF, 0x84, 0x77, 0xF4, 0xFB, 0xB7, 0x14, 0xEF, 0xD4, 0xC0, 0xF6, 0x4A, 0x4D, 0x7C, + 0x8D, 0xB7, 0xB0, 0x78, 0x36, 0x14, 0xE4, 0x1F, 0x28, 0xEC, 0xF2, 0x2F, 0x3D, 0x6C, 0xD3, 0xCD, 0x49, 0x5B, 0x08, 0x8F, 0x8F, + 0xBD, 0x82, 0xA1, 0x03, 0x41, 0x54, 0xAF, 0x81, 0x2E, 0xC0, 0xE4, 0x9F, 0x34, 0xA9, 0x4E, 0x06, 0x39, 0xC5, 0x73, 0xD8, 0xC7, + 0x0E, 0x55, 0x06, 0x98, 0x5D, 0xB6, 0x7E, 0x08, 0xF8, 0x1F, 0xF2, 0x5B, 0xC7, 0x5D, 0x45, 0x1C, 0xF1, 0xDB, 0x67, 0x57, 0x15, + 0xC5, 0x2C, 0x10, 0x22, 0x1E, 0xA3, 0x83, 0x9E, 0x9D, 0x1D, 0x52, 0x98, 0x5F, 0x6B, 0x33, 0x39, 0x66, 0x6A, 0x6E, 0x92, 0xB4, + 0xED, 0x6B, 0x54, 0x21, 0x23, 0x02, 0x98, 0x3C, 0x7E, 0xF3, 0x1D, 0x9D, 0x37, 0x6D, 0x17, 0x06, 0x6B, 0x0B, 0x42, 0xCA, 0x16, + 0xD1, 0x1D, 0xD1, 0x0F, 0x49, 0xEC, 0x66, 0xEF, 0x48, 0x61, 0xA8, 0xE3, 0x39, 0x2C, 0xE5, 0xF5, 0x03, 0x1B, 0x40, 0xEE, 0xB8, + 0xEE, 0x8C, 0x4B, 0x28, 0x70, 0x8B, 0x43, 0xF8, 0x91, 0xC7, 0xAD, 0x60, 0xC1, 0x41, 0xBD, 0x17, 0x76, 0x67, 0xA6, 0xDF, 0xCC, + 0x27, 0x2C, 0x92, 0x97, 0x9F, 0x79, 0x91, 0x54, 0xEE, 0x65, 0xB0, 0x66, 0x5A, 0xD6, 0xA4, 0x69, 0x02, 0xD0, 0x79, 0x47, 0xFA, + 0x92, 0x93, 0xF8, 0x30, 0x23, 0xD8, 0x8F, 0x60, 0x8B, 0x87, 0xC9, 0xE8, 0x9C, 0x16, 0x5A, 0xF1, 0x06, 0x18, 0x2E, 0xBD, 0x37, + 0xD8, 0xDA, 0xA4, 0x9E, 0xC4, 0x79, 0xDE, 0x3A, 0x2B, 0x42, 0xF9, 0xC1, 0xAD, 0x71, 0x77, 0x49, 0xAA, 0xB2, 0xDA, 0x4C, 0xF0, + 0x7B, 0x96, 0xE2, 0x13, 0xD5, 0xB2, 0x0D, 0xCB, 0x5D, 0xFC, 0xE4, 0xC2, 0x0B, 0x9F, 0xDB, 0xD4, 0x27, 0xCF, 0xE7, 0x1E, 0xB9, + 0x5F, 0xAC, 0x40, 0xED, 0xC2, 0x77, 0xA4, 0x85, 0xCD, 0x7A, 0xAC, 0xF9, 0xF5, 0xFC, 0x87, 0xBB, 0xF5, 0xCA, 0x08, 0x33, 0xAF, + 0xAA, 0xA1, 0xCB, 0xE0, 0x77, 0x1F, 0x59, 0x5A, 0x7E, 0x77, 0x97, 0xE0, 0x2B, 0xE4, 0x06, 0x2B, 0x0C, 0xE5, 0xCB, 0x04, 0x58, + 0x37, 0x62, 0x56, 0x20, 0x72, 0xFD, 0xB6, 0x99, 0x14, 0x89, 0xCA, 0xC0, 0x0E, 0x32, 0x5E, 0x2F, 0x01, 0x4C, 0xC4, 0x4F, 0xF7, + 0xD0, 0xA4, 0x05, 0x46, 0x13, 0x81, 0xA6, 0xD6, 0x5E, 0x27, 0x9E, 0x4D, 0xA8, 0xDE, 0x9E, 0xA1, 0x3B, 0x47, 0x5C, 0x60, 0xCD, + 0x1A, 0x63, 0xF7, 0x2B, 0x6C, 0x14, 0x6B, 0x36, 0x47, 0xEF, 0x42, 0x74, 0x6A, 0x17, 0x4A, 0x9C, 0xBC, 0x4F, 0xA3, 0xEE, 0xA3, + 0x24, 0xD6, 0x7D, 0x9A, 0x58, 0x3C, 0xEF, 0x95, 0x71, 0x77, 0x7B, 0x89, 0xA3, 0x80, 0xDC, 0xBA, 0x78, 0x05, 0x95, 0x88, 0x00, + 0x4D, 0xE3, 0x1A, 0xDE, 0x26, 0x5E, 0xE5, 0x11, 0x3B, 0x6F, 0x2C, 0x52, 0xBC, 0x99, 0x9F, 0xE9, 0xEB, 0x7A, 0xC6, 0x25, 0x03, + 0x26, 0xB9, 0x6E, 0xA0, 0xFA, 0xC0, 0x53, 0x7B, 0xDF, 0x63, 0x38, 0x2E, 0x8F, 0x3F, 0x3C, 0x54, 0x08, 0xB5, 0x02, 0xB5, 0xDA, + 0x23, 0xD8, 0xB2, 0xC5, 0x4D, 0x8C, 0xDC, 0xF6, 0x84, 0xE6, 0x90, 0x46, 0x29, 0x01, 0x56, 0x99, 0xAF, 0x89, 0x57, 0x79, 0xBE, + 0x0E, 0x20, 0x13, 0x81, 0xCB, 0x67, 0x38, 0x87, 0xD5, 0xCB, 0x12, 0x4D, 0x50, 0xEC, 0x2A, 0xF9, 0x8B, 0xB8, 0x8C, 0x31, 0x98, + 0x21, 0x65, 0x93, 0xD2, 0x0D, 0x8D, 0x41, 0x66, 0xBA, 0xF0, 0xF1, 0x36, 0x4A, 0x70, 0x58, 0xCB, 0xE4, 0x31, 0xD1, 0x70, 0x2B, + 0x84, 0x7A, 0xC5, 0x10, 0x41, 0xDC, 0x65, 0xB8, 0xB1, 0x94, 0xA0, 0x83, 0x78, 0x85, 0x26, 0xBA, 0x87, 0x16, 0x40, 0x80, 0x73, + 0x2F, 0xAA, 0x5A, 0xF4, 0x05, 0x59, 0x8D, 0x8F, 0xDF, 0x88, 0xF9, 0xC5, 0xDD, 0x48, 0x38, 0xB8, 0xCB, 0x19, 0xE7, 0x46, 0x67, + 0xF9, 0x4F, 0x65, 0x1D, 0xE9, 0x57, 0x11, 0xC4, 0xE0, 0x52, 0xE8, 0x1B, 0x7D, 0x48, 0x7C, 0xF1, 0xEA, 0xDF, 0x73, 0x5C, 0x1C, + 0x50, 0xFF, 0x97, 0x41, 0x8D, 0xB4, 0xB6, 0x49, 0xE7, 0xDA, 0x2C, 0x64, 0xD6, 0x2D, 0x31, 0x74, 0xD4, 0xB0, 0x78, 0x08, 0xE7, + 0x1F, 0xA2, 0xB2, 0xC1, 0x3D, 0x64, 0x20, 0x7B, 0x5F, 0xA8, 0xA7, 0x1F, 0x59, 0x7E, 0x9D, 0x15, 0xD0, 0x28, 0x2E, 0x43, 0x58, + 0xC9, 0x74, 0x6A, 0xE1, 0x89, 0x48, 0x12, 0x74, 0x1B, 0x03, 0xE0, 0x8E, 0xA4, 0xEF, 0x22, 0xFC, 0x0C, 0x0D, 0xBB, 0xAC, 0x1D, + 0x77, 0x04, 0xEF, 0x15, 0x1B, 0xAE, 0x7D, 0xD2, 0x51, 0x04, 0x6F, 0x7E, 0xCE, 0x1D, 0xE9, 0xB5, 0x58, 0x0B, 0x41, 0x3C, 0xDD, + 0xCC, 0x22, 0x8C, 0xAB, 0x10, 0x62, 0x24, 0x04, 0x90, 0x1E, 0xE0, 0x1B, 0xE4, 0x07, 0x79, 0x75, 0xB6, 0x45, 0xF9, 0x65, 0x28, + 0x3D, 0x2A, 0x85, 0xCD, 0x4E, 0x9C, 0xC0, 0x9A, 0xBF, 0xE6, 0x8A, 0x3C, 0x95, 0xF7, 0x65, 0x89, 0x1E, 0x97, 0x12, 0xEE, 0xA5, + 0x01, 0x4E, 0xD5, 0xAF, 0xE5, 0xA4, 0xC7, 0x6F, 0x86, 0x2D, 0xAE, 0x96, 0x0A, 0xB0, 0xE5, 0x74, 0x31, 0x8B, 0xB4, 0x9F, 0x4B, + 0xBB, 0xBD, 0x20, 0x47, 0x19, 0x28, 0x06, 0xD3, 0xC0, 0xF4, 0xA3, 0x31, 0x2F, 0xFC, 0xE9, 0x8B, 0xC5, 0x32, 0x79, 0x5F, 0xCC, + 0x82, 0xD3, 0x1B, 0x6B, 0x6D, 0xAB, 0xBB, 0x22, 0xD0, 0x94, 0xE1, 0x6D, 0x58, 0xCA, 0xD0, 0x4C, 0x32, 0x40, 0x92, 0x37, 0xB6, + 0xF4, 0x30, 0x5F, 0x18, 0x06, 0x72, 0x90, 0x7B, 0x78, 0x68, 0xA5, 0x6A, 0x01, 0xE3, 0xD0, 0x49, 0x15, 0x7A, 0xAF, 0x0A, 0xD1, + 0xF5, 0x38, 0x4E, 0x04, 0x18, 0x71, 0x34, 0x17, 0x05, 0x8A, 0x6A, 0x2B, 0x4A, 0x3D, 0xF7, 0x5E, 0x78, 0xF8, 0x5E, 0xFA, 0x02, + 0x98, 0xCB, 0xD2, 0x79, 0x6F, 0x67, 0x1D, 0xE7, 0x20, 0x4A, 0x02, 0x0F, 0x6F, 0xCD, 0xB3, 0x4D, 0x0A, 0x6C, 0x36, 0x29, 0xEE, + 0x70, 0x61, 0x1B, 0x2E, 0x66, 0xEA, 0xDA, 0x57, 0x6A, 0x1E, 0x6D, 0x24, 0x35, 0xBF, 0x74, 0xA0, 0x26, 0x3F, 0x81, 0xC5, 0xB5, + 0xDD, 0x52, 0xE8, 0x58, 0x1F, 0x1F, 0x34, 0xC0, 0x3B, 0xC6, 0x2A, 0x1A, 0x82, 0xC8, 0x08, 0x1E, 0x7F, 0x4F, 0x5B, 0x50, 0x38, + 0x17, 0x39, 0xF4, 0x0B, 0xD2, 0x7F, 0x4F, 0x77, 0x9E, 0xBA, 0x48, 0xA8, 0xF6, 0xF1, 0x28, 0x83, 0x7E, 0x6D, 0xF7, 0x31, 0x41, + 0xE3, 0xD1, 0x51, 0xEF, 0x13, 0x64, 0xAD, 0x9E, 0x08, 0xA6, 0xDB, 0x1B, 0xE0, 0x2D, 0xFD, 0xC2, 0xAB, 0x3F, 0x70, 0x73, 0x88, + 0xC3, 0xFD, 0xE3, 0x4E, 0x3A, 0xDA, 0xE3, 0xC3, 0xD1, 0xF9, 0xE4, 0xA8, 0xEC, 0xFC, 0x79, 0x8B, 0x02, 0x3E, 0xCA, 0xF8, 0xF2, + 0x06, 0xDB, 0x44, 0x7F, 0x5A, 0xF7, 0xCF, 0xE8, 0xB0, 0x4E, 0x6E, 0x55, 0x20, 0xEA, 0x3B, 0xFC, 0x0C, 0xFE, 0xF7, 0x4F, 0x3F, + 0xFE, 0xB3, 0x2C, 0xD7, 0xE2, 0xCD, 0x8D, 0x49, 0x86, 0xAD, 0x4B, 0x0D, 0x26, 0x99, 0xE4, 0x80, 0xFD, 0x71, 0xCE, 0xD7, 0x06, + 0x9D, 0x8B, 0xC5, 0xF9, 0xC3, 0x24, 0x1D, 0xA7, 0xB5, 0xBB, 0x72, 0xC8, 0xA8, 0xC7, 0x76, 0x65, 0x9F, 0xEB, 0xFC, 0xC4, 0x9F, + 0x77, 0x94, 0xD5, 0x60, 0x7B, 0xC5, 0x25, 0x65, 0x83, 0x01, 0xC2, 0x47, 0x96, 0x12, 0x17, 0x86, 0xCD, 0xA9, 0x64, 0xF3, 0xDB, + 0x38, 0xBD, 0xA9, 0xBE, 0xAB, 0x38, 0xA4, 0xEB, 0xF0, 0x54, 0xE8, 0x0D, 0x16, 0xE2, 0x46, 0xC1, 0x23, 0x4C, 0xC4, 0x4A, 0x9B, + 0xE2, 0xF8, 0xB8, 0xDF, 0x35, 0x7F, 0xEB, 0x70, 0x4F, 0x82, 0x22, 0x79, 0x32, 0xD0, 0x87, 0x2A, 0x21, 0x9E, 0xC6, 0xE3, 0xE3, + 0x94, 0xC2, 0x65, 0xA2, 0xF6, 0x42, 0xDA, 0xFB, 0xA1, 0x23, 0x46, 0x3C, 0x53, 0x39, 0x29, 0x77, 0x2F, 0xD3, 0x2B, 0x5D, 0xE8, + 0x2D, 0xFB, 0xD3, 0xB8, 0x99, 0x97, 0x82, 0x16, 0x44, 0x54, 0x8D, 0x06, 0x8D, 0x4A, 0x21, 0xC3, 0xE6, 0x9E, 0x9A, 0x01, 0x82, + 0x08, 0xDB, 0xAE, 0xB9, 0xD2, 0x6A, 0xDB, 0xA4, 0xE2, 0xE7, 0xC1, 0x82, 0x31, 0xAB, 0xB6, 0x60, 0xF7, 0x86, 0x8E, 0x95, 0x72, + 0x64, 0xB0, 0x11, 0x78, 0x19, 0xD0, 0x76, 0x9E, 0x2C, 0xD8, 0x4F, 0xB0, 0x15, 0xA2, 0x10, 0xE4, 0x25, 0x44, 0x22, 0x80, 0xF8, + 0x4A, 0x86, 0xEF, 0x95, 0x50, 0xFD, 0x14, 0x18, 0x55, 0x92, 0x5E, 0xB6, 0x10, 0x66, 0xD8, 0x40, 0xA3, 0x3F, 0x4F, 0x80, 0xFC, + 0xF3, 0x13, 0x09, 0x62, 0x60, 0xF6, 0x86, 0x42, 0x1C, 0x0F, 0x06, 0x2D, 0xE3, 0xB8, 0x42, 0x6E, 0xB6, 0x66, 0xB0, 0x02, 0xFF, + 0xED, 0xBB, 0xB7, 0x74, 0x75, 0x1B, 0x30, 0x8E, 0x1B, 0xFC, 0x33, 0x02, 0x3C, 0xA0, 0x3D, 0xF4, 0xAB, 0x6B, 0xD8, 0x68, 0x36, + 0xCE, 0x97, 0xA8, 0xC9, 0x01, 0xF5, 0xF7, 0xD3, 0xED, 0xEF, 0xF7, 0xED, 0x71, 0xA0, 0x9D, 0x49, 0xD1, 0x91, 0xA8, 0x93, 0x66, + 0xF9, 0x5D, 0xBC, 0x4A, 0xFE, 0x62, 0x0E, 0xCD, 0xCC, 0xB7, 0xD8, 0xF0, 0xEF, 0xBF, 0xE3, 0xB3, 0x5D, 0xA7, 0x9E, 0xF1, 0x9C, + 0xD7, 0xEF, 0xA7, 0x8F, 0xFD, 0x70, 0x27, 0x92, 0x03, 0x72, 0x9C, 0x2C, 0x29, 0xBE, 0x00, 0x3A, 0xDB, 0x20, 0xAF, 0xA2, 0xC8, + 0x07, 0xFC, 0x06, 0x36, 0xA8, 0xC5, 0xB7, 0xC9, 0xB2, 0xF4, 0x81, 0xC5, 0x9C, 0x7A, 0x66, 0x48, 0x52, 0x7C, 0x40, 0x51, 0xFB, + 0x34, 0x7A, 0x1D, 0xBA, 0xF0, 0x5F, 0x4E, 0xB3, 0xD9, 0x24, 0x7B, 0xD5, 0x85, 0x75, 0x09, 0x09, 0x47, 0x94, 0x70, 0xD2, 0x9B, + 0x4D, 0x4A, 0xE9, 0x9D, 0x79, 0x72, 0x92, 0x85, 0x7D, 0x58, 0x7E, 0x3A, 0x25, 0xE3, 0xFE, 0x9A, 0xD9, 0xD8, 0xD3, 0x2D, 0xD4, + 0x32, 0xD5, 0xCD, 0xBF, 0x76, 0x29, 0xF8, 0xDE, 0xA9, 0x47, 0x6E, 0xD2, 0xB5, 0x27, 0x79, 0x2C, 0x26, 0xD4, 0xCA, 0x89, 0xCB, + 0x64, 0x74, 0x1D, 0x1A, 0xB7, 0xBD, 0x49, 0x39, 0xF6, 0x73, 0x7A, 0x81, 0x38, 0xA3, 0xA7, 0x87, 0x6D, 0x54, 0x71, 0x74, 0xFF, + 0x11, 0x4C, 0xFF, 0x38, 0x9D, 0xB5, 0xFF, 0x71, 0x8A, 0x8F, 0x9D, 0xA9, 0x47, 0x62, 0x32, 0x7C, 0x2F, 0xEE, 0x14, 0x25, 0x80, + 0x71, 0xF9, 0xE4, 0x14, 0xE7, 0x9D, 0x1C, 0x95, 0x84, 0xBC, 0xB3, 0xC0, 0x68, 0xB3, 0x6F, 0x58, 0x59, 0x02, 0x5B, 0x29, 0x7E, + 0x8A, 0xD3, 0x18, 0x43, 0x45, 0x87, 0xA6, 0x88, 0x26, 0x07, 0x86, 0x1B, 0x8D, 0x28, 0xFF, 0xCD, 0x2A, 0xA1, 0x37, 0x89, 0x1C, + 0xC5, 0xD6, 0x46, 0xB1, 0x1F, 0xBE, 0xFE, 0xF1, 0xBB, 0x6F, 0xB2, 0x34, 0xE5, 0xB7, 0x66, 0x9C, 0xC5, 0x6F, 0xCD, 0xE2, 0xFF, + 0x7C, 0xFB, 0xF6, 0xD7, 0x27, 0xCA, 0xAF, 0x8C, 0xF2, 0x78, 0x2B, 0xF6, 0xDB, 0xAF, 0x9D, 0xC5, 0x36, 0x46, 0x31, 0x58, 0x59, + 0x45, 0x53, 0x73, 0x0F, 0x3B, 0xDC, 0x84, 0x31, 0x52, 0x42, 0x2B, 0x79, 0x34, 0x34, 0x1B, 0x8C, 0x5D, 0x80, 0xDC, 0x29, 0x99, + 0xA3, 0xE0, 0xFA, 0x2D, 0xBB, 0xDE, 0xDC, 0xFC, 0x44, 0x61, 0x2B, 0xB8, 0x9C, 0x26, 0xC3, 0x3C, 0x57, 0xD5, 0x3C, 0x8F, 0x78, + 0x1C, 0xDE, 0x6A, 0xBD, 0x63, 0xC5, 0x6D, 0x19, 0x17, 0xD0, 0xC0, 0x7B, 0x7C, 0x12, 0xCF, 0x42, 0x6F, 0xC7, 0x6C, 0x72, 0xDC, + 0xA2, 0x2D, 0x5A, 0xE9, 0x3F, 0xB2, 0x69, 0x72, 0xB0, 0x17, 0x65, 0x22, 0xB6, 0xDB, 0x99, 0x3F, 0x8F, 0x7A, 0xCA, 0x30, 0x70, + 0x0E, 0xE0, 0x23, 0xD8, 0x40, 0xEE, 0xA0, 0xCE, 0xD1, 0xC5, 0x18, 0x19, 0xBE, 0x0A, 0xCF, 0x6F, 0xED, 0x14, 0x7E, 0xE8, 0xC4, + 0xAF, 0x2A, 0x05, 0xE6, 0x55, 0xF3, 0xC7, 0xF7, 0xF1, 0xC7, 0xF8, 0x1D, 0xBE, 0x62, 0x02, 0xF0, 0x8D, 0xF1, 0xCD, 0xA9, 0xCE, + 0x0D, 0x63, 0x1F, 0x8A, 0x8F, 0xC9, 0x0A, 0x44, 0x4C, 0x1C, 0x8B, 0x17, 0x52, 0x11, 0x10, 0xDF, 0x59, 0xFE, 0x8E, 0x10, 0x46, + 0x6F, 0xD1, 0x7A, 0x3F, 0x41, 0x1E, 0xBD, 0x61, 0x51, 0x80, 0x20, 0xA2, 0xEE, 0xA9, 0x3F, 0xFE, 0x9A, 0x15, 0x09, 0x36, 0x3D, + 0x7E, 0xE4, 0x41, 0x82, 0xC6, 0x8F, 0x2B, 0x40, 0x66, 0xB9, 0x59, 0xB0, 0x1F, 0xC6, 0x14, 0x27, 0x65, 0x2C, 0x43, 0xCB, 0x86, + 0xC9, 0x62, 0x7C, 0xBE, 0x0B, 0x31, 0xC4, 0x53, 0x63, 0xFE, 0xC5, 0x2E, 0x8C, 0x57, 0xBC, 0xBA, 0xCC, 0xD5, 0x99, 0x83, 0x5D, + 0x78, 0x1D, 0xA3, 0x96, 0xFA, 0xF0, 0x23, 0xFB, 0xC8, 0x56, 0xF5, 0x02, 0x43, 0x60, 0xC1, 0xC0, 0x55, 0x65, 0x86, 0x0C, 0x62, + 0x8B, 0x59, 0x2F, 0xF1, 0xD8, 0xEF, 0x5B, 0x50, 0x85, 0x34, 0x9C, 0x50, 0x48, 0x96, 0x24, 0x06, 0x8D, 0xC5, 0x40, 0x0E, 0x59, + 0xC7, 0x0F, 0x78, 0x4B, 0x4E, 0x66, 0xF1, 0xE0, 0x8F, 0x98, 0xD7, 0x87, 0x16, 0xF8, 0xFD, 0xC3, 0xF1, 0x23, 0x56, 0x18, 0x3F, + 0xF2, 0xDB, 0xB0, 0xE3, 0xC7, 0x5F, 0x7E, 0xFD, 0xEA, 0x7F, 0xFD, 0xF6, 0xDD, 0xB8, 0x1B, 0x7E, 0xF3, 0xE3, 0x77, 0x5F, 0xBD, + 0x7E, 0xF7, 0xF6, 0xBB, 0xFF, 0xFD, 0x76, 0xDC, 0x13, 0x3F, 0x5E, 0x7F, 0xF7, 0xD5, 0xB7, 0x5F, 0x7D, 0xF3, 0xEF, 0x58, 0x1B, + 0xEA, 0xFF, 0x06, 0x4C, 0x5D, 0x43, 0x90, 0xA8, 0x5E, 0x84, 0x3A, 0x20, 0x40, 0x40, 0x14, 0xE1, 0xED, 0x32, 0x47, 0x6E, 0x7F, + 0x17, 0x16, 0xB7, 0x20, 0x08, 0x35, 0x64, 0x03, 0x8A, 0xEE, 0xE2, 0x39, 0x4C, 0x4E, 0x5E, 0x87, 0x7F, 0x88, 0x00, 0xBC, 0xC6, + 0x79, 0xFD, 0x36, 0x29, 0xE6, 0xB8, 0x0D, 0x3D, 0x68, 0x50, 0x72, 0x4C, 0x87, 0x3F, 0x9B, 0x15, 0xD4, 0x91, 0x71, 0x92, 0xBC, + 0xB0, 0x8A, 0xE1, 0xBE, 0x6A, 0x83, 0xE8, 0x5F, 0xA3, 0xE0, 0xE7, 0x5F, 0x7E, 0x46, 0x04, 0xFC, 0xFC, 0xCB, 0xBB, 0xD7, 0xBF, + 0xFC, 0xF6, 0xF6, 0x3B, 0x18, 0xFE, 0xBF, 0xFD, 0xF2, 0xF6, 0xDD, 0xCF, 0x5F, 0xC1, 0xC0, 0xC3, 0xB7, 0x3F, 0xFC, 0xF4, 0x1D, + 0x24, 0x02, 0x70, 0xBB, 0xF0, 0xCD, 0xE6, 0xFA, 0x57, 0x7C, 0x42, 0xA7, 0x1C, 0x3F, 0xF2, 0x68, 0x46, 0xE3, 0x47, 0x85, 0x70, + 0x4A, 0x18, 0x4F, 0xBD, 0xB5, 0x20, 0x29, 0x90, 0x34, 0xB9, 0xF2, 0x8A, 0xFC, 0x0C, 0x1F, 0xF5, 0x22, 0x20, 0x85, 0x08, 0xA3, + 0x7F, 0x82, 0x72, 0x21, 0x7F, 0x10, 0x50, 0xDE, 0x0C, 0x88, 0x68, 0xFE, 0x41, 0xB7, 0x57, 0x6C, 0xE6, 0x73, 0x56, 0x14, 0x3F, + 0xC0, 0x78, 0xBC, 0x65, 0x9C, 0xAC, 0xE0, 0x03, 0x4D, 0x9F, 0x72, 0xE8, 0x6B, 0x45, 0xC1, 0x7C, 0xB4, 0xBF, 0xAA, 0xEE, 0xF9, + 0x6C, 0x2C, 0x88, 0x6A, 0x78, 0xDE, 0xB7, 0x04, 0x0F, 0x47, 0xF4, 0x86, 0xE6, 0x92, 0xA7, 0xFF, 0x46, 0x00, 0x72, 0x12, 0x34, + 0xA1, 0x94, 0xF9, 0x36, 0xDA, 0xA9, 0xE4, 0x99, 0x2A, 0x09, 0x03, 0xD8, 0x53, 0xEE, 0x5C, 0x94, 0x13, 0x08, 0x37, 0xCA, 0xF1, + 0xD1, 0x12, 0x94, 0x00, 0xCE, 0x7D, 0x9C, 0x96, 0xF2, 0x5D, 0x36, 0x35, 0xF9, 0x18, 0x4B, 0x17, 0x0B, 0x8C, 0x80, 0x6C, 0x24, + 0x16, 0x64, 0xE6, 0x46, 0x4F, 0x6B, 0xAF, 0x0B, 0xE8, 0x20, 0xCC, 0xB8, 0x32, 0x11, 0x07, 0xC6, 0x58, 0x8C, 0xAC, 0x97, 0xD0, + 0x6C, 0xB6, 0xC9, 0xE7, 0xCC, 0x55, 0x0D, 0x48, 0x35, 0xCB, 0x93, 0x1B, 0x90, 0x88, 0xDC, 0xED, 0x12, 0x2D, 0x11, 0x57, 0x79, + 0x8A, 0x20, 0xB8, 0x19, 0x04, 0xA7, 0x8F, 0xA5, 0xF3, 0xFC, 0x61, 0x8D, 0xA4, 0x69, 0xCE, 0x20, 0x9A, 0xA2, 0x5D, 0x10, 0x60, + 0x58, 0x25, 0x67, 0xC7, 0xA1, 0x68, 0x51, 0x66, 0x2A, 0xAA, 0x94, 0x73, 0xAB, 0xFA, 0xA9, 0x2F, 0x23, 0x60, 0x51, 0x89, 0x6B, + 0x38, 0x38, 0x9F, 0x7F, 0xBE, 0x6D, 0x64, 0x3F, 0x90, 0xF9, 0x26, 0x55, 0xF3, 0xC7, 0x83, 0xFC, 0x8A, 0xE9, 0xBD, 0xCD, 0xD6, + 0x3F, 0xA2, 0xC9, 0xA7, 0x61, 0x62, 0x70, 0x62, 0xBF, 0x42, 0x7A, 0xAE, 0xCC, 0x29, 0xCC, 0x0B, 0xE0, 0xE0, 0x9B, 0x8C, 0x0C, + 0x4C, 0x65, 0xA1, 0xD7, 0xE2, 0x6F, 0x29, 0x90, 0xE6, 0x62, 0x8C, 0xA7, 0x3C, 0xDF, 0x80, 0x64, 0x9F, 0xB2, 0x95, 0xDC, 0x96, + 0x0C, 0xE6, 0xF7, 0xE7, 0xAF, 0xD9, 0xBD, 0xA6, 0x5F, 0x0B, 0x69, 0x77, 0x80, 0x9A, 0xBB, 0x6F, 0xC8, 0x6E, 0x2A, 0xF3, 0x7F, + 0xD2, 0x49, 0x9A, 0x15, 0xA7, 0x8B, 0xFB, 0x64, 0x51, 0xDE, 0xBA, 0x71, 0x51, 0xAC, 0x49, 0x63, 0x8A, 0x71, 0x8F, 0x75, 0x94, + 0x80, 0x61, 0xF3, 0x1B, 0x50, 0xAF, 0xE3, 0xD2, 0x45, 0x3D, 0x80, 0xE5, 0x39, 0x87, 0x1D, 0x14, 0x6D, 0x37, 0xE5, 0xAD, 0x8B, + 0x0F, 0x2E, 0x26, 0x17, 0xA6, 0x6E, 0xD6, 0x38, 0x32, 0xD8, 0xF7, 0x4F, 0xE6, 0x08, 0x25, 0xDA, 0xBE, 0xBE, 0xEF, 0xF5, 0x47, + 0xDF, 0xE4, 0xC3, 0xD1, 0x9B, 0x65, 0xAF, 0x7F, 0x01, 0xCC, 0xEC, 0xEB, 0xFB, 0x51, 0xB7, 0xAB, 0x13, 0x7A, 0x90, 0x30, 0xE8, + 0xBD, 0xA3, 0x32, 0x17, 0x6F, 0x96, 0xA3, 0x5E, 0x1F, 0x78, 0x9B, 0xAC, 0x04, 0x09, 0xC3, 0xEE, 0xCB, 0x33, 0xE4, 0x71, 0xC8, + 0x21, 0xE3, 0x45, 0x92, 0xC9, 0xF6, 0x15, 0x9F, 0xC9, 0xF1, 0x9A, 0x3D, 0x50, 0x16, 0x2B, 0x4C, 0xB6, 0xF1, 0xAB, 0x4E, 0x96, + 0x13, 0x30, 0xAF, 0xCE, 0x1A, 0x2F, 0x5D, 0x99, 0xCC, 0xDA, 0xA6, 0x54, 0x69, 0xCD, 0xE8, 0x59, 0x70, 0xB4, 0xAF, 0x73, 0x58, + 0x56, 0x73, 0x90, 0x55, 0xDE, 0xB0, 0x79, 0xE1, 0x5E, 0x30, 0xA8, 0x36, 0xFC, 0x72, 0x9F, 0xB2, 0x1C, 0xDF, 0xED, 0xC8, 0x01, + 0x35, 0xEE, 0xF5, 0x93, 0x6E, 0xEE, 0x7E, 0x4A, 0x0A, 0xA0, 0xB2, 0xB7, 0xD9, 0xF7, 0xC0, 0x37, 0x1C, 0x85, 0x88, 0x23, 0x25, + 0xE5, 0xD7, 0x80, 0xDB, 0x12, 0xA4, 0x90, 0xDB, 0x86, 0x2E, 0x61, 0xBE, 0x8A, 0x79, 0xCE, 0x58, 0xFA, 0x4B, 0xDA, 0x50, 0x02, + 0x58, 0xD7, 0xFA, 0x16, 0x38, 0x81, 0xB0, 0x29, 0x36, 0x94, 0x3A, 0x13, 0xA5, 0xDE, 0x2C, 0x0A, 0x5D, 0xD0, 0x4D, 0x77, 0x28, + 0xE4, 0x58, 0xC5, 0x5C, 0xED, 0x01, 0xFD, 0x15, 0x8B, 0xA2, 0x21, 0x13, 0x88, 0x6F, 0xD5, 0x94, 0x87, 0x2B, 0xF6, 0x2E, 0x49, + 0xFF, 0x33, 0xFE, 0xC0, 0x9A, 0x4A, 0x00, 0x9A, 0xEF, 0x93, 0x65, 0xF2, 0xA6, 0x70, 0xEF, 0xFF, 0x7D, 0x9E, 0xFD, 0x2B, 0x48, + 0x5E, 0xF7, 0x59, 0xEE, 0x2C, 0x32, 0xE0, 0x45, 0xBE, 0x5A, 0x93, 0x5C, 0x59, 0x63, 0x0C, 0xB8, 0x09, 0xB1, 0x1B, 0x63, 0x4B, + 0x33, 0xEB, 0x8E, 0x90, 0xD5, 0xE3, 0xAA, 0x7C, 0xC0, 0xE7, 0x91, 0xCB, 0x7A, 0xED, 0x2E, 0x8C, 0x20, 0xB9, 0x01, 0xA5, 0x8E, + 0xFD, 0x90, 0x82, 0x7C, 0x08, 0x15, 0x9B, 0xE4, 0x02, 0x6B, 0xD8, 0x44, 0xF9, 0xBB, 0x10, 0x45, 0xF5, 0x1F, 0xD2, 0x65, 0xA6, + 0xA9, 0x2F, 0x75, 0x2E, 0xE0, 0x5E, 0xC3, 0x06, 0x0A, 0xA3, 0xDF, 0xBB, 0x21, 0xC3, 0xD0, 0x8B, 0x06, 0x3E, 0x9A, 0x82, 0x1E, + 0xFD, 0xCF, 0x6C, 0xED, 0xA4, 0x21, 0xDC, 0x6A, 0x1E, 0xEA, 0xB0, 0xDD, 0x51, 0x9A, 0x9B, 0xC5, 0x00, 0x84, 0xB7, 0x71, 0xF1, + 0x6F, 0xEB, 0xA2, 0x86, 0x22, 0xBE, 0x00, 0xC4, 0x72, 0x54, 0xD9, 0x16, 0xED, 0x37, 0xE2, 0x1F, 0xE6, 0xE6, 0xF6, 0x1E, 0xA7, + 0x6D, 0xE5, 0xE4, 0x51, 0xB0, 0xA7, 0xE5, 0x77, 0xF7, 0x71, 0xCE, 0xFE, 0x83, 0xEB, 0x32, 0x8E, 0x42, 0x40, 0xEA, 0x64, 0x99, + 0xFF, 0xC6, 0x98, 0x7B, 0x9B, 0xC2, 0x29, 0xFB, 0x2B, 0x10, 0x02, 0x61, 0xBF, 0x77, 0xD3, 0xB6, 0x68, 0x60, 0x93, 0x36, 0xEC, + 0xEA, 0xF4, 0xCC, 0x61, 0xF9, 0xC3, 0x02, 0xA3, 0xA9, 0x37, 0x10, 0xF9, 0x7C, 0x93, 0x63, 0x88, 0x8D, 0x5F, 0x45, 0xC9, 0x06, + 0x42, 0x4F, 0x39, 0x7A, 0x9B, 0xDA, 0xE9, 0xD3, 0x72, 0xC4, 0x30, 0x0D, 0x62, 0x39, 0xFE, 0x54, 0x38, 0x97, 0x2D, 0x52, 0x3C, + 0x50, 0xE2, 0x57, 0xEB, 0x75, 0x05, 0x2F, 0x66, 0x19, 0x12, 0x70, 0xBF, 0x65, 0x18, 0x76, 0x81, 0x2C, 0x56, 0x86, 0x74, 0x8B, + 0xFC, 0x58, 0xC9, 0x4E, 0x9A, 0x39, 0xAB, 0x1D, 0x8F, 0xC8, 0x40, 0x6D, 0x76, 0x8A, 0x50, 0xE4, 0x6C, 0x67, 0xC8, 0x11, 0x6B, + 0xA4, 0x3A, 0xE0, 0xC3, 0xFB, 0xF6, 0xBA, 0x69, 0x7D, 0x58, 0xCD, 0xD0, 0xA2, 0x9C, 0xB3, 0xE4, 0x23, 0xFB, 0x5F, 0x1B, 0xB6, + 0x69, 0x94, 0xB5, 0xB5, 0x40, 0x24, 0x29, 0xE2, 0x63, 0xE3, 0x88, 0x2F, 0x48, 0xE4, 0x00, 0xAA, 0x17, 0xA1, 0x2E, 0xD4, 0x00, + 0xEC, 0x36, 0x70, 0x69, 0x64, 0x6F, 0xE2, 0x8F, 0x75, 0x4E, 0x01, 0x33, 0xBD, 0x48, 0x16, 0x40, 0xE2, 0x0D, 0xAC, 0xA0, 0xC7, + 0x31, 0x0A, 0xDA, 0x28, 0xB7, 0x46, 0x1A, 0x0B, 0xC7, 0xEE, 0xD1, 0xD2, 0x5F, 0xA0, 0xCE, 0xF7, 0x20, 0x91, 0xBD, 0xE6, 0x48, + 0x97, 0x52, 0x1D, 0xE8, 0xB1, 0x49, 0x9C, 0x96, 0x86, 0x98, 0x2F, 0x20, 0xF4, 0xEE, 0x1E, 0x38, 0x92, 0xBC, 0x54, 0xE1, 0xCB, + 0xA3, 0x19, 0x43, 0x05, 0x40, 0x77, 0x8E, 0x0F, 0xBB, 0xD3, 0xAC, 0x7D, 0x93, 0xDD, 0xAD, 0x31, 0xCC, 0x0B, 0x09, 0xF4, 0x39, + 0x03, 0x70, 0xAB, 0x02, 0x61, 0x23, 0xCB, 0x59, 0x0B, 0x51, 0xD3, 0x89, 0x27, 0x24, 0xC6, 0x07, 0xCE, 0x1F, 0x9C, 0x84, 0x20, + 0xE6, 0xDB, 0x2C, 0x51, 0x9B, 0xE1, 0x7D, 0x84, 0x76, 0x86, 0x72, 0xA7, 0x81, 0x4B, 0xA1, 0x52, 0x98, 0x23, 0x94, 0x92, 0x91, + 0x3D, 0xCC, 0x86, 0xA9, 0x17, 0x23, 0x77, 0xCC, 0x2A, 0xA0, 0xE2, 0x6D, 0x76, 0x30, 0xFE, 0x51, 0xC0, 0xE4, 0x60, 0x12, 0x46, + 0x81, 0x12, 0x5E, 0x0B, 0xEC, 0xA3, 0xE1, 0x00, 0x49, 0xDF, 0xD6, 0x97, 0xF6, 0xE1, 0xB0, 0xC7, 0xE5, 0x55, 0xD9, 0x9C, 0x93, + 0x77, 0x74, 0x51, 0xCC, 0x28, 0x5F, 0xEF, 0x5D, 0x93, 0x5D, 0x92, 0x45, 0x78, 0xEF, 0xB5, 0x85, 0xD7, 0xEB, 0x72, 0xDD, 0x21, + 0x4E, 0x37, 0xB8, 0x95, 0x6D, 0x10, 0x77, 0xB6, 0x6E, 0xBF, 0xA4, 0x89, 0xF8, 0x3E, 0x67, 0xFF, 0xD5, 0xC0, 0xD8, 0x1B, 0x59, + 0x70, 0x1F, 0x33, 0x9B, 0x99, 0x2F, 0x6E, 0x3F, 0x6C, 0xB5, 0x44, 0xFB, 0x27, 0xAC, 0x19, 0x7C, 0x8B, 0xA1, 0x6E, 0xC4, 0x40, + 0x3E, 0xB4, 0x93, 0xC6, 0xA6, 0xA2, 0x62, 0x6C, 0x32, 0xAC, 0x3B, 0x78, 0xDB, 0xC8, 0x3C, 0xDB, 0x93, 0x71, 0x1B, 0xDF, 0x17, + 0x2D, 0xD4, 0x7F, 0xD8, 0xA2, 0x05, 0x22, 0x76, 0x0B, 0x5F, 0xFD, 0x48, 0xC8, 0xBC, 0x8A, 0x66, 0x60, 0xB3, 0x02, 0x86, 0xB5, + 0x13, 0xA6, 0x2B, 0xD4, 0x80, 0x7E, 0x15, 0xD5, 0xCD, 0x60, 0x28, 0x40, 0x3F, 0xAD, 0x84, 0xE2, 0x6A, 0xAB, 0x77, 0xB9, 0x99, + 0x0C, 0x83, 0x22, 0xE3, 0x3A, 0xF8, 0xA5, 0x71, 0x04, 0xCC, 0x8F, 0x94, 0xD0, 0x7A, 0x24, 0x8C, 0xF8, 0x6E, 0x3B, 0x97, 0xEC, + 0xEB, 0x9F, 0x14, 0x9F, 0x89, 0x07, 0xBD, 0x95, 0x69, 0x63, 0x0A, 0xF4, 0x26, 0x18, 0x84, 0x36, 0x9A, 0x4B, 0x50, 0xCB, 0xCC, + 0x01, 0x68, 0xF4, 0x98, 0x5D, 0xBF, 0x17, 0x8F, 0xCB, 0x86, 0x38, 0x55, 0x17, 0x64, 0xDF, 0x16, 0x29, 0xBB, 0x3D, 0xE3, 0xC0, + 0x1C, 0x3C, 0x43, 0x10, 0x4F, 0xF7, 0xF1, 0xA0, 0x96, 0x76, 0x08, 0x3D, 0xF6, 0xF7, 0xC7, 0xA7, 0x81, 0x1E, 0x3B, 0x07, 0x87, + 0x51, 0xEB, 0x23, 0xF3, 0xE9, 0x0D, 0x6E, 0x72, 0xD5, 0x23, 0x89, 0x12, 0x1D, 0x21, 0x18, 0xCA, 0x1A, 0x8E, 0x06, 0x0A, 0x31, + 0x37, 0xAC, 0x14, 0x03, 0x93, 0x36, 0x4B, 0x73, 0xBC, 0xBF, 0xE4, 0x18, 0x47, 0x88, 0x3C, 0x60, 0xFF, 0xC7, 0xE9, 0x97, 0x47, + 0x2D, 0x7F, 0x1E, 0xB4, 0xBE, 0x4A, 0x61, 0x8B, 0x8F, 0x5B, 0xFF, 0x96, 0xC4, 0x77, 0x77, 0x71, 0x3E, 0xBF, 0x4D, 0x5A, 0x27, + 0xAD, 0x1F, 0xDE, 0x7C, 0xD3, 0xFA, 0xF2, 0x94, 0xFB, 0x53, 0x3C, 0xEE, 0x08, 0x45, 0x31, 0x77, 0xF1, 0x78, 0x1B, 0xE7, 0xD0, + 0x45, 0xE4, 0xD3, 0xE0, 0x75, 0x82, 0xE5, 0xE7, 0xA1, 0x11, 0x75, 0xE4, 0x3A, 0x23, 0x65, 0xC2, 0x6B, 0x24, 0xC4, 0xCB, 0x13, + 0xFC, 0x6C, 0x42, 0x86, 0xB2, 0x0E, 0xD3, 0xC8, 0xF0, 0x24, 0xB2, 0x1D, 0xFD, 0xB8, 0x3B, 0x1B, 0x1D, 0x56, 0xF1, 0xB3, 0x93, + 0xC0, 0xE5, 0xEF, 0x47, 0xE7, 0xEA, 0xE1, 0xA3, 0x74, 0xD8, 0xC1, 0xF8, 0x83, 0xE3, 0xA3, 0x6E, 0x88, 0xCE, 0x61, 0xF2, 0x5B, + 0x04, 0x5B, 0xDE, 0x19, 0xD5, 0xE7, 0x66, 0xF0, 0x1C, 0x11, 0x9C, 0xEF, 0x92, 0xA2, 0x24, 0x67, 0xA0, 0x04, 0x51, 0x94, 0x64, + 0x1A, 0xA6, 0x08, 0xA1, 0x46, 0x03, 0xFF, 0x51, 0xC4, 0x55, 0xE0, 0x6E, 0x43, 0x08, 0x2F, 0xBA, 0xCF, 0x89, 0xC4, 0x20, 0x74, + 0x1C, 0x17, 0xEA, 0xEC, 0x89, 0xFE, 0x14, 0xCE, 0xBC, 0xA2, 0x03, 0x3A, 0x8C, 0xC3, 0xB8, 0xC1, 0x2A, 0x9B, 0x07, 0x2F, 0xA3, + 0x1E, 0x85, 0x93, 0x63, 0xE1, 0xA7, 0xA1, 0x17, 0x2F, 0x16, 0x16, 0x14, 0x9E, 0xED, 0x6B, 0x12, 0x1A, 0x31, 0xD2, 0xD2, 0xA8, + 0xEC, 0xDC, 0x08, 0xD4, 0x51, 0x78, 0x1E, 0x1E, 0x3C, 0x23, 0x15, 0xE1, 0x32, 0x44, 0xCC, 0x15, 0x79, 0x0F, 0xE0, 0xB2, 0xB8, + 0x8A, 0x2F, 0x8B, 0x76, 0x1B, 0x23, 0xCB, 0x65, 0xD3, 0x62, 0xA6, 0x20, 0x41, 0x1F, 0x52, 0x71, 0x3A, 0x77, 0x29, 0x02, 0xC8, + 0x3C, 0x72, 0xA0, 0xC9, 0xDB, 0x2A, 0x94, 0xE5, 0xC6, 0x79, 0x28, 0x30, 0x38, 0x4E, 0x76, 0x78, 0xE2, 0x18, 0x12, 0xC0, 0x8B, + 0xA4, 0x58, 0x23, 0x59, 0x10, 0xD4, 0x16, 0xB4, 0x3A, 0xCE, 0xA2, 0x82, 0x72, 0xCA, 0x43, 0x46, 0x2B, 0xD7, 0x00, 0x3C, 0xB9, + 0xC1, 0x29, 0xF6, 0x78, 0x87, 0xDC, 0x8B, 0x8B, 0x3C, 0x55, 0x60, 0x3B, 0xE7, 0x22, 0xE4, 0x5B, 0x2B, 0x27, 0x97, 0x57, 0x7C, + 0x60, 0x8D, 0x64, 0xF9, 0x77, 0x31, 0x86, 0xFE, 0xC1, 0x23, 0x2D, 0x15, 0xDA, 0xCD, 0xAA, 0xA5, 0x93, 0x79, 0xFB, 0x14, 0x61, + 0x51, 0x02, 0xEE, 0x98, 0x72, 0xAF, 0xEA, 0xD8, 0xA3, 0x1D, 0x25, 0x4D, 0x54, 0xA7, 0x51, 0xC2, 0x51, 0x9D, 0x48, 0x54, 0x67, + 0x80, 0x6A, 0xBC, 0x4E, 0x21, 0x50, 0x9D, 0x5D, 0x15, 0x97, 0x19, 0x47, 0x75, 0x3A, 0xCD, 0x9C, 0xA8, 0xA6, 0x70, 0xA6, 0x18, + 0xE8, 0x55, 0x1F, 0x1F, 0x21, 0x64, 0xF6, 0x6A, 0xCC, 0x76, 0x3E, 0x67, 0x18, 0x74, 0xBF, 0xE1, 0x3F, 0x59, 0xFC, 0xE1, 0xA7, + 0x78, 0xCD, 0x43, 0x95, 0xCE, 0x23, 0xAB, 0xA8, 0xD8, 0x4F, 0x36, 0x3C, 0x26, 0xE7, 0xA2, 0x68, 0xCD, 0x2B, 0x3B, 0x4B, 0xB1, + 0x59, 0xE3, 0xCB, 0x07, 0xDC, 0xC9, 0x05, 0x05, 0x15, 0xFE, 0xF2, 0x18, 0xB4, 0xB7, 0x03, 0x92, 0xFB, 0x59, 0x1C, 0x6A, 0x98, + 0xAE, 0x34, 0x54, 0x88, 0xBB, 0x9A, 0x76, 0x80, 0xB9, 0xA8, 0x98, 0xCF, 0xEF, 0xE4, 0x8C, 0x93, 0x11, 0x00, 0xB6, 0x58, 0x41, + 0xC4, 0x24, 0xA0, 0x21, 0x26, 0xBF, 0xA1, 0x03, 0x63, 0x10, 0x16, 0xA8, 0x5E, 0xC0, 0xFF, 0x60, 0x2F, 0xB8, 0x45, 0xE3, 0x4E, + 0xCC, 0x99, 0x06, 0xF2, 0x66, 0xE1, 0xD6, 0xCC, 0xBB, 0x42, 0x04, 0x73, 0x3F, 0x29, 0x15, 0x81, 0x25, 0x97, 0xC5, 0x48, 0x68, + 0x63, 0x86, 0xF2, 0x27, 0x14, 0xC4, 0x92, 0x33, 0xB1, 0x2A, 0xC0, 0x61, 0x61, 0x30, 0x65, 0xDF, 0x10, 0xC4, 0xF2, 0x80, 0x18, + 0xEC, 0xB3, 0x59, 0x3E, 0x89, 0xF2, 0x5F, 0x77, 0x8C, 0x41, 0x38, 0x59, 0xFD, 0xF3, 0x10, 0x84, 0x77, 0x52, 0xD5, 0x1E, 0x81, + 0xC3, 0x89, 0xCA, 0x67, 0xA2, 0x18, 0x5B, 0x00, 0x98, 0xA4, 0x0E, 0xFC, 0x99, 0x90, 0x5B, 0x0A, 0xE5, 0x7B, 0xF7, 0x2F, 0x47, + 0xAE, 0x39, 0x90, 0xCF, 0x80, 0x60, 0xA4, 0x59, 0x03, 0xC5, 0x72, 0x80, 0xCF, 0x46, 0xB3, 0x6C, 0x07, 0x19, 0x46, 0xF3, 0x52, + 0xE1, 0xCC, 0xC6, 0xFF, 0x84, 0x75, 0x82, 0xAD, 0xC3, 0x04, 0x61, 0xD3, 0x5F, 0x3F, 0xFC, 0x4C, 0x1B, 0xB9, 0x15, 0x15, 0xB4, + 0x36, 0x8F, 0x41, 0xBD, 0x77, 0x9E, 0x21, 0x9B, 0xC1, 0xF6, 0x7D, 0x07, 0x90, 0x3B, 0xA1, 0x72, 0xBF, 0xCD, 0x90, 0x8E, 0x7F, + 0xA0, 0xD8, 0xEE, 0x48, 0x04, 0xE5, 0x3E, 0x5A, 0x41, 0x08, 0x8E, 0x8F, 0xF5, 0x37, 0xD1, 0x6A, 0x27, 0x59, 0x28, 0x28, 0x64, + 0xC2, 0x6E, 0x43, 0x8D, 0xBE, 0xCD, 0x84, 0xDD, 0x44, 0xEF, 0xBE, 0xBC, 0xF2, 0x65, 0x1D, 0x6C, 0xC9, 0xC5, 0x7D, 0x7E, 0xB9, + 0x3D, 0x7A, 0xF5, 0x78, 0x44, 0xB4, 0x59, 0x7D, 0x0B, 0x83, 0x9F, 0xF2, 0x04, 0xC7, 0xC7, 0xB9, 0xEC, 0x0C, 0x6F, 0xA0, 0x91, + 0x53, 0x5D, 0x4E, 0x6C, 0x06, 0xA3, 0x40, 0xED, 0x9A, 0x70, 0xAE, 0xEF, 0xE4, 0x59, 0xDB, 0x15, 0x49, 0x3B, 0xDF, 0x6C, 0x8A, + 0x32, 0xBB, 0x93, 0xE5, 0x1E, 0x17, 0xAC, 0x44, 0x9B, 0x65, 0x89, 0xBE, 0x8F, 0x3B, 0xCE, 0x55, 0x97, 0x87, 0x71, 0xD5, 0xA4, + 0x10, 0x87, 0xD6, 0x6C, 0x11, 0x1D, 0xF5, 0x64, 0xDA, 0x6B, 0x10, 0xA3, 0xF9, 0x51, 0x76, 0x7A, 0x63, 0x24, 0x73, 0x75, 0xE6, + 0x5B, 0x50, 0xB7, 0x6A, 0x89, 0x6F, 0x60, 0xB3, 0x32, 0xDB, 0xD0, 0xDC, 0x7A, 0x63, 0x24, 0x74, 0xAA, 0x92, 0x82, 0x83, 0xB0, + 0x38, 0x1D, 0x66, 0xE9, 0xCF, 0x76, 0x06, 0xBF, 0x1E, 0x4F, 0x7B, 0x99, 0xF4, 0x83, 0xD4, 0x1A, 0x56, 0x24, 0x83, 0x19, 0x63, + 0x7A, 0xC5, 0x8C, 0x63, 0xE5, 0x11, 0xC3, 0x32, 0x13, 0xB8, 0x7A, 0x2C, 0x92, 0x76, 0x71, 0xF1, 0x90, 0xE2, 0xA9, 0x79, 0xBA, + 0x40, 0x1B, 0x04, 0xCE, 0x40, 0xE4, 0xFD, 0x01, 0x22, 0x11, 0xB0, 0x09, 0x1C, 0x59, 0x02, 0xFF, 0x70, 0xD2, 0x4B, 0x23, 0xA2, + 0x38, 0xEE, 0xED, 0x82, 0x0B, 0x9F, 0xC2, 0x5B, 0x6A, 0xC7, 0xB4, 0x14, 0xF6, 0x55, 0x6E, 0x85, 0xEF, 0xE8, 0x13, 0xD4, 0x90, + 0x71, 0x51, 0x15, 0xDB, 0xE6, 0x77, 0x8C, 0x80, 0xF9, 0x08, 0x19, 0x1A, 0x1D, 0x1A, 0xD1, 0xBA, 0xCC, 0xC9, 0x0C, 0x21, 0x90, + 0x7C, 0x11, 0x03, 0xC8, 0xE3, 0x15, 0x41, 0x0D, 0x9B, 0xCC, 0x51, 0xB0, 0x11, 0x60, 0xB0, 0xC3, 0x23, 0x74, 0x9A, 0x53, 0xD2, + 0xED, 0x43, 0xF8, 0xBF, 0x1B, 0xD2, 0x40, 0xC2, 0xC7, 0x8F, 0x7A, 0xE5, 0xCB, 0x17, 0x20, 0x60, 0x83, 0x3C, 0xC5, 0x8F, 0xAB, + 0x30, 0x84, 0x2C, 0x8A, 0x3E, 0x51, 0x2E, 0xBC, 0x99, 0x1F, 0xD5, 0x21, 0x13, 0x9D, 0x20, 0x66, 0xF6, 0x09, 0x5D, 0x0A, 0xAC, + 0x57, 0x7A, 0x4F, 0xDA, 0x43, 0xE1, 0x53, 0xE1, 0xA3, 0xB3, 0xB3, 0x35, 0x10, 0xC9, 0x39, 0x7D, 0x06, 0xA2, 0x88, 0x71, 0xF1, + 0x1E, 0x86, 0x22, 0x86, 0x86, 0x0F, 0x4C, 0x82, 0x90, 0x72, 0xD4, 0x93, 0x8F, 0xE4, 0x01, 0x7C, 0xB0, 0x9C, 0x71, 0x0D, 0xC5, + 0x1D, 0x75, 0x2C, 0x6F, 0x86, 0xC3, 0x60, 0xA7, 0x3D, 0x76, 0x72, 0x8E, 0xEF, 0x7B, 0x1E, 0x21, 0x03, 0xC0, 0x62, 0xEA, 0x78, + 0xDE, 0x2C, 0x57, 0x1A, 0xE5, 0x72, 0x2A, 0x27, 0x8F, 0xE9, 0x23, 0xDB, 0xCF, 0x11, 0x23, 0x90, 0x24, 0xE4, 0xAC, 0x63, 0xA4, + 0x03, 0x22, 0x41, 0x42, 0xC8, 0xEE, 0xFD, 0x00, 0x9A, 0x19, 0x90, 0x0C, 0x84, 0xE7, 0xF4, 0x51, 0x72, 0xC9, 0xE5, 0x1C, 0x8D, + 0x29, 0xB5, 0x41, 0xC5, 0x36, 0xB6, 0x8A, 0xA7, 0xB0, 0x35, 0x27, 0xB7, 0x70, 0x13, 0x5B, 0x3C, 0xBD, 0x42, 0x94, 0xDC, 0x2D, + 0x1B, 0x03, 0xF3, 0x89, 0xF5, 0xC8, 0xCD, 0x85, 0x18, 0x8D, 0xF4, 0xC1, 0x97, 0xC1, 0x06, 0x9F, 0xDC, 0xCD, 0xD0, 0xE6, 0xA1, + 0xD8, 0x8F, 0x01, 0xC5, 0xB8, 0xC5, 0x9B, 0x6B, 0x25, 0x45, 0x0B, 0xC3, 0xB6, 0x93, 0xF3, 0x9C, 0xF0, 0x6E, 0xA7, 0xC7, 0x1D, + 0x6A, 0x37, 0x54, 0xCB, 0x00, 0x43, 0x2C, 0x50, 0xA8, 0x12, 0xCC, 0x26, 0x40, 0x8F, 0x28, 0x2A, 0xDD, 0xDF, 0x04, 0xE4, 0x07, + 0x11, 0x68, 0x10, 0x0F, 0x6E, 0x93, 0x34, 0x46, 0x9C, 0x02, 0xB7, 0xC6, 0x6B, 0x07, 0x3A, 0x48, 0xC8, 0x68, 0x87, 0xD7, 0x0D, + 0xA3, 0x04, 0x23, 0x74, 0xF0, 0x33, 0xC6, 0x28, 0x0F, 0x8D, 0x38, 0xD5, 0xC9, 0x02, 0xD5, 0xA7, 0x2A, 0x97, 0x4E, 0x16, 0xE8, + 0xFF, 0xE9, 0x63, 0xB6, 0x08, 0x53, 0x77, 0x83, 0xBC, 0x09, 0xA6, 0x58, 0xF2, 0x10, 0x7C, 0x7D, 0x8B, 0x2F, 0x7B, 0x69, 0x2B, + 0x62, 0xE8, 0x28, 0x66, 0xCB, 0x14, 0xC2, 0x3E, 0x85, 0xEF, 0xA1, 0x3B, 0x66, 0xF6, 0x1D, 0x5D, 0x09, 0x12, 0x65, 0xFC, 0xCC, + 0x50, 0xA4, 0x31, 0x96, 0x25, 0x88, 0x20, 0x6A, 0xA6, 0x4B, 0xC3, 0x74, 0x64, 0x6D, 0xAA, 0x72, 0x8E, 0x0D, 0xC6, 0xB7, 0xDD, + 0x3E, 0x77, 0xEA, 0xC7, 0x36, 0xBE, 0x7F, 0x40, 0x84, 0xF3, 0x7A, 0x1D, 0xBB, 0xEB, 0x71, 0x8B, 0x7E, 0xB4, 0xB8, 0xF6, 0xDA, + 0x02, 0xA4, 0x11, 0x05, 0x5C, 0x33, 0x96, 0x12, 0x19, 0x90, 0x85, 0x06, 0x66, 0x83, 0x62, 0x02, 0xB7, 0xE6, 0x71, 0xFA, 0x45, + 0x89, 0xC0, 0x53, 0x87, 0xB0, 0x43, 0x74, 0x5A, 0x6F, 0xF3, 0x07, 0x28, 0xA8, 0x37, 0x92, 0x8E, 0x78, 0x4C, 0xB3, 0x3E, 0x01, + 0x95, 0xD3, 0x41, 0xDC, 0x31, 0x1D, 0xA5, 0x8C, 0xD3, 0x46, 0xEF, 0x33, 0x8C, 0x4E, 0xD2, 0x93, 0x18, 0x9F, 0x50, 0x13, 0xE5, + 0x3B, 0x98, 0xA0, 0xF7, 0x7F, 0x4C, 0xC8, 0x9B, 0xFF, 0xF2, 0x20, 0x78, 0x85, 0x73, 0x3A, 0xEC, 0xBC, 0xC9, 0x8D, 0xB8, 0xBC, + 0x63, 0x4C, 0x53, 0xA7, 0x52, 0x23, 0x64, 0xD5, 0x14, 0xD4, 0x38, 0xF6, 0x0E, 0xF8, 0xC9, 0x2E, 0x8C, 0xD2, 0x21, 0x33, 0x7F, + 0x71, 0xD2, 0x2D, 0xA3, 0x47, 0x65, 0xA2, 0xAC, 0xD6, 0xDD, 0x85, 0x79, 0x13, 0x2D, 0x97, 0x4F, 0xD3, 0x72, 0x6E, 0xD1, 0x72, + 0x6E, 0xD3, 0x32, 0x99, 0x3B, 0x9D, 0x54, 0x8C, 0x5B, 0xF1, 0xE7, 0x26, 0x5F, 0x6E, 0x5C, 0x6D, 0xD1, 0x9F, 0xCF, 0x4E, 0xB8, + 0x32, 0x74, 0x72, 0xED, 0x7E, 0xD4, 0xBF, 0x82, 0x08, 0x1D, 0x93, 0x8F, 0x08, 0x04, 0x31, 0xDC, 0x98, 0x5D, 0x3E, 0x7C, 0x95, + 0xF9, 0x7F, 0x6B, 0x5A, 0x8D, 0x0B, 0x68, 0xD5, 0xCD, 0x47, 0x09, 0x93, 0x9F, 0xC6, 0xEF, 0x55, 0xCB, 0x88, 0x19, 0x91, 0x28, + 0xB7, 0x9E, 0xB9, 0x6C, 0x1A, 0xB0, 0xE1, 0x16, 0x3D, 0xBB, 0x97, 0xDC, 0x74, 0xFA, 0x68, 0xD9, 0xEB, 0x87, 0xFD, 0x1D, 0xEC, + 0x98, 0x0D, 0x78, 0xE0, 0x1A, 0x43, 0x23, 0x0E, 0x4A, 0x0B, 0x07, 0x66, 0x31, 0x72, 0x05, 0x91, 0x47, 0x42, 0x20, 0x4C, 0x57, + 0x90, 0x20, 0xC4, 0xE4, 0xBF, 0x8D, 0x05, 0xF9, 0x09, 0x54, 0x28, 0x28, 0xB6, 0x75, 0x2F, 0xE8, 0x59, 0x78, 0x3F, 0x2D, 0x37, + 0x2B, 0x2D, 0x76, 0x76, 0x77, 0x95, 0x55, 0x24, 0x94, 0xA9, 0xA3, 0xAE, 0x63, 0x8A, 0x80, 0xC9, 0x76, 0x5D, 0x40, 0xEF, 0x1C, + 0xDB, 0x5F, 0x7D, 0xF9, 0x56, 0xA4, 0xEC, 0xBD, 0x3E, 0xA4, 0xF6, 0xF0, 0xAA, 0xAD, 0xBB, 0xE7, 0x9A, 0x63, 0x60, 0x21, 0x17, + 0xA8, 0xAC, 0xD4, 0xE2, 0xFB, 0x6F, 0x0B, 0xF6, 0x6C, 0x4B, 0x31, 0xAB, 0x0A, 0xFD, 0xAE, 0xC4, 0x76, 0xCF, 0xA9, 0x20, 0x08, + 0xAA, 0x16, 0x2F, 0x33, 0xE8, 0x49, 0x95, 0x7A, 0x20, 0x99, 0xDF, 0x8D, 0x7B, 0xB8, 0x2A, 0xE6, 0x52, 0xCB, 0x3A, 0xF9, 0xB0, + 0x0E, 0x3E, 0xBE, 0xBB, 0x5B, 0x97, 0x0F, 0x2D, 0xEE, 0xCC, 0xDE, 0x12, 0x87, 0xA4, 0x68, 0xF9, 0xE8, 0x72, 0xE3, 0x44, 0x54, + 0x58, 0xE7, 0x0B, 0xBE, 0xA7, 0x7A, 0x45, 0x92, 0x7C, 0xB6, 0x2D, 0xC2, 0xE4, 0x30, 0x95, 0x51, 0x54, 0x8E, 0x2E, 0xE8, 0x1E, + 0x56, 0x03, 0xD0, 0x64, 0x69, 0x74, 0x11, 0x84, 0xBC, 0x5D, 0xDC, 0x64, 0x1B, 0x58, 0x6A, 0xE0, 0xE9, 0x49, 0x86, 0xEA, 0x3E, + 0x26, 0x4E, 0x43, 0x83, 0xC0, 0xD4, 0xB8, 0x4A, 0xF1, 0xE1, 0xD6, 0xD9, 0x64, 0x6E, 0x35, 0x43, 0x07, 0x38, 0xAD, 0xF5, 0xC2, + 0xCF, 0x57, 0x45, 0x27, 0xA6, 0x6E, 0x58, 0xF2, 0x5F, 0x7B, 0xAA, 0xAA, 0x53, 0x5A, 0x51, 0x5B, 0xE9, 0xAA, 0x64, 0x37, 0x29, + 0x3B, 0x32, 0x1F, 0x07, 0x27, 0xBF, 0x51, 0x7F, 0x97, 0xC8, 0x12, 0xB0, 0x2A, 0xD7, 0x0B, 0xD4, 0xF0, 0x95, 0xB6, 0x69, 0x54, + 0xC1, 0xDF, 0xC1, 0x1E, 0x38, 0x6A, 0x87, 0xC1, 0x3C, 0x8C, 0xCB, 0xB0, 0xCF, 0x5F, 0x23, 0xAB, 0xE4, 0x3A, 0x16, 0x25, 0x07, + 0x64, 0xBB, 0xDD, 0x23, 0x2F, 0xBA, 0x36, 0xE1, 0x03, 0x56, 0xF6, 0x73, 0x79, 0x58, 0x8D, 0x0C, 0x79, 0xFF, 0x6A, 0x2D, 0x98, + 0x9B, 0x30, 0x34, 0x35, 0x17, 0xA3, 0x92, 0xBC, 0x1D, 0xF4, 0xFF, 0x6F, 0x14, 0x0F, 0xF0, 0xE5, 0xD3, 0x2D, 0x75, 0x8C, 0x89, + 0x13, 0x5F, 0xF1, 0xAE, 0x8E, 0x58, 0xC2, 0xFA, 0x00, 0xD7, 0xC7, 0xE7, 0x92, 0xF0, 0x03, 0xC3, 0x27, 0xD4, 0x08, 0x46, 0x9E, + 0xB3, 0x07, 0x13, 0x83, 0xB3, 0x1B, 0x9B, 0xDB, 0x78, 0xCF, 0xFA, 0xFE, 0x14, 0x14, 0x28, 0x0D, 0x06, 0x94, 0x67, 0x83, 0x29, + 0xE8, 0x58, 0x6F, 0x75, 0xF8, 0x15, 0x0F, 0x62, 0xE2, 0x68, 0x73, 0x51, 0x1B, 0x06, 0x39, 0x14, 0x07, 0x13, 0x5F, 0x97, 0xC0, + 0x94, 0x5A, 0x31, 0x90, 0x59, 0x84, 0x96, 0x63, 0x15, 0x43, 0xF5, 0xDE, 0xE3, 0x26, 0x00, 0x8F, 0x6E, 0x5F, 0x62, 0xAA, 0x38, + 0xFD, 0xC6, 0xA3, 0x9F, 0xA6, 0x5E, 0xB9, 0x65, 0x6B, 0xE2, 0xDB, 0xEB, 0x45, 0x1B, 0xCB, 0x89, 0xBF, 0x85, 0xBA, 0x3E, 0x91, + 0x3E, 0xB6, 0x8F, 0x1F, 0x07, 0xB4, 0xAF, 0x3C, 0xA6, 0x03, 0xB9, 0x98, 0x54, 0x27, 0xB6, 0xE1, 0xB8, 0xDA, 0x91, 0xAC, 0x48, + 0x9D, 0xC9, 0x1F, 0xB2, 0xC3, 0xFD, 0x46, 0x4E, 0xBC, 0x6F, 0x2A, 0x37, 0x03, 0xA2, 0x3F, 0xBE, 0x4F, 0x0A, 0xE9, 0xB5, 0x6E, + 0x2E, 0xEB, 0xEE, 0x35, 0x97, 0x35, 0xB2, 0x4B, 0x2D, 0xC8, 0x88, 0xF3, 0xA1, 0x23, 0x52, 0x4E, 0xCD, 0x3B, 0xDF, 0xB4, 0x20, + 0xDD, 0x44, 0xF9, 0xB7, 0x36, 0x07, 0x63, 0x54, 0x95, 0x8D, 0x61, 0x07, 0x23, 0x26, 0x2F, 0x6D, 0x39, 0x68, 0x19, 0x2A, 0xBF, + 0x69, 0x14, 0x0B, 0xA3, 0xB0, 0x1C, 0x88, 0xC3, 0xA2, 0xB8, 0xAB, 0xAC, 0xE4, 0x47, 0x87, 0x29, 0xB1, 0xFB, 0x34, 0xC2, 0x44, + 0x59, 0xD9, 0x51, 0xF3, 0xC2, 0xD4, 0x7D, 0x29, 0x79, 0x29, 0x29, 0x6F, 0x5B, 0x48, 0x3C, 0x2D, 0x6E, 0xAA, 0x90, 0xAF, 0xBE, + 0x55, 0x99, 0x76, 0xB0, 0xAB, 0x1B, 0x1D, 0x01, 0xDE, 0x4F, 0xDB, 0x12, 0x9D, 0x56, 0xCD, 0xE0, 0xB3, 0x9B, 0x7A, 0xCD, 0xE7, + 0x2C, 0x75, 0x34, 0x28, 0x11, 0xC1, 0x59, 0x9C, 0x3A, 0x72, 0xD1, 0xE5, 0x97, 0xE5, 0x12, 0x14, 0x84, 0xD0, 0x94, 0x63, 0xDA, + 0x66, 0x4E, 0x20, 0xCC, 0xC6, 0xB7, 0xCA, 0x6C, 0xBC, 0xDC, 0x67, 0x36, 0xE6, 0xB8, 0xB5, 0xCD, 0xAE, 0xEA, 0xF2, 0x93, 0x95, + 0x5C, 0x88, 0x27, 0x8D, 0xCC, 0xB4, 0x92, 0x8B, 0xD7, 0x18, 0xF4, 0x29, 0x06, 0x3A, 0xC9, 0x13, 0x24, 0x55, 0xAB, 0x84, 0x12, + 0x29, 0x9E, 0x28, 0xF3, 0x33, 0x39, 0x2D, 0x36, 0x95, 0x20, 0xCB, 0x3E, 0x39, 0x9B, 0x00, 0x31, 0x6A, 0xEA, 0x46, 0xB2, 0x54, + 0x9A, 0x4C, 0x4A, 0x8F, 0xDC, 0xD2, 0xAA, 0x55, 0xD6, 0x34, 0x97, 0xB4, 0x6C, 0x1E, 0x81, 0x36, 0xCB, 0x50, 0x9E, 0xBD, 0xF4, + 0xAC, 0x3B, 0x64, 0x12, 0x43, 0x63, 0x49, 0x99, 0x32, 0x6C, 0x80, 0x5A, 0x47, 0xA7, 0x9A, 0x8D, 0x78, 0x81, 0x7D, 0xEE, 0x95, + 0xC6, 0x1F, 0x93, 0x9B, 0x18, 0x66, 0xA2, 0x73, 0x2D, 0xFD, 0x8F, 0x0F, 0xDD, 0x98, 0x9B, 0xA0, 0xC0, 0x11, 0xB6, 0xAE, 0xA1, + 0x09, 0xC0, 0x52, 0x6B, 0x91, 0xB1, 0x82, 0x14, 0x61, 0xFE, 0x2E, 0x23, 0x64, 0xB2, 0x96, 0xEA, 0xA9, 0x75, 0xCF, 0xAE, 0x5B, + 0xF1, 0x3A, 0x09, 0x41, 0x4F, 0x66, 0xAD, 0xDB, 0xB2, 0x5C, 0x17, 0xE3, 0xD3, 0xD3, 0x05, 0x5E, 0x59, 0x42, 0x7E, 0xDD, 0xB9, + 0xCB, 0xFE, 0x4A, 0x56, 0xAB, 0xB8, 0x93, 0xE5, 0x37, 0xA7, 0x2C, 0x3D, 0xF9, 0xED, 0xCD, 0xE9, 0x22, 0x9B, 0x17, 0xA7, 0xFF, + 0xC9, 0xAE, 0x4F, 0xBF, 0xFA, 0xF5, 0x07, 0xFC, 0xFB, 0x4E, 0x79, 0x4D, 0xBF, 0x83, 0x14, 0x8F, 0x2B, 0xAD, 0x14, 0xF8, 0xE2, + 0xB2, 0xCA, 0xF6, 0x14, 0xF2, 0x39, 0x96, 0xC8, 0x8A, 0x6D, 0x6B, 0x5E, 0x22, 0xFE, 0xC5, 0x47, 0xA2, 0x6E, 0x9B, 0x20, 0x73, + 0x5B, 0x13, 0x33, 0x19, 0xB3, 0x5C, 0xB2, 0xF8, 0x5C, 0xEC, 0x3C, 0x4F, 0xAE, 0x41, 0xC9, 0xB3, 0x10, 0x43, 0x2B, 0xAC, 0xF0, + 0xF1, 0xA4, 0xDC, 0xEC, 0x4E, 0x34, 0xF0, 0x36, 0x13, 0x1D, 0x1A, 0xBD, 0x05, 0x35, 0xC2, 0xC7, 0xD8, 0x9C, 0x66, 0xE5, 0x1B, + 0x56, 0x8A, 0x57, 0xB3, 0xFC, 0x4A, 0xD1, 0xC0, 0x5E, 0x1D, 0x59, 0x58, 0xA9, 0x66, 0x53, 0x75, 0xE1, 0x9B, 0xA5, 0x6D, 0x4D, + 0xD4, 0x1E, 0xCF, 0xCF, 0x59, 0x99, 0x2C, 0x93, 0x79, 0xCC, 0xAF, 0x0A, 0x3A, 0x38, 0x72, 0xD7, 0xAA, 0x6C, 0x6E, 0x73, 0xF8, + 0x7C, 0xC1, 0xF3, 0x77, 0x97, 0x06, 0xE2, 0xB2, 0x37, 0x17, 0xBE, 0xDA, 0xF4, 0x96, 0x51, 0x39, 0xE5, 0x6B, 0x5C, 0xA7, 0xDD, + 0xAA, 0x5E, 0xAD, 0x34, 0xD7, 0x86, 0x49, 0x9E, 0x7C, 0xE2, 0xD2, 0xD4, 0xA0, 0xD5, 0x56, 0xA7, 0xB5, 0xD1, 0x05, 0x78, 0x63, + 0xD6, 0x6D, 0xF1, 0xB0, 0xD5, 0x69, 0x9B, 0xF2, 0xFE, 0x3E, 0x50, 0xCA, 0x1E, 0x85, 0xFA, 0xF0, 0x9C, 0xAD, 0x56, 0x04, 0x8C, + 0x2D, 0x22, 0xD4, 0xEB, 0xF9, 0x14, 0x88, 0x44, 0x88, 0x34, 0x15, 0x93, 0x85, 0xF2, 0x13, 0x61, 0x3A, 0x42, 0x05, 0x0F, 0xA9, + 0x84, 0x31, 0x82, 0xCC, 0x8D, 0xE2, 0x55, 0xF7, 0x92, 0x84, 0x13, 0x60, 0x93, 0x2E, 0x13, 0x88, 0x4D, 0xAA, 0xFE, 0x3E, 0xFE, + 0x1D, 0x04, 0x56, 0xB3, 0xC7, 0xC7, 0x66, 0x7B, 0x55, 0xFD, 0xBB, 0x7A, 0x61, 0x1D, 0x86, 0xF2, 0x09, 0xD2, 0x8F, 0x8D, 0x52, + 0x0B, 0x07, 0x6E, 0x2A, 0xB5, 0x2D, 0x40, 0xEA, 0xA8, 0x19, 0x77, 0xD8, 0x4B, 0x03, 0x5C, 0xE7, 0x1E, 0xC6, 0xE3, 0x7E, 0xFD, + 0x07, 0x1E, 0xAC, 0xA1, 0x0F, 0x62, 0x05, 0xF1, 0x15, 0x44, 0x31, 0xFE, 0xFC, 0x34, 0x6F, 0x9E, 0xB7, 0xCC, 0x63, 0x82, 0xF3, + 0xFA, 0x5A, 0x2F, 0x88, 0xE4, 0x9B, 0x0C, 0x61, 0xF9, 0xB9, 0xC6, 0x6F, 0x83, 0xD2, 0x80, 0x88, 0x2A, 0xA7, 0xE5, 0xA0, 0x5E, + 0x12, 0xF5, 0x33, 0x7A, 0x52, 0xB4, 0x2A, 0xB5, 0x2F, 0x93, 0x15, 0xB4, 0x59, 0x70, 0x45, 0x23, 0x7A, 0x14, 0x3F, 0xC7, 0xD3, + 0x47, 0xC1, 0xB9, 0xE0, 0xD3, 0x3B, 0xBB, 0x8E, 0x7B, 0xD7, 0xFD, 0xDE, 0xC5, 0x49, 0x6F, 0x14, 0x5F, 0x9C, 0x0C, 0xCF, 0x7A, + 0xCB, 0x93, 0x97, 0x4B, 0xF8, 0x1A, 0x2D, 0xE6, 0x31, 0xEB, 0x9F, 0x0F, 0x58, 0xBC, 0x44, 0xD7, 0xE7, 0x19, 0xDE, 0x6E, 0x36, + 0xF6, 0x06, 0x89, 0x22, 0xC7, 0x46, 0xD8, 0xA9, 0x6F, 0x09, 0x7F, 0x1F, 0x4F, 0x46, 0x8B, 0x0D, 0xE8, 0xA9, 0xEE, 0x0C, 0x0A, + 0x41, 0xCD, 0xAB, 0xBD, 0x60, 0x2B, 0xE2, 0x15, 0xD4, 0x20, 0xDE, 0xEA, 0x6A, 0x7B, 0x61, 0x0B, 0x06, 0x89, 0xE6, 0xBD, 0x32, + 0x93, 0x82, 0x00, 0x48, 0xAB, 0xF7, 0x5E, 0x20, 0x2C, 0x45, 0x92, 0x30, 0x60, 0xCC, 0x65, 0x47, 0x2D, 0xEB, 0xCF, 0xC4, 0xA7, + 0x25, 0xEC, 0x6E, 0x07, 0xD7, 0x52, 0x8E, 0xD4, 0xD8, 0xC6, 0xD4, 0x20, 0x2B, 0xD0, 0xB1, 0xF2, 0xD7, 0x3C, 0xB9, 0x8B, 0xF3, + 0x07, 0x59, 0xF0, 0xB0, 0x79, 0xFE, 0xDB, 0x03, 0xD1, 0xA0, 0x3D, 0x3D, 0x86, 0xEA, 0x9E, 0x2A, 0x16, 0xE0, 0x1E, 0x91, 0xD4, + 0x18, 0x5E, 0x65, 0xF1, 0x7A, 0xCB, 0xF3, 0xD1, 0xFC, 0xFC, 0x6C, 0xD1, 0x3F, 0xE9, 0xF5, 0x5F, 0xB2, 0x93, 0xE1, 0x22, 0x5E, + 0x9C, 0xC4, 0xBD, 0xC5, 0xE2, 0xE4, 0xFC, 0xE2, 0xEC, 0xAC, 0xD7, 0x1F, 0x0E, 0xBB, 0x3D, 0x76, 0xEE, 0x55, 0x34, 0x15, 0xDB, + 0x39, 0x5A, 0x1B, 0x70, 0x57, 0x0F, 0xAD, 0x1B, 0xB4, 0x7A, 0x5A, 0x5D, 0xB4, 0x2A, 0xBE, 0xD1, 0xCD, 0x60, 0x4A, 0x87, 0x88, + 0x26, 0xA1, 0x79, 0xCF, 0x28, 0x2E, 0xAE, 0xE3, 0xFE, 0xF5, 0x7C, 0xDE, 0x3F, 0x61, 0xAC, 0xDB, 0x3F, 0x19, 0xC6, 0xA3, 0xD1, + 0x49, 0x3C, 0x1A, 0xF4, 0x4E, 0xE6, 0xA3, 0xFE, 0x68, 0x3E, 0x62, 0xC3, 0xD1, 0x70, 0x31, 0xFA, 0x7F, 0x30, 0x8A, 0xBA, 0x58, + 0xBF, 0x67, 0x0C, 0x6C, 0xF1, 0x72, 0x11, 0xF7, 0x2E, 0xE6, 0x27, 0xF1, 0x45, 0xB7, 0x7B, 0x32, 0x5C, 0x9E, 0x9D, 0x9D, 0xC4, + 0x67, 0xE7, 0xDD, 0x93, 0x38, 0x3E, 0x1F, 0x0D, 0xCF, 0xD9, 0x60, 0x38, 0x1C, 0x0D, 0xFE, 0x65, 0x63, 0xF8, 0x0C, 0xF4, 0x5C, + 0x21, 0x53, 0x37, 0x5D, 0x4B, 0x5F, 0x95, 0xBD, 0xE2, 0xDF, 0xA3, 0xB1, 0x5F, 0x39, 0xD1, 0x8A, 0x51, 0x6C, 0xF2, 0xD2, 0xAC, + 0x54, 0xF8, 0xFB, 0xA6, 0xC1, 0xE1, 0xBF, 0x63, 0xA3, 0x8A, 0x7C, 0x4A, 0xE6, 0xB6, 0x2B, 0x0F, 0xDF, 0xD7, 0x2B, 0xC0, 0x59, + 0xEE, 0x3C, 0xCD, 0x0C, 0x13, 0x6A, 0xE1, 0x81, 0x80, 0x06, 0xAF, 0x05, 0x7D, 0x25, 0x1F, 0xE9, 0x7A, 0x11, 0xA8, 0xD3, 0x4F, + 0xC9, 0xF2, 0x8F, 0x86, 0xB4, 0xEE, 0x80, 0x1D, 0x79, 0x2A, 0xEE, 0x4C, 0x2C, 0xAF, 0x5B, 0x33, 0x0C, 0xB8, 0xB5, 0x44, 0x6A, + 0x42, 0xBD, 0x73, 0x0F, 0x8C, 0x07, 0xB8, 0x6C, 0x24, 0xB5, 0xEA, 0x80, 0xCC, 0xC3, 0x01, 0xB3, 0x20, 0x13, 0xBB, 0x9F, 0xF3, + 0xB4, 0x49, 0x13, 0x59, 0x23, 0xE6, 0xC8, 0xA4, 0xE3, 0x18, 0x81, 0xB2, 0xEB, 0x54, 0xCD, 0x3D, 0x86, 0xA4, 0xDD, 0x20, 0x8E, + 0x4B, 0x43, 0x5C, 0xD5, 0xDE, 0x05, 0x1A, 0x05, 0x91, 0x62, 0x25, 0x74, 0xA2, 0x78, 0xDA, 0x07, 0x07, 0x41, 0x86, 0x84, 0x96, + 0x94, 0x1E, 0x13, 0x10, 0x6D, 0x52, 0x7D, 0x85, 0xA1, 0x50, 0xB1, 0xD9, 0xD5, 0xEB, 0xB0, 0x18, 0x31, 0xAE, 0x21, 0xE6, 0x1E, + 0xC6, 0xB8, 0x29, 0xC3, 0xFE, 0x97, 0xB2, 0xFD, 0x1D, 0x48, 0xE4, 0x6C, 0x80, 0x31, 0xBF, 0x77, 0xFE, 0x20, 0xEC, 0x57, 0x40, + 0xB1, 0x97, 0x80, 0x44, 0x81, 0xA9, 0xC2, 0xED, 0x8C, 0x29, 0xB5, 0x82, 0xAC, 0xEC, 0xEC, 0x9F, 0x9F, 0xB6, 0x9A, 0x5D, 0x24, + 0xD4, 0xC2, 0xEB, 0xC5, 0x20, 0x02, 0xC0, 0x7E, 0xAF, 0x84, 0x7A, 0x0F, 0xFD, 0xA8, 0x95, 0xEB, 0xDE, 0xEA, 0x30, 0x1B, 0xCC, + 0x26, 0x5F, 0x55, 0x0D, 0x30, 0x05, 0x9B, 0x6F, 0x60, 0x79, 0x30, 0xDE, 0x85, 0x88, 0xD8, 0x80, 0x2E, 0xF5, 0x7C, 0x49, 0x33, + 0xC0, 0x37, 0x22, 0x55, 0x5D, 0x85, 0x56, 0xDE, 0x71, 0x55, 0x7B, 0x08, 0x19, 0x43, 0xC2, 0x3C, 0xEA, 0xB1, 0xA1, 0xF0, 0x2B, + 0x23, 0xBB, 0xC8, 0x91, 0xC3, 0x2E, 0xA2, 0x6C, 0xA3, 0xFB, 0xFA, 0xAF, 0x9C, 0x3A, 0xE4, 0x2B, 0xF9, 0x22, 0x90, 0xF0, 0xB1, + 0xCC, 0x22, 0xAE, 0x3C, 0x4D, 0x3C, 0x69, 0x5D, 0xF0, 0xC6, 0xF4, 0x89, 0x5F, 0x7A, 0xB8, 0x59, 0x9B, 0x59, 0x4E, 0xB5, 0x07, + 0x6A, 0xB6, 0x52, 0xDB, 0x76, 0x22, 0x00, 0x08, 0x4D, 0xFE, 0x12, 0x6F, 0x78, 0xEA, 0x62, 0x26, 0x71, 0xE4, 0xA8, 0x1E, 0x1F, + 0xAA, 0xC8, 0xD9, 0xD1, 0x80, 0x9E, 0x69, 0xF9, 0xD9, 0x59, 0x8A, 0x72, 0xE3, 0x09, 0xFB, 0x93, 0x87, 0x90, 0x7B, 0x41, 0x7A, + 0x86, 0xC6, 0x7B, 0x39, 0x5F, 0xB1, 0x38, 0xB7, 0x91, 0xE4, 0x42, 0xA5, 0x34, 0xAF, 0x57, 0x59, 0xCB, 0x67, 0x53, 0x40, 0x6D, + 0xFD, 0xF3, 0x56, 0x47, 0x7F, 0xF3, 0x25, 0x85, 0xB4, 0xBD, 0xD3, 0x78, 0x9D, 0x9C, 0x7E, 0xEC, 0x9D, 0xE2, 0xFE, 0x25, 0xAF, + 0x5C, 0x62, 0x0C, 0xB1, 0x2A, 0x7B, 0x0D, 0xD9, 0x67, 0x56, 0x45, 0xF7, 0xAF, 0x81, 0x76, 0x3B, 0x7C, 0x9A, 0x79, 0x54, 0xA6, + 0xE8, 0x53, 0x94, 0xD5, 0x4F, 0x43, 0xD0, 0xAF, 0xBF, 0xBD, 0xF5, 0x42, 0xD4, 0x70, 0xD5, 0x5C, 0x99, 0x75, 0xC9, 0xE3, 0x90, + 0xE2, 0xB0, 0xE5, 0xC0, 0x82, 0xEC, 0x68, 0x92, 0x98, 0x3C, 0xE6, 0xB7, 0x4D, 0x78, 0xD7, 0x44, 0x18, 0x68, 0xA8, 0xBE, 0xA3, + 0xB7, 0xEB, 0xC7, 0x54, 0x62, 0x17, 0x18, 0x2F, 0x0C, 0x53, 0x6F, 0x63, 0xBB, 0x7C, 0x1D, 0x3C, 0x60, 0x78, 0x1C, 0x38, 0xD5, + 0x10, 0x01, 0x79, 0x4B, 0xAF, 0xAC, 0x17, 0xE3, 0x47, 0xB4, 0xF4, 0x03, 0x93, 0x2C, 0x4F, 0xC8, 0x9D, 0x75, 0xEC, 0x61, 0x48, + 0x4E, 0xB1, 0xA7, 0x9E, 0xFE, 0x79, 0x22, 0x2F, 0x1E, 0x7A, 0xBB, 0xF0, 0x3A, 0x5B, 0x3C, 0xD0, 0x05, 0x2B, 0x58, 0x48, 0xFD, + 0x2E, 0x3D, 0x27, 0x57, 0x09, 0xEF, 0x97, 0x74, 0x62, 0x83, 0xF6, 0xF0, 0x04, 0xB2, 0xC2, 0xEB, 0x71, 0x5E, 0x5A, 0x32, 0xD8, + 0xEF, 0x92, 0xB3, 0x6F, 0x3A, 0x56, 0x10, 0xF1, 0x00, 0xF1, 0xE4, 0xC9, 0x0C, 0x0A, 0x28, 0x91, 0xA8, 0x17, 0x89, 0x7F, 0x00, + 0x9B, 0x7C, 0x35, 0x08, 0x1A, 0xFC, 0x34, 0xE4, 0xC9, 0x80, 0x62, 0x0A, 0xFC, 0x0C, 0x99, 0x6E, 0xC2, 0x35, 0xFB, 0xA4, 0x1C, + 0x28, 0x25, 0x88, 0x4D, 0x67, 0x5D, 0xD9, 0x6A, 0x8C, 0x4D, 0x52, 0x1D, 0x56, 0x14, 0x7A, 0xA1, 0x12, 0x35, 0x17, 0x3B, 0x7E, + 0x79, 0xCE, 0xDA, 0xF4, 0x7C, 0xAE, 0x21, 0x32, 0x69, 0xBE, 0xE0, 0xAB, 0xFB, 0x36, 0x74, 0x36, 0xA8, 0xE2, 0x77, 0x32, 0xD1, + 0x94, 0xBD, 0x04, 0xDC, 0x6D, 0xAD, 0x0E, 0x6C, 0x0B, 0x14, 0xC3, 0x24, 0x5E, 0x59, 0xAD, 0xE1, 0xC5, 0x13, 0x23, 0x81, 0x35, + 0x8C, 0x53, 0x36, 0xB5, 0xA3, 0x6B, 0x4B, 0x0F, 0x91, 0xD7, 0xED, 0xF4, 0x3B, 0x5D, 0x6F, 0x37, 0xC3, 0x7D, 0xFA, 0xF2, 0xFF, + 0x07, 0x74, 0xD7, 0x2F, 0x4E, 0xB1, 0x4F, 0x01, 0x00, +}; + +// Length of the binary data +const int FAVICON_LENGTH = 2238; + +// Binary data for the favicon +const byte FAVICON_DATA[] = { + 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x20, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0xA8, 0x08, 0x00, 0x00, 0x16, 0x00, 0x00, + 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x84, + 0xDC, 0x3D, 0x00, 0x84, 0xDC, 0x3C, 0x00, 0x85, 0xDC, 0x3F, 0x00, 0x86, 0xDD, 0x40, 0x00, 0x83, 0xDC, 0x3C, 0x00, 0x85, 0xDC, + 0x3E, 0x00, 0x82, 0xDC, 0x3A, 0x00, 0x8B, 0xDE, 0x49, 0x00, 0x84, 0xDB, 0x3E, 0x00, 0x82, 0xD9, 0x3C, 0x00, 0x89, 0xDD, 0x45, + 0x00, 0x83, 0xDB, 0x3C, 0x00, 0x83, 0xD8, 0x3D, 0x00, 0x81, 0xD8, 0x3A, 0x00, 0x8D, 0xE0, 0x49, 0x00, 0x88, 0xE4, 0x3F, 0x00, + 0x89, 0xE9, 0x3E, 0x00, 0x84, 0xD8, 0x40, 0x00, 0x85, 0xDF, 0x3C, 0x00, 0x8E, 0xF2, 0x40, 0x00, 0x8D, 0xF6, 0x3D, 0x00, 0x90, + 0xEA, 0x49, 0x00, 0x82, 0xD5, 0x3E, 0x00, 0x78, 0xC1, 0x3A, 0x00, 0x90, 0xE9, 0x4A, 0x00, 0x8E, 0xF5, 0x3D, 0x00, 0x84, 0xDD, + 0x3D, 0x00, 0x91, 0xF7, 0x43, 0x00, 0x87, 0xE5, 0x3D, 0x00, 0x6C, 0xA2, 0x38, 0x00, 0x53, 0x65, 0x31, 0x00, 0x41, 0x39, 0x2E, + 0x00, 0x3A, 0x27, 0x2B, 0x00, 0x34, 0x1A, 0x2A, 0x00, 0x41, 0x38, 0x2E, 0x00, 0x82, 0xD8, 0x3D, 0x00, 0x88, 0xE7, 0x3D, 0x00, + 0x8E, 0xF3, 0x41, 0x00, 0x69, 0x95, 0x39, 0x00, 0x3E, 0x33, 0x2C, 0x00, 0x31, 0x11, 0x29, 0x00, 0x2E, 0x0A, 0x29, 0x00, 0x2D, + 0x0B, 0x27, 0x00, 0x30, 0x10, 0x29, 0x00, 0x34, 0x18, 0x2A, 0x00, 0x3E, 0x31, 0x2C, 0x00, 0x68, 0x95, 0x39, 0x00, 0x88, 0xE7, + 0x3E, 0x00, 0x82, 0xD7, 0x3C, 0x00, 0x84, 0xDD, 0x3C, 0x00, 0x8B, 0xEE, 0x3E, 0x00, 0x85, 0xDF, 0x3D, 0x00, 0x47, 0x48, 0x2E, + 0x00, 0x30, 0x0F, 0x29, 0x00, 0x31, 0x13, 0x29, 0x00, 0x48, 0x4D, 0x2E, 0x00, 0x61, 0x7F, 0x39, 0x00, 0x6A, 0x9C, 0x38, 0x00, + 0x75, 0xB8, 0x39, 0x00, 0x85, 0xDE, 0x3D, 0x00, 0x8C, 0xEF, 0x3E, 0x00, 0x89, 0xDE, 0x44, 0x00, 0x80, 0xD1, 0x3C, 0x00, 0x3A, + 0x28, 0x2C, 0x00, 0x32, 0x16, 0x2A, 0x00, 0x33, 0x17, 0x2A, 0x00, 0x4B, 0x50, 0x30, 0x00, 0x76, 0xBA, 0x3A, 0x00, 0x8A, 0xEF, + 0x3C, 0x00, 0x9A, 0xFE, 0x4D, 0x00, 0x95, 0xFF, 0x43, 0x00, 0x93, 0xFF, 0x40, 0x00, 0x4B, 0x52, 0x30, 0x00, 0x7E, 0xCE, 0x3C, + 0x00, 0x87, 0xD9, 0x44, 0x00, 0x34, 0x1B, 0x2A, 0x00, 0x65, 0x90, 0x36, 0x00, 0x8E, 0xF6, 0x3D, 0x00, 0x8F, 0xF7, 0x40, 0x00, + 0x8B, 0xDD, 0x48, 0x00, 0x73, 0xB1, 0x3A, 0x00, 0x66, 0x95, 0x35, 0x00, 0x66, 0x93, 0x35, 0x00, 0x35, 0x1B, 0x2A, 0x00, 0x8D, + 0xE8, 0x45, 0x00, 0x82, 0xD9, 0x3B, 0x00, 0x72, 0xAA, 0x3C, 0x00, 0x95, 0xFD, 0x46, 0x00, 0x8D, 0xF0, 0x40, 0x00, 0x57, 0x70, + 0x32, 0x00, 0x3C, 0x2D, 0x2C, 0x00, 0x2F, 0x0D, 0x29, 0x00, 0x81, 0xD4, 0x3D, 0x00, 0x8D, 0xF1, 0x40, 0x00, 0x94, 0xFC, 0x46, + 0x00, 0x73, 0xAE, 0x3D, 0x00, 0x45, 0x44, 0x2D, 0x00, 0x94, 0xF5, 0x49, 0x00, 0x90, 0xF0, 0x45, 0x00, 0x73, 0xAF, 0x3B, 0x00, + 0x38, 0x21, 0x2C, 0x00, 0x30, 0x11, 0x29, 0x00, 0x2F, 0x0F, 0x28, 0x00, 0x72, 0xAC, 0x3B, 0x00, 0x6A, 0x93, 0x3D, 0x00, 0x2E, + 0x0D, 0x27, 0x00, 0x35, 0x1C, 0x2B, 0x00, 0x36, 0x20, 0x2A, 0x00, 0x5E, 0x77, 0x39, 0x00, 0x78, 0xBE, 0x3B, 0x00, 0x36, 0x21, + 0x2A, 0x00, 0x71, 0xAB, 0x3B, 0x00, 0x4C, 0x54, 0x30, 0x00, 0x3D, 0x31, 0x2B, 0x00, 0x82, 0xD6, 0x3D, 0x00, 0x79, 0xC5, 0x39, + 0x00, 0x9A, 0xFF, 0x4D, 0x00, 0x8A, 0xE8, 0x40, 0x00, 0x8A, 0xE7, 0x40, 0x00, 0x7A, 0xC6, 0x39, 0x00, 0x3D, 0x2E, 0x2C, 0x00, + 0x81, 0xD5, 0x3D, 0x00, 0x77, 0xBC, 0x3A, 0x00, 0x31, 0x12, 0x2A, 0x00, 0x69, 0x9B, 0x37, 0x00, 0x8E, 0xF3, 0x40, 0x00, 0x83, + 0xDC, 0x3B, 0x00, 0x8C, 0xF6, 0x3B, 0x00, 0x88, 0xD9, 0x45, 0x00, 0x86, 0xE1, 0x3D, 0x00, 0x85, 0xE0, 0x3D, 0x00, 0x7B, 0xC8, + 0x39, 0x00, 0x36, 0x1F, 0x29, 0x00, 0x55, 0x6B, 0x32, 0x00, 0x8A, 0xEE, 0x3C, 0x00, 0x48, 0x4B, 0x2E, 0x00, 0x51, 0x61, 0x31, + 0x00, 0x8C, 0xE0, 0x48, 0x00, 0x8B, 0xDE, 0x47, 0x00, 0x98, 0xEE, 0x55, 0x00, 0x5D, 0x79, 0x36, 0x00, 0x3A, 0x2A, 0x2B, 0x00, + 0x3A, 0x29, 0x2B, 0x00, 0x5C, 0x78, 0x36, 0x00, 0x60, 0x7C, 0x3A, 0x00, 0x3D, 0x30, 0x2C, 0x00, 0x99, 0xFD, 0x4C, 0x00, 0x66, + 0x8A, 0x3C, 0x00, 0x2D, 0x0C, 0x27, 0x00, 0x42, 0x3C, 0x2E, 0x00, 0x84, 0xDA, 0x3E, 0x00, 0x88, 0xE5, 0x3F, 0x00, 0x37, 0x22, + 0x2B, 0x00, 0x2E, 0x0B, 0x28, 0x00, 0x6A, 0x9B, 0x37, 0x00, 0x72, 0xAF, 0x3A, 0x00, 0x32, 0x15, 0x29, 0x00, 0x2A, 0x00, 0x28, + 0x00, 0x5B, 0x75, 0x35, 0x00, 0x89, 0xE8, 0x3D, 0x00, 0x78, 0xBF, 0x3A, 0x00, 0x73, 0xB4, 0x38, 0x00, 0x83, 0xDA, 0x3C, 0x00, + 0x84, 0xDE, 0x3C, 0x00, 0x85, 0xDD, 0x3E, 0x00, 0x86, 0xDE, 0x40, 0x00, 0x84, 0xDE, 0x3B, 0x00, 0x86, 0xE2, 0x3C, 0x00, 0x85, + 0xDD, 0x3F, 0x00, 0x87, 0xE2, 0x3F, 0x00, 0x87, 0xE1, 0x3E, 0x00, 0x85, 0xDE, 0x3E, 0x00, 0x89, 0xE2, 0x41, 0x00, 0x89, 0xE2, + 0x43, 0x00, 0x84, 0xDC, 0x3E, 0x00, 0x83, 0xD8, 0x3E, 0x00, 0x90, 0xF6, 0x41, 0x00, 0x2B, 0x04, 0x28, 0x00, 0x8C, 0xE3, 0x47, + 0x00, 0x8B, 0xDE, 0x48, 0x00, 0x8A, 0xDC, 0x47, 0x00, 0x8A, 0xDD, 0x47, 0x00, 0x8D, 0xDD, 0x4A, 0x00, 0x8A, 0xDE, 0x47, 0x00, + 0x8B, 0xDD, 0x49, 0x00, 0x8B, 0xE0, 0x46, 0x00, 0x9A, 0xF2, 0x55, 0x00, 0x59, 0x70, 0x35, 0x00, 0x8F, 0xDE, 0x4F, 0x00, 0x82, + 0xDC, 0x3B, 0x00, 0x82, 0xDB, 0x39, 0x00, 0x7F, 0xD7, 0x38, 0x00, 0x92, 0xF0, 0x48, 0x00, 0x33, 0x19, 0x29, 0x00, 0x87, 0xDD, + 0x42, 0x00, 0x87, 0xDD, 0x41, 0x00, 0x92, 0xEC, 0x4B, 0x00, 0x78, 0xBD, 0x3C, 0x00, 0x86, 0xDD, 0x3F, 0x00, 0x81, 0xD9, 0x39, + 0x00, 0x7B, 0xC4, 0x3C, 0x00, 0x34, 0x1A, 0x29, 0x00, 0x89, 0xDD, 0x44, 0x00, 0x86, 0xDC, 0x40, 0x00, 0x88, 0xDD, 0x44, 0x00, + 0x87, 0xDE, 0x41, 0x00, 0x99, 0xFA, 0x4F, 0x00, 0x7B, 0xC3, 0x3E, 0x00, 0x83, 0xD7, 0x3F, 0x00, 0x8B, 0xED, 0x3E, 0x00, 0x40, + 0x33, 0x2F, 0x00, 0x39, 0x27, 0x2B, 0x00, 0x81, 0xD7, 0x3B, 0x00, 0x3B, 0x2C, 0x2A, 0x00, 0x33, 0x18, 0x29, 0x00, 0x38, 0x22, + 0x2B, 0x00, 0x85, 0xDA, 0x40, 0x00, 0x89, 0xEA, 0x3D, 0x00, 0x6F, 0xA9, 0x38, 0x00, 0x70, 0xAB, 0x38, 0x00, 0x85, 0xDD, 0x3D, + 0x00, 0x88, 0xE1, 0x40, 0x00, 0x36, 0x1F, 0x2B, 0x00, 0x30, 0x13, 0x28, 0x00, 0x68, 0x9A, 0x36, 0x00, 0x90, 0xFB, 0x3F, 0x00, + 0x8A, 0xDD, 0x46, 0x00, 0x8D, 0xE9, 0x45, 0x00, 0x5A, 0x71, 0x36, 0x00, 0x27, 0x00, 0x24, 0x00, 0x73, 0x9F, 0x45, 0x00, 0x97, + 0xFE, 0x4A, 0x00, 0x86, 0xD8, 0x43, 0x00, 0x73, 0xA1, 0x45, 0x00, 0x8E, 0xDF, 0x4C, 0x00, 0x85, 0xDB, 0x40, 0x00, 0x72, 0xB5, + 0x37, 0x00, 0x95, 0xF4, 0x4B, 0x00, 0x73, 0xB6, 0x37, 0x00, 0x88, 0xE9, 0x3C, 0x00, 0x8A, 0xDB, 0x48, 0x00, 0x8C, 0xDE, 0x49, + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x02, 0x03, 0x04, 0xAE, 0x06, 0xF1, 0x02, 0x04, 0x04, 0x02, 0xF1, 0x06, 0xAE, 0x04, 0x03, 0x02, 0x01, 0x00, 0x01, + 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0xAE, 0xC7, 0xF1, 0x02, 0x04, + 0x04, 0x02, 0xF1, 0xC7, 0xAE, 0x04, 0x03, 0x02, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x03, 0x0B, 0xAE, 0xEF, 0xF0, 0x02, 0x01, 0x01, 0x02, 0xB4, 0xEF, 0xAE, 0x0B, 0x03, 0x02, 0x01, 0x00, + 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x05, 0xEB, 0xA7, 0xD1, 0xEC, 0xED, 0x96, + 0x04, 0x04, 0x96, 0xED, 0xEE, 0xD1, 0xA7, 0xEB, 0x05, 0x04, 0x01, 0x04, 0xCA, 0x04, 0x01, 0x01, 0x01, 0xCA, 0xCA, 0xCA, 0xCA, + 0xCA, 0xCA, 0xCA, 0xCC, 0xE2, 0x8A, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE8, 0xE7, 0xE9, 0xE5, 0xBB, 0xE3, 0x8A, 0xE2, 0xCC, + 0xCA, 0xCC, 0xEA, 0xCC, 0xCA, 0xCA, 0xCA, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x08, 0xDD, 0x55, 0xDE, 0x2C, 0xDF, + 0xE0, 0xE1, 0xE1, 0xE0, 0xDF, 0x2C, 0xDE, 0x55, 0xDD, 0x08, 0x04, 0x01, 0x04, 0xCA, 0x04, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xC6, 0xD8, 0xD9, 0xAB, 0x78, 0x6A, 0x28, 0xDA, 0xDB, 0x28, 0x6A, 0x5A, 0xDC, 0xD9, 0xD8, 0xC6, + 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x05, 0x03, 0xD4, 0xD1, 0x31, + 0xD5, 0xD6, 0x98, 0xD7, 0xD6, 0xD5, 0x0B, 0x32, 0xD4, 0x03, 0x05, 0x04, 0x01, 0x04, 0xCA, 0x04, 0x01, 0x01, 0x01, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0xC3, 0xC2, 0xA4, 0xD0, 0xD1, 0xB3, 0xD2, 0xD3, 0xD3, 0xD2, 0x4F, 0x32, 0xD0, 0xA4, 0xC2, + 0xC3, 0x05, 0x02, 0x05, 0xB7, 0x05, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xCB, 0xC2, 0xCC, 0x02, 0xCD, + 0x79, 0xCE, 0xCF, 0xC1, 0xC1, 0xCF, 0xCE, 0x79, 0xCD, 0x02, 0xCC, 0xC2, 0xCB, 0x03, 0xCB, 0xB3, 0xCB, 0x03, 0x03, 0x03, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x7E, 0x05, 0xC6, 0x7E, 0x00, 0xC7, 0x15, 0xC8, 0xC9, 0xC9, 0xC8, 0x15, 0xC7, 0x00, 0x7E, + 0xC6, 0x05, 0x7E, 0x04, 0x7E, 0xCA, 0x7E, 0x04, 0x04, 0x04, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0x00, 0x03, 0xC3, 0x00, + 0x05, 0x55, 0xC4, 0xC5, 0xC1, 0xC1, 0xC5, 0xC4, 0x55, 0x05, 0x00, 0xC3, 0x03, 0x00, 0xAE, 0x00, 0x3D, 0x00, 0xAE, 0xAE, 0xAE, + 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0x7E, 0xBE, 0x00, 0x05, 0xBE, 0x7E, 0xBF, 0xC0, 0x5C, 0xC1, 0xC1, 0x5C, 0xC0, 0xBF, 0x7E, + 0xBE, 0x05, 0x00, 0xBE, 0x7E, 0xBE, 0xC2, 0x06, 0xBD, 0xBD, 0xBD, 0xB3, 0xB3, 0xB3, 0xB4, 0xB5, 0xB3, 0xB3, 0xB5, 0xB6, 0xB6, + 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0x6B, 0x6B, 0xBB, 0xBA, 0xB9, 0xB8, 0xB7, 0xB6, 0xB6, 0xB5, 0xB3, 0xB5, 0xBC, 0xB4, 0xB3, 0xB3, + 0xB3, 0x02, 0x02, 0xA8, 0xA9, 0xAA, 0xA8, 0x02, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0x8F, 0xB1, 0x71, 0x2D, 0xB1, 0x9E, 0xB0, + 0xAF, 0xAE, 0xAD, 0xAC, 0xAB, 0x02, 0xA4, 0xB2, 0xAA, 0xA8, 0x02, 0x02, 0x04, 0x31, 0xA3, 0x04, 0x31, 0x82, 0x3B, 0xA3, 0xA4, + 0xA5, 0xA6, 0x82, 0xA7, 0x8E, 0x20, 0x78, 0x78, 0x20, 0x8E, 0xA7, 0x82, 0xA6, 0xA5, 0xA4, 0xA3, 0x3B, 0x82, 0x3D, 0x04, 0xA3, + 0x31, 0x04, 0x09, 0x9F, 0xA0, 0x21, 0x2C, 0xA1, 0x47, 0x52, 0x5B, 0x5A, 0xA2, 0x1C, 0x81, 0x8D, 0x8E, 0x91, 0x91, 0x8E, 0x8D, + 0x81, 0x1C, 0xA2, 0x5A, 0x5B, 0x52, 0x47, 0xA1, 0x2C, 0x21, 0xA0, 0x9F, 0x09, 0x96, 0x97, 0x16, 0x98, 0x99, 0x9A, 0x46, 0x9B, + 0x28, 0x9C, 0x6D, 0x76, 0x7D, 0x8C, 0x9D, 0x8E, 0x8E, 0x9D, 0x9E, 0x7D, 0x75, 0x6D, 0x9C, 0x65, 0x9B, 0x46, 0x39, 0x99, 0x98, + 0x16, 0x97, 0x96, 0x4F, 0x89, 0x15, 0x1F, 0x69, 0x38, 0x45, 0x8A, 0x78, 0x66, 0x6C, 0x74, 0x4A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x8B, 0x80, 0x45, 0x90, 0x66, 0x91, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x15, 0x89, 0x4F, 0x7E, 0x0D, 0x14, 0x1E, 0x29, 0x37, 0x44, + 0x14, 0x59, 0x65, 0x6B, 0x73, 0x7F, 0x80, 0x25, 0x81, 0x82, 0x25, 0x80, 0x7F, 0x83, 0x84, 0x65, 0x85, 0x4D, 0x86, 0x87, 0x29, + 0x88, 0x14, 0x0D, 0x7E, 0x05, 0x0C, 0x13, 0x1D, 0x28, 0x2C, 0x43, 0x4E, 0x72, 0x64, 0x53, 0x5A, 0x73, 0x74, 0x75, 0x1C, 0x1C, + 0x76, 0x74, 0x77, 0x78, 0x6A, 0x64, 0x79, 0x4E, 0x7A, 0x2C, 0x7B, 0x7C, 0x7D, 0x0C, 0x05, 0x04, 0x0B, 0x12, 0x1C, 0x27, 0x36, + 0x42, 0x4D, 0x5D, 0x63, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x1A, 0x1A, 0x6D, 0x6C, 0x6E, 0x53, 0x69, 0x6F, 0x5D, 0x19, 0x70, 0x36, + 0x71, 0x24, 0x12, 0x0B, 0x04, 0x03, 0x03, 0x11, 0x1B, 0x2E, 0x35, 0x41, 0x4C, 0x5E, 0x62, 0x63, 0x64, 0x65, 0x66, 0x2C, 0x5A, + 0x5A, 0x2C, 0x66, 0x65, 0x64, 0x67, 0x62, 0x5E, 0x52, 0x40, 0x65, 0x68, 0x1B, 0x11, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x25, + 0x34, 0x40, 0x4B, 0x56, 0x57, 0x58, 0x16, 0x59, 0x5A, 0x41, 0x5B, 0x5B, 0x41, 0x5A, 0x59, 0x5C, 0x5D, 0x5E, 0x5F, 0x21, 0x41, + 0x60, 0x61, 0x05, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x09, 0x24, 0x33, 0x3F, 0x2C, 0x4B, 0x4C, 0x4D, 0x4E, 0x14, 0x4F, 0x50, + 0x51, 0x51, 0x50, 0x4F, 0x14, 0x4E, 0x4D, 0x52, 0x53, 0x2C, 0x3F, 0x01, 0x54, 0x55, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x1A, + 0x23, 0x32, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x47, 0x46, 0x45, 0x44, 0x43, 0x48, 0x41, 0x40, 0x3F, + 0x49, 0x3C, 0x4A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x2C, 0x37, 0x38, + 0x39, 0x3A, 0x3A, 0x39, 0x38, 0x37, 0x2C, 0x36, 0x35, 0x34, 0x3B, 0x3C, 0x30, 0x3D, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1A, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2C, 0x2B, 0x2A, 0x29, 0x28, 0x2D, 0x2E, 0x13, + 0x2F, 0x30, 0x31, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x09, 0x02, 0x1B, 0x1C, 0x1D, 0x1E, + 0x1F, 0x20, 0x21, 0x21, 0x20, 0x22, 0x1E, 0x1D, 0x1C, 0x1B, 0x02, 0x09, 0x1A, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x17, 0x16, 0x18, 0x19, 0x13, 0x12, 0x11, + 0x02, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x0B, 0x0C, + 0x0D, 0x0E, 0x0F, 0x10, 0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x03, 0x02, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, + 0x03, 0x02, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; From 7f12af73d41967189c0dc0f7a7a6cffb663386f0 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sat, 17 Oct 2020 12:00:21 -0700 Subject: [PATCH 04/17] Updated to be host and protocol agnostic --- src/meshwifi/meshhttp.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index 897f81953..d6ab4edce 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -1142,8 +1142,15 @@ void handleBasicJS(HTTPRequest *req, HTTPResponse *res) "\n" " // Create new connection\n" " var httpconn = new meshtasticjs.IHTTPConnection();\n" - " let sslActive = false;\n" - " let deviceIp = '10.10.30.198'; // Your devices IP here\n" + "\n" + " // Set connection params\n" + " let sslActive;\n" + " if (window.location.protocol === 'https:') {\n" + " sslActive = true;\n" + " } else {\n" + " sslActive = false;\n" + " }\n" + " let deviceIp = window.location.hostname; // Your devices IP here\n" " \n" "\n" " // Add event listeners that get called when a new packet is received / state of device changes\n" From 7dd4ce32d2dccc5cf016b03b0791efad8e727fb9 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sat, 17 Oct 2020 17:33:29 -0700 Subject: [PATCH 05/17] Moved style.css into meshhttpStatic.h Also created /data to store static files before they go into meshhttpStatic.h --- data/style.css | 277 +++++++++++++++++++++ data/style.css.gz | Bin 0 -> 1578 bytes src/meshwifi/meshhttp.cpp | 438 +--------------------------------- src/meshwifi/meshhttpStatic.h | 82 +++++++ 4 files changed, 367 insertions(+), 430 deletions(-) create mode 100644 data/style.css create mode 100644 data/style.css.gz diff --git a/data/style.css b/data/style.css new file mode 100644 index 000000000..408ee7645 --- /dev/null +++ b/data/style.css @@ -0,0 +1,277 @@ +/* latin-ext */ +@font-face { + font-family: 'Lato'; + font-style: normal; + font-weight: 400; + src: local('Lato Regular'), local('Lato-Regular'), url(./Google.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + + +*, *:before, *:after { + box-sizing: border-box; +} + +body { + background: #C5DDEB; + font: 14px/20px "Lato", Arial, sans-serif; + padding: 40px 0; + color: white; +} + + + +.grid { + display: grid; + grid-template-columns: + 1fr 4fr; + grid-template-areas: + "header header" + "sidebar content"; + margin: 0 auto; + width: 750px; + background: #444753; + border-radius: 5px; +} + +.top {grid-area: header;} +.side {grid-area: sidebar;} +.main {grid-area: content;} + +.top { + border-bottom: 2px solid white; +} +.top-text { + font-weight: bold; + font-size: 24px; + text-align: center; + padding: 20px; +} + +.side { + width: 260px; + float: left; +} +.side .side-header { + padding: 20px; + border-bottom: 2px solid white; +} + +.side .side-header .side-text { + padding-left: 10px; + margin-top: 6px; + font-size: 16px; + text-align: left; + font-weight: bold; + +} + +.channel-list ul { + padding: 20px; + height: 570px; + list-style-type: none; +} +.channel-list ul li { + padding-bottom: 20px; +} + +.channel-list .channel-name { + font-size: 20px; + margin-top: 8px; + padding-left: 8px; +} + +.channel-list .message-count { + padding-left: 16px; + color: #92959E; +} + +.icon { + display: inline-block; + width: 1em; + height: 1em; + stroke-width: 0; + stroke: currentColor; + fill: currentColor; +} + +.icon-map-marker { + width: 0.5714285714285714em; +} + +.icon-circle { + width: 0.8571428571428571em; +} + +.content { + display: flex; + flex-direction: column; + flex-wrap: nowrap; +/* width: 490px; */ + float: left; + background: #F2F5F8; +/* border-top-right-radius: 5px; + border-bottom-right-radius: 5px; */ + color: #434651; +} +.content .content-header { + flex-grow: 0; + padding: 20px; + border-bottom: 2px solid white; +} + +.content .content-header .content-from { + padding-left: 10px; + margin-top: 6px; + font-size: 20px; + text-align: center; + font-size: 16px; +} +.content .content-header .content-from .content-from-highlight { + font-weight: bold; +} +.content .content-header .content-num-messages { + color: #92959E; +} + +.content .content-history { + flex-grow: 1; + padding: 20px 20px 20px; + border-bottom: 2px solid white; + overflow-y: scroll; + height: 375px; +} +.content .content-history ul { + list-style-type: none; + padding-inline-start: 10px; +} +.content .content-history .message-data { + margin-bottom: 10px; +} +.content .content-history .message-data-time { + color: #a8aab1; + padding-left: 6px; +} +.content .content-history .message { + color: white; + padding: 8px 10px; + line-height: 20px; + font-size: 14px; + border-radius: 7px; + margin-bottom: 30px; + width: 90%; + position: relative; +} +.content .content-history .message:after { + bottom: 100%; + left: 7%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-bottom-color: #86BB71; + border-width: 10px; + margin-left: -10px; +} +.content .content-history .my-message { + background: #86BB71; +} +.content .content-history .other-message { + background: #94C2ED; +} +.content .content-history .other-message:after { + border-bottom-color: #94C2ED; + left: 93%; +} +.content .content-message { + flex-grow: 0; + padding: 10px; +} +.content .content-message textarea { + width: 100%; + border: none; + padding: 10px 10px; + font: 14px/22px "Lato", Arial, sans-serif; + margin-bottom: 10px; + border-radius: 5px; + resize: none; +} + +.content .content-message button { + float: right; + color: #94C2ED; + font-size: 16px; + text-transform: uppercase; + border: none; + cursor: pointer; + font-weight: bold; + background: #F2F5F8; +} +.content .content-message button:hover { + color: #75b1e8; +} +/* Tooltip container */ +.tooltip { + color: #86BB71; + position: relative; + display: inline-block; + border-bottom: 1px dotted black; /* If you want dots under the hoverable text */ +} +/* Tooltip text */ +.tooltip .tooltiptext { + visibility: hidden; + width: 120px; + background-color: #444753; + color: #fff; + text-align: center; + padding: 5px 0; + border-radius: 6px; + /* Position the tooltip text - see examples below! */ + position: absolute; + z-index: 1; +} + +/* Show the tooltip text when you mouse over the tooltip container */ +.tooltip:hover .tooltiptext { + visibility: visible; +} + +.online, .offline, .me { + margin-right: 3px; + font-size: 10px; +} + +.online { + color: #86BB71; +} + +.offline { + color: #E38968; +} + +.me { + color: #94C2ED; +} + +.align-left { + text-align: left; +} + +.align-right { + text-align: right; +} + +.float-right { + float: right; +} + +.clearfix:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; +} \ No newline at end of file diff --git a/data/style.css.gz b/data/style.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..1ebb3c0d84ce4e1745321d8e2704c5a76386bb75 GIT binary patch literal 1578 zcmV+_2G#i=iwFpmh>KqU19NnFY-KKEb8`TlSIKhYHV{2WUx9dP$}^5(lQgwamv~L3 zDu+~-4**3_LKz}dAZST;&A+FyaTDcu<{*)1HX7ZpyB~n-3&e?H1*Ut2F0Mzv=AuwI zCrgUnMhLmlhVes!&i^1voG-k%R0mEIR0z2tyq4}LTdh@s;vmqnQZ5t3#ggzZW;*(d zt}0IC`Pa*~7`McgD5l;dGr-b!y@X-xfz~+)t0M*Ek#DLB*hBc`1h9} z3<4ZP@zbRqMB}-BhL0c&AD@gc3ZlS1ZvzZ}cW&?igL|tHhBxMUKLL&VsS(~zqX6Gd zpPm+@Z==!Z;u2jXDFv6Pej~Y}(twqUJucZRD^>}-%Zy44A~Pu!*}>|Nl-b z>3;n1@ObB;OHdeZ_t#Od-J>%N%Go8lm5lI9RFa~^C6z4K%3G3UW|3H{8km=Y3z?wZ znkj0%L}+xik}NZ;W~|(D0x8rIt*@V0(G5ry#W1_t6lF5{Da<8`b9t;nBqdtmY)uIS zhV0`E1SQL8N+h^YC|am9J$FOoiWLb85UG^Vk{!#`IziJhxV-4&5XbR!d}G8GHc2v8 zl?fVeEqqr>Y|)$XNIR0ay)p#1l(X9E`tJag2OfEU?PMGy( z_zA8>yP@Wsx{jcGoH0q4iV59UhPdi4J4v>>67+L1y1wwM#dDoFy}k9Cs>ef5(bM>8 zW@h>>(ycEwl3h;fb=iQ5UCn1QzKJK}(AK95(7&{M*+c>E>|Ba|sJBloP>*vdHb30t z-jiW^J7R-(0`B_L8R0eH$u*{@DEA|Fi)w>i%az8?P+uKefmRjr(9cJBl#k}`Bbh-+ zyif_%x5H4-@N@n>-Qhj)Sp&tvPb5!)mT9X!z>F36?#FdYN^KH2$nv3n$U~DJo44t*hCuq4D zbe$wASgIUkg6USp^aYHRP3d&m%%^QOxx1T&t?zz|=`w|N9)F}t4!E7r4*B}U-Zdc9 z8r(Q(V;%47^F7qxsF}Vf$^TPV)F^jQn)XtNO6o-YtEV_{!)tyfs^A zrG1x({_id^*y+RPa0KOUd&r-)-U%bEz+mCPFgvc8rf54NK^az>X)EuyQOkT zN;-rCoK;F~(pC4#^XA}Y|6Vd|6vjzA>vv4k74-VUMKkqLmL+?JPi zuj9BE);{}}`a1B!N|rLt6!^AgSw@TYi8DI7)Ya|NTKgHY%O=bKiregisterNode(nodeAPIv1ToRadioOptions); secureServer->registerNode(nodeAPIv1ToRadio); secureServer->registerNode(nodeAPIv1FromRadio); - secureServer->registerNode(nodeCSS); - secureServer->registerNode(nodeJS); secureServer->registerNode(nodeHotspot); secureServer->registerNode(nodeFavicon); secureServer->registerNode(nodeRoot); @@ -244,8 +239,6 @@ void initWebServer() insecureServer->registerNode(nodeAPIv1ToRadioOptions); insecureServer->registerNode(nodeAPIv1ToRadio); insecureServer->registerNode(nodeAPIv1FromRadio); - insecureServer->registerNode(nodeCSS); - insecureServer->registerNode(nodeJS); insecureServer->registerNode(nodeHotspot); insecureServer->registerNode(nodeFavicon); insecureServer->registerNode(nodeRoot); @@ -303,8 +296,14 @@ void handleStatic(HTTPRequest *req, HTTPResponse *res) res->setHeader("Content-Encoding", "gzip"); res->setHeader("Content-Type", "application/json"); res->write(STATIC_MESHTASTIC_JS_DATA, STATIC_MESHTASTIC_JS_LENGTH); - return; + + } else if (parameter1 == "style.css") { + res->setHeader("Content-Encoding", "gzip"); + res->setHeader("Content-Type", "text/css"); + res->write(STATIC_STYLE_CSS_DATA, STATIC_STYLE_CSS_LENGTH); + return; + } else { res->print("Parameter 1: "); res->printStd(parameter1); @@ -461,7 +460,7 @@ void handleRoot(HTTPRequest *req, HTTPResponse *res) "\n" " \n" " Meshtastic - Chat\n" - " \n" + " \n" "\n" "\n" "\n" @@ -536,298 +535,6 @@ void handleRoot(HTTPRequest *req, HTTPResponse *res) res->print(out); } -void handleStyleCSS(HTTPRequest *req, HTTPResponse *res) -{ - - String out = ""; - out += - "/* latin-ext */\n" - "@font-face {\n" - " font-family: 'Lato';\n" - " font-style: normal;\n" - " font-weight: 400;\n" - " src: local('Lato Regular'), local('Lato-Regular'), url(./Google.woff2) format('woff2');\n" - " unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n" - "}\n" - "\n" - "\n" - "*, *:before, *:after {\n" - " box-sizing: border-box;\n" - "}\n" - "\n" - "body {\n" - " background: #C5DDEB;\n" - " font: 14px/20px \"Lato\", Arial, sans-serif;\n" - " padding: 40px 0;\n" - " color: white;\n" - "}\n" - "\n" - "\n" - " \n" - ".grid {\n" - " display: grid;\n" - " grid-template-columns:\n" - "\t1fr 4fr;\n" - " grid-template-areas:\n" - "\t\"header header\"\n" - "\t\"sidebar content\";\n" - " margin: 0 auto;\n" - " width: 750px;\n" - " background: #444753;\n" - " border-radius: 5px;\n" - "}\n" - "\n" - ".top {grid-area: header;}\n" - ".side {grid-area: sidebar;}\n" - ".main {grid-area: content;}\n" - "\n" - ".top {\n" - " border-bottom: 2px solid white;\n" - "}\n" - ".top-text {\n" - " font-weight: bold;\n" - " font-size: 24px;\n" - " text-align: center;\n" - " padding: 20px;\n" - "}\n" - "\n" - ".side {\n" - " width: 260px;\n" - " float: left;\n" - "}\n" - ".side .side-header {\n" - " padding: 20px;\n" - " border-bottom: 2px solid white;\n" - "}\n" - "\n" - ".side .side-header .side-text {\n" - " padding-left: 10px;\n" - " margin-top: 6px;\n" - " font-size: 16px;\n" - " text-align: left;\n" - " font-weight: bold;\n" - " \n" - "}\n" - "\n" - ".channel-list ul {\n" - " padding: 20px;\n" - " height: 570px;\n" - " list-style-type: none;\n" - "}\n" - ".channel-list ul li {\n" - " padding-bottom: 20px;\n" - "}\n" - "\n" - ".channel-list .channel-name {\n" - " font-size: 20px;\n" - " margin-top: 8px;\n" - " padding-left: 8px;\n" - "}\n" - "\n" - ".channel-list .message-count {\n" - " padding-left: 16px;\n" - " color: #92959E;\n" - "}\n" - "\n" - ".icon {\n" - " display: inline-block;\n" - " width: 1em;\n" - " height: 1em;\n" - " stroke-width: 0;\n" - " stroke: currentColor;\n" - " fill: currentColor;\n" - "}\n" - "\n" - ".icon-map-marker {\n" - " width: 0.5714285714285714em;\n" - "}\n" - "\n" - ".icon-circle {\n" - " width: 0.8571428571428571em;\n" - "}\n" - "\n" - ".content {\n" - " display: flex;\n" - " flex-direction: column;\n" - " flex-wrap: nowrap;\n" - "/* width: 490px; */\n" - " float: left;\n" - " background: #F2F5F8;\n" - "/* border-top-right-radius: 5px;\n" - " border-bottom-right-radius: 5px; */\n" - " color: #434651;\n" - "}\n" - ".content .content-header {\n" - " flex-grow: 0;\n" - " padding: 20px;\n" - " border-bottom: 2px solid white;\n" - "}\n" - "\n" - ".content .content-header .content-from {\n" - " padding-left: 10px;\n" - " margin-top: 6px;\n" - " font-size: 20px;\n" - " text-align: center;\n" - " font-size: 16px;\n" - "}\n" - ".content .content-header .content-from .content-from-highlight {\n" - " font-weight: bold;\n" - "}\n" - ".content .content-header .content-num-messages {\n" - " color: #92959E;\n" - "}\n" - "\n" - ".content .content-history {\n" - " flex-grow: 1;\n" - " padding: 20px 20px 20px;\n" - " border-bottom: 2px solid white;\n" - " overflow-y: scroll;\n" - " height: 375px;\n" - "}\n" - ".content .content-history ul {\n" - " list-style-type: none;\n" - " padding-inline-start: 10px;\n" - "}\n" - ".content .content-history .message-data {\n" - " margin-bottom: 10px;\n" - "}\n" - ".content .content-history .message-data-time {\n" - " color: #a8aab1;\n" - " padding-left: 6px;\n" - "}\n" - ".content .content-history .message {\n" - " color: white;\n" - " padding: 8px 10px;\n" - " line-height: 20px;\n" - " font-size: 14px;\n" - " border-radius: 7px;\n" - " margin-bottom: 30px;\n" - " width: 90%;\n" - " position: relative;\n" - "}\n" - ".content .content-history .message:after {\n" - " bottom: 100%;\n" - " left: 7%;\n" - " border: solid transparent;\n" - " content: \" \";\n" - " height: 0;\n" - " width: 0;\n" - " position: absolute;\n" - " pointer-events: none;\n" - " border-bottom-color: #86BB71;\n" - " border-width: 10px;\n" - " margin-left: -10px;\n" - "}\n" - ".content .content-history .my-message {\n" - " background: #86BB71;\n" - "}\n" - ".content .content-history .other-message {\n" - " background: #94C2ED;\n" - "}\n" - ".content .content-history .other-message:after {\n" - " border-bottom-color: #94C2ED;\n" - " left: 93%;\n" - "}\n" - ".content .content-message {\n" - " flex-grow: 0;\n" - " padding: 10px;\n" - "}\n" - ".content .content-message textarea {\n" - " width: 100%;\n" - " border: none;\n" - " padding: 10px 10px;\n" - " font: 14px/22px \"Lato\", Arial, sans-serif;\n" - " margin-bottom: 10px;\n" - " border-radius: 5px;\n" - " resize: none;\n" - "}\n" - "\n" - ".content .content-message button {\n" - " float: right;\n" - " color: #94C2ED;\n" - " font-size: 16px;\n" - " text-transform: uppercase;\n" - " border: none;\n" - " cursor: pointer;\n" - " font-weight: bold;\n" - " background: #F2F5F8;\n" - "}\n" - ".content .content-message button:hover {\n" - " color: #75b1e8;\n" - "}\n" - "/* Tooltip container */\n" - ".tooltip {\n" - " color: #86BB71;\n" - " position: relative;\n" - " display: inline-block;\n" - " border-bottom: 1px dotted black; /* If you want dots under the hoverable text */\n" - "}\n" - "/* Tooltip text */\n" - ".tooltip .tooltiptext {\n" - " visibility: hidden;\n" - " width: 120px;\n" - " background-color: #444753;\n" - " color: #fff;\n" - " text-align: center;\n" - " padding: 5px 0;\n" - " border-radius: 6px;\n" - " /* Position the tooltip text - see examples below! */\n" - " position: absolute;\n" - " z-index: 1;\n" - "}\n" - "\n" - "/* Show the tooltip text when you mouse over the tooltip container */\n" - ".tooltip:hover .tooltiptext {\n" - " visibility: visible;\n" - "}\n" - "\n" - ".online, .offline, .me {\n" - " margin-right: 3px;\n" - " font-size: 10px;\n" - "}\n" - "\n" - ".online {\n" - " color: #86BB71;\n" - "}\n" - "\n" - ".offline {\n" - " color: #E38968;\n" - "}\n" - "\n" - ".me {\n" - " color: #94C2ED;\n" - "}\n" - "\n" - ".align-left {\n" - " text-align: left;\n" - "}\n" - "\n" - ".align-right {\n" - " text-align: right;\n" - "}\n" - "\n" - ".float-right {\n" - " float: right;\n" - "}\n" - "\n" - ".clearfix:after {\n" - " visibility: hidden;\n" - " display: block;\n" - " font-size: 0;\n" - " content: \" \";\n" - " clear: both;\n" - " height: 0;\n" - "}"; - - // Status code is 200 OK by default. - // We want to deliver a simple HTML page, so we send a corresponding content type: - res->setHeader("Content-Type", "text/css"); - - // The response implements the Print interface, so you can use it just like - // you would write to Serial etc. - res->print(out); -} - void handleScriptsScriptJS(HTTPRequest *req, HTTPResponse *res) { String out = ""; @@ -987,135 +694,6 @@ void handleScriptsScriptJS(HTTPRequest *req, HTTPResponse *res) res->print(out); } -void handleJSONChatHistoryDummy(HTTPRequest *req, HTTPResponse *res) -{ - String out = ""; - out += "{\n" - "\t\"data\": {\n" - "\t\t\"system\": {\n" - "\t\t\t\"timeSinceStart\": 3213544,\n" - "\t\t\t\"timeGPS\": 1600830985,\n" - "\t\t\t\"channel\": \"ourSecretPlace\"\n" - "\t\t},\n" - "\t\t\"users\": [{\n" - "\t\t\t\t\"NameShort\": \"J\",\n" - "\t\t\t\t\"NameLong\": \"John\",\n" - "\t\t\t\t\"lastSeen\": 3207544,\n" - "\t\t\t\t\"lat\" : -2.882243,\n" - "\t\t\t\t\"lon\" : -111.038580\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"NameShort\": \"D\",\n" - "\t\t\t\t\"NameLong\": \"David\",\n" - "\t\t\t\t\"lastSeen\": 3212544,\n" - "\t\t\t\t\"lat\" : -12.24452,\n" - "\t\t\t\t\"lon\" : -61.87351\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"NameShort\": \"P\",\n" - "\t\t\t\t\"NameLong\": \"Peter\",\n" - "\t\t\t\t\"lastSeen\": 3213444,\n" - "\t\t\t\t\"lat\" : 0,\n" - "\t\t\t\t\"lon\" : 0\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"NameShort\": \"M\",\n" - "\t\t\t\t\"NameLong\": \"Mary\",\n" - "\t\t\t\t\"lastSeen\": 3211544,\n" - "\t\t\t\t\"lat\" : 16.45478,\n" - "\t\t\t\t\"lon\" : 11.40166\n" - "\t\t\t}\n" - "\t\t],\n" - "\t\t\"chat\": [{\n" - "\t\t\t\t\"local\": 0,\n" - "\t\t\t\t\"NameShort\": \"J\",\n" - "\t\t\t\t\"NameLong\": \"John\",\n" - "\t\t\t\t\"chatLine\": \"Hello\",\n" - "\t\t\t\t\"timestamp\" : 3203544\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"local\": 0,\n" - "\t\t\t\t\"NameShort\": \"D\",\n" - "\t\t\t\t\"NameLong\": \"David\",\n" - "\t\t\t\t\"chatLine\": \"Hello There\",\n" - "\t\t\t\t\"timestamp\" : 3204544\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"local\": 0,\n" - "\t\t\t\t\"NameShort\": \"J\",\n" - "\t\t\t\t\"NameLong\": \"John\",\n" - "\t\t\t\t\"chatLine\": \"Where you been?\",\n" - "\t\t\t\t\"timestamp\" : 3205544\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"local\": 0,\n" - "\t\t\t\t\"NameShort\": \"D\",\n" - "\t\t\t\t\"NameLong\": \"David\",\n" - "\t\t\t\t\"chatLine\": \"I was on Channel 2\",\n" - "\t\t\t\t\"timestamp\" : 3206544\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"local\": 0,\n" - "\t\t\t\t\"NameShort\": \"J\",\n" - "\t\t\t\t\"NameLong\": \"John\",\n" - "\t\t\t\t\"chatLine\": \"With Mary again?\",\n" - "\t\t\t\t\"timestamp\" : 3207544\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"local\": 0,\n" - "\t\t\t\t\"NameShort\": \"D\",\n" - "\t\t\t\t\"NameLong\": \"David\",\n" - "\t\t\t\t\"chatLine\": \"She's better looking than you\",\n" - "\t\t\t\t\"timestamp\" : 3208544\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"local\": 0,\n" - "\t\t\t\t\"NameShort\": \"M\",\n" - "\t\t\t\t\"NameLong\": \"Mary\",\n" - "\t\t\t\t\"chatLine\": \"Well, Hi\",\n" - "\t\t\t\t\"timestamp\" : 3209544\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"local\": 0,\n" - "\t\t\t\t\"NameShort\": \"D\",\n" - "\t\t\t\t\"NameLong\": \"David\",\n" - "\t\t\t\t\"chatLine\": \"You're Here\",\n" - "\t\t\t\t\"timestamp\" : 3210544\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"local\": 0,\n" - "\t\t\t\t\"NameShort\": \"M\",\n" - "\t\t\t\t\"NameLong\": \"Mary\",\n" - "\t\t\t\t\"chatLine\": \"Wanted to say Howdy.\",\n" - "\t\t\t\t\"timestamp\" : 3211544\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"local\": 0,\n" - "\t\t\t\t\"NameShort\": \"D\",\n" - "\t\t\t\t\"NameLong\": \"David\",\n" - "\t\t\t\t\"chatLine\": \"Better come down and visit sometime\",\n" - "\t\t\t\t\"timestamp\" : 3212544\n" - "\t\t\t},\n" - "\t\t\t{\n" - "\t\t\t\t\"local\": 1,\n" - "\t\t\t\t\"NameShort\": \"P\",\n" - "\t\t\t\t\"NameLong\": \"Peter\",\n" - "\t\t\t\t\"chatLine\": \"Where is everybody?\",\n" - "\t\t\t\t\"timestamp\" : 3213444\n" - "\t\t\t}\n" - "\t\t]\n" - "\t}\n" - "}"; - - // Status code is 200 OK by default. - // We want to deliver a simple HTML page, so we send a corresponding content type: - res->setHeader("Content-Type", "application/json"); - - // The response implements the Print interface, so you can use it just like - // you would write to Serial etc. - res->print(out); -} - void handleFavicon(HTTPRequest *req, HTTPResponse *res) { // Set Content-Type diff --git a/src/meshwifi/meshhttpStatic.h b/src/meshwifi/meshhttpStatic.h index f5217df9f..673685bb5 100644 --- a/src/meshwifi/meshhttpStatic.h +++ b/src/meshwifi/meshhttpStatic.h @@ -10,6 +10,88 @@ */ +// Length of the binary data +const int STATIC_STYLE_CSS_LENGTH = 1578; + +const byte STATIC_STYLE_CSS_DATA[] = { + 0x1F, 0x8B, 0x08, 0x08, 0x94, 0x88, 0x8B, 0x5F, 0x00, 0x03, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x2E, 0x63, 0x73, 0x73, 0x00, 0x9D, + 0x57, 0xC9, 0x72, 0xE3, 0x36, 0x10, 0x3D, 0x47, 0x5F, 0x81, 0x78, 0x6A, 0xCA, 0x33, 0x8E, 0x61, 0x93, 0x34, 0xB5, 0x51, 0x97, + 0x78, 0x4D, 0xA5, 0x2A, 0x87, 0x54, 0x96, 0x0F, 0x00, 0x45, 0x50, 0x42, 0x19, 0x22, 0x54, 0x20, 0x68, 0x49, 0x76, 0xCD, 0xBF, + 0xA7, 0xB1, 0x71, 0x13, 0xE5, 0x78, 0xE6, 0x20, 0x91, 0x68, 0x36, 0x1A, 0xDD, 0xAF, 0xBB, 0x1F, 0x80, 0xEB, 0x0B, 0xC4, 0x89, + 0x62, 0x05, 0xA6, 0x7B, 0x85, 0x2E, 0xAE, 0x47, 0xBF, 0xE6, 0xA2, 0x50, 0x38, 0x27, 0x4B, 0x8A, 0xDE, 0x46, 0x08, 0xB9, 0xD1, + 0x86, 0xF1, 0x43, 0x82, 0xCE, 0xFF, 0x20, 0x4A, 0x9C, 0x2F, 0xBC, 0xB8, 0x54, 0x07, 0x4E, 0x13, 0x54, 0x08, 0xB9, 0x21, 0xBC, + 0x96, 0xEE, 0x28, 0x5B, 0xAD, 0x55, 0x82, 0xE2, 0x20, 0xD0, 0xB2, 0x52, 0x2E, 0x13, 0xC4, 0xC5, 0x92, 0xF0, 0x2F, 0x66, 0x3A, + 0xFA, 0x8B, 0xAE, 0x2A, 0x4E, 0xE4, 0xF9, 0xD7, 0xCB, 0xB6, 0x18, 0xB7, 0xC4, 0x95, 0xE4, 0x5F, 0xAE, 0xAE, 0x7F, 0x13, 0x62, + 0xC5, 0xE9, 0xD5, 0x4E, 0xE4, 0x79, 0xF4, 0x15, 0x4C, 0xC3, 0x22, 0xEA, 0xCB, 0xB9, 0x19, 0x9E, 0x7F, 0xD5, 0x96, 0xAB, 0x82, + 0x2D, 0x45, 0x46, 0xB1, 0x24, 0xC5, 0x0A, 0xDC, 0xF8, 0xF7, 0x97, 0x20, 0x0C, 0x02, 0x1C, 0x44, 0xF1, 0xD3, 0xA5, 0x1E, 0x44, + 0xE3, 0xB9, 0x7E, 0x86, 0x8F, 0x20, 0x0C, 0x1F, 0x9F, 0x8C, 0x30, 0x0A, 0xA2, 0xC0, 0x3E, 0x6F, 0x03, 0x0C, 0x7F, 0x77, 0x6E, + 0xF0, 0x00, 0x83, 0x7B, 0xAB, 0x11, 0x86, 0x37, 0xE6, 0x79, 0x3F, 0x01, 0x8D, 0xFB, 0xA9, 0x11, 0xDE, 0x4E, 0xA3, 0x00, 0xDF, + 0x4E, 0x9F, 0x9E, 0x16, 0xA3, 0x6F, 0xA3, 0xD1, 0xE8, 0xE2, 0x12, 0x5D, 0x24, 0x29, 0x05, 0x97, 0xA8, 0x7E, 0x23, 0xB9, 0xA2, + 0xD2, 0x80, 0x95, 0x8A, 0x3D, 0x2E, 0xD9, 0x2B, 0x2B, 0x56, 0x09, 0xBC, 0xCB, 0x8C, 0x4A, 0x0C, 0x22, 0x33, 0x29, 0x15, 0xD9, + 0xC1, 0xEA, 0x90, 0xE5, 0xF3, 0x4A, 0x8A, 0xAA, 0xC8, 0x12, 0xF4, 0xE9, 0x7E, 0xFC, 0xF0, 0xF0, 0x78, 0xE7, 0xA1, 0x4B, 0x50, + 0x18, 0x6F, 0xF7, 0xD7, 0x51, 0xB0, 0xDD, 0xA3, 0x33, 0x0D, 0xCA, 0xD9, 0x25, 0xBA, 0x95, 0x8C, 0xF0, 0x4B, 0x54, 0x92, 0xA2, + 0xC4, 0x25, 0x95, 0x2C, 0xD7, 0xCA, 0x5B, 0x92, 0x65, 0x66, 0x91, 0x58, 0xAB, 0x1A, 0x98, 0x97, 0x82, 0x0B, 0x99, 0xA0, 0xDD, + 0x9A, 0x29, 0x6A, 0xBD, 0x44, 0x68, 0x74, 0xB5, 0x92, 0x2C, 0x33, 0xAB, 0x66, 0xAC, 0xDC, 0x72, 0x02, 0x29, 0xD4, 0x12, 0xAD, + 0xAF, 0x9F, 0x58, 0xD1, 0x0D, 0x48, 0x15, 0xC5, 0x30, 0xBB, 0xDA, 0x14, 0x65, 0x32, 0xFA, 0x29, 0xCC, 0x25, 0x8A, 0x73, 0x79, + 0xAC, 0x42, 0x24, 0x25, 0x5A, 0xE1, 0x6C, 0x4D, 0x09, 0x04, 0x86, 0xEC, 0xE3, 0x0C, 0x04, 0x25, 0xCB, 0x68, 0x4A, 0x24, 0xB8, + 0x50, 0x28, 0x5A, 0xA8, 0x33, 0x3D, 0x77, 0x43, 0xE4, 0x8A, 0x15, 0x09, 0x0A, 0x10, 0xA9, 0x94, 0xD0, 0x92, 0x1D, 0xCB, 0xD4, + 0x3A, 0x41, 0xD3, 0x31, 0xB8, 0xBC, 0xE8, 0xE3, 0x10, 0xC7, 0xF1, 0x74, 0x7C, 0x63, 0xC4, 0x16, 0x36, 0x49, 0x32, 0x56, 0x95, + 0x09, 0x1A, 0x6F, 0x2D, 0x7C, 0x57, 0x4A, 0x6C, 0xD1, 0x9B, 0xF1, 0x48, 0x3B, 0x92, 0xB8, 0xE5, 0x17, 0xDF, 0x46, 0x57, 0x7A, + 0xF9, 0xCE, 0x27, 0xE7, 0x8F, 0xFE, 0xB6, 0x21, 0xAC, 0xE8, 0x7C, 0x73, 0x3E, 0x2E, 0x6A, 0x93, 0xCD, 0x92, 0xA9, 0x50, 0x4A, + 0x6C, 0x12, 0x14, 0x01, 0xA4, 0xA5, 0xE0, 0x00, 0x5C, 0x0D, 0xA6, 0x56, 0x05, 0x24, 0xA0, 0x41, 0xDE, 0xFA, 0x55, 0x9E, 0x0A, + 0x9E, 0x35, 0x0D, 0xC1, 0x5E, 0xA1, 0x10, 0xA3, 0xD8, 0x46, 0xA8, 0x27, 0x60, 0xC2, 0xD9, 0x0A, 0x70, 0x58, 0xC2, 0xA2, 0x54, + 0x76, 0x72, 0x17, 0x05, 0x3E, 0x36, 0x1B, 0x41, 0x83, 0x51, 0x34, 0x71, 0x18, 0xE5, 0x5C, 0x10, 0x58, 0x83, 0xD3, 0x5C, 0x19, + 0x37, 0x8C, 0xA2, 0xF9, 0xC7, 0x2E, 0x0B, 0x6F, 0xC7, 0x16, 0x3F, 0x12, 0xD0, 0x90, 0x29, 0x3B, 0xA8, 0xA3, 0x74, 0x56, 0xB1, + 0x5E, 0x1C, 0x0A, 0xD3, 0x99, 0xB6, 0x79, 0xC5, 0x80, 0x47, 0x82, 0x26, 0xCE, 0xC9, 0x26, 0xF2, 0x70, 0x72, 0x1C, 0xB9, 0x75, + 0xFE, 0x04, 0x6A, 0xC6, 0x95, 0xE5, 0x9A, 0x14, 0x05, 0xE5, 0x98, 0xB3, 0x52, 0xA1, 0x8A, 0x0F, 0xC7, 0xB4, 0x76, 0x33, 0xC7, + 0x53, 0x27, 0xD0, 0xDA, 0x96, 0x81, 0xB0, 0x3A, 0x6C, 0x0D, 0x0D, 0x15, 0x36, 0x59, 0x7D, 0x7B, 0x9C, 0x75, 0x02, 0xAA, 0x61, + 0xA9, 0xF1, 0xEF, 0x4C, 0xA8, 0x47, 0x05, 0xD9, 0xB4, 0x28, 0xD0, 0xA5, 0x76, 0x00, 0x86, 0x99, 0x15, 0x75, 0xF1, 0x9A, 0x0D, + 0xDB, 0xDE, 0xD0, 0xB2, 0x24, 0x2B, 0xDD, 0x6F, 0x55, 0x31, 0x08, 0xB3, 0x03, 0xD0, 0x75, 0xF3, 0xA7, 0x79, 0x34, 0x1F, 0xCF, + 0x1F, 0xAD, 0x25, 0x20, 0xBB, 0xA2, 0xDB, 0xCB, 0xAC, 0xE0, 0xAC, 0xA0, 0x38, 0x05, 0x1A, 0x7D, 0x6E, 0xB5, 0x58, 0x48, 0x37, + 0x6D, 0xC4, 0xDC, 0xB0, 0x54, 0x52, 0x3C, 0x53, 0xEC, 0x74, 0x82, 0x46, 0x04, 0xC5, 0x59, 0x49, 0x09, 0xF5, 0x79, 0xAF, 0x17, + 0x35, 0xA9, 0x62, 0x9C, 0xF7, 0xA5, 0xDE, 0x03, 0xBC, 0x21, 0x5B, 0xF8, 0xC9, 0x67, 0x57, 0x7C, 0xDE, 0xDE, 0xD5, 0x78, 0x1A, + 0xC6, 0xD1, 0xAC, 0xF9, 0xD7, 0xAB, 0xD6, 0x93, 0x96, 0x4C, 0x2E, 0x39, 0xED, 0x4E, 0x98, 0xF5, 0x66, 0xF8, 0x09, 0xAE, 0x45, + 0xBB, 0xA1, 0xE6, 0x9C, 0xBA, 0x8E, 0xA0, 0x7B, 0x9C, 0x31, 0x49, 0x97, 0x8A, 0x09, 0xDD, 0x57, 0x86, 0xB8, 0xEA, 0x2F, 0x3B, + 0x49, 0xB6, 0xBA, 0x12, 0xF4, 0x73, 0x31, 0xBA, 0xBE, 0xF0, 0xAB, 0xC5, 0x73, 0x9D, 0x38, 0xBD, 0xBD, 0xF5, 0x9A, 0xAA, 0xC7, + 0x43, 0x4F, 0xD1, 0xD3, 0xF8, 0x69, 0x66, 0x66, 0xFA, 0x2E, 0xD2, 0xAD, 0x2F, 0x35, 0x92, 0x5D, 0x4E, 0xEA, 0x75, 0xD9, 0x80, + 0x8A, 0x5D, 0xCD, 0x67, 0x32, 0xBE, 0x89, 0x27, 0xE3, 0xD0, 0xD6, 0xA7, 0x0B, 0xD0, 0xBF, 0xB4, 0x7B, 0xD9, 0x44, 0x01, 0xEE, + 0xEC, 0x5C, 0x8A, 0x7E, 0xA8, 0xB7, 0x4F, 0x2D, 0x50, 0x8F, 0x73, 0x29, 0x36, 0x3F, 0xDC, 0xE4, 0xDE, 0x93, 0x61, 0x7A, 0x3B, + 0x62, 0x83, 0x77, 0x02, 0xEE, 0xFA, 0xD3, 0x19, 0xE1, 0x35, 0xE0, 0xC9, 0x35, 0xA6, 0xA7, 0x28, 0xF7, 0x23, 0x76, 0x8B, 0x6A, + 0x83, 0x5D, 0xCB, 0x95, 0xC6, 0xCE, 0x50, 0x5F, 0x1D, 0x5B, 0x81, 0x56, 0x15, 0xF2, 0xD0, 0xCF, 0x47, 0x78, 0x94, 0x8F, 0xE6, + 0xEF, 0x23, 0x99, 0x41, 0x48, 0xBC, 0x50, 0x09, 0xD5, 0xB7, 0xC3, 0x50, 0xD0, 0xE5, 0x52, 0x0A, 0xCE, 0xDB, 0x7D, 0x7A, 0x33, + 0x1D, 0x9F, 0xC4, 0xCB, 0x79, 0xE4, 0xC8, 0xF1, 0x04, 0xF5, 0x35, 0xE9, 0x74, 0xC4, 0x50, 0x2A, 0x22, 0xEB, 0xB4, 0xBE, 0x67, + 0xB7, 0xE6, 0xA5, 0x8C, 0x28, 0x62, 0x96, 0x70, 0x25, 0xE0, 0x83, 0xF9, 0x4E, 0x13, 0x58, 0x31, 0xC7, 0x9D, 0x1E, 0x70, 0x32, + 0x23, 0x24, 0x6D, 0x23, 0xE8, 0x4A, 0xEE, 0x74, 0x89, 0xF4, 0xEC, 0xB6, 0xAD, 0xD5, 0x80, 0xD6, 0xD9, 0x00, 0xBA, 0xAD, 0xAB, + 0xD7, 0x84, 0xEE, 0x41, 0xF5, 0xC9, 0x69, 0x97, 0x65, 0xDC, 0xC9, 0x97, 0x6F, 0xD9, 0x69, 0xA7, 0xF6, 0x7D, 0xE0, 0x37, 0x6E, + 0xBE, 0xE3, 0x91, 0x79, 0xF0, 0xD9, 0xAC, 0x2B, 0x4A, 0x66, 0xF9, 0x47, 0x52, 0x7D, 0x78, 0x7E, 0xA1, 0x1F, 0x0B, 0xA2, 0x73, + 0x54, 0xF4, 0xC8, 0x5A, 0x93, 0x16, 0x8E, 0xE9, 0xE7, 0xC6, 0xB3, 0xC4, 0x95, 0x8F, 0x82, 0xF3, 0x6D, 0xB9, 0x25, 0x9A, 0x8B, + 0xED, 0xD6, 0x60, 0x6C, 0x27, 0xE8, 0x0C, 0x9D, 0xB5, 0xCB, 0x27, 0x68, 0xB9, 0x19, 0x74, 0x9D, 0x24, 0x29, 0x58, 0xAA, 0x1C, + 0x64, 0x82, 0xE9, 0x56, 0xC5, 0xF4, 0x05, 0x8C, 0x94, 0x4D, 0xE9, 0x74, 0xD9, 0xCC, 0xA7, 0x6D, 0x36, 0xB9, 0xBB, 0x9B, 0x86, + 0xAD, 0xEF, 0x7E, 0x8B, 0xE9, 0x32, 0x85, 0x75, 0x1E, 0x7F, 0xA4, 0x4A, 0x0E, 0xB8, 0x9D, 0xD0, 0x0E, 0xF9, 0xFA, 0xC5, 0xDE, + 0x35, 0x20, 0xD4, 0x1A, 0xDC, 0x38, 0x69, 0x63, 0x1E, 0xDF, 0x47, 0x8F, 0x0F, 0xDF, 0x63, 0xA3, 0x93, 0x93, 0x21, 0x0C, 0xBC, + 0x49, 0x9F, 0xA3, 0xF9, 0xCD, 0xE7, 0x61, 0xFB, 0x6D, 0xA7, 0x4E, 0xF2, 0xF8, 0x69, 0x8C, 0xFC, 0x74, 0xCD, 0xAB, 0xFA, 0xB0, + 0xDA, 0xDE, 0x2D, 0x7D, 0x95, 0xF8, 0xCA, 0xE8, 0x35, 0xBC, 0x35, 0x5B, 0x67, 0xA5, 0x7D, 0x97, 0x88, 0xFE, 0xEF, 0x2E, 0x31, + 0xD8, 0xE9, 0xC3, 0xE7, 0x70, 0x04, 0xE5, 0x6E, 0x7B, 0xC8, 0x9F, 0xB5, 0xDE, 0x09, 0x23, 0xAD, 0xC0, 0x60, 0xE1, 0xC0, 0x30, + 0x3B, 0xAE, 0xD9, 0x22, 0x3B, 0xA7, 0x9B, 0x1A, 0xD9, 0x53, 0x67, 0x48, 0x53, 0xFB, 0xFA, 0xEA, 0x97, 0xA0, 0x6A, 0xBB, 0xA5, + 0x72, 0x49, 0x4A, 0x3A, 0x84, 0x03, 0x9C, 0x55, 0x4A, 0x6D, 0xD2, 0x55, 0xF7, 0xC9, 0xF3, 0xE6, 0xE0, 0x66, 0xFF, 0x5E, 0x32, + 0x6C, 0x14, 0xC9, 0x5A, 0x53, 0x77, 0x87, 0xD0, 0xA6, 0xE3, 0x34, 0xA4, 0x66, 0x32, 0x9C, 0x15, 0xFE, 0x11, 0x82, 0x2B, 0xB6, + 0x35, 0xBD, 0x09, 0x37, 0x0E, 0x50, 0x85, 0xBD, 0x1F, 0x2E, 0x0D, 0x56, 0xDA, 0x9E, 0xD6, 0x34, 0xD4, 0x10, 0x87, 0xBC, 0x73, + 0xB6, 0xEB, 0xED, 0x2E, 0x21, 0xA4, 0x35, 0x83, 0x77, 0x9A, 0xA1, 0x94, 0x43, 0x50, 0x0B, 0x04, 0x6E, 0xFC, 0x9E, 0xA3, 0x83, + 0xA8, 0xD0, 0x8E, 0x40, 0x24, 0xF0, 0xB1, 0x84, 0x1B, 0xB2, 0xDE, 0x0E, 0xA1, 0xDA, 0x91, 0x09, 0x80, 0xA4, 0xDC, 0x96, 0x97, + 0x76, 0xAF, 0xE3, 0xB8, 0x17, 0xD6, 0x3E, 0xFB, 0x97, 0xFA, 0x3A, 0xF0, 0xC2, 0x4A, 0x96, 0x32, 0xCE, 0x14, 0xF8, 0xB6, 0x66, + 0x59, 0x46, 0x8B, 0xF6, 0x89, 0x33, 0x3A, 0xBA, 0xD4, 0xD5, 0xED, 0xD3, 0x5C, 0xED, 0xBC, 0x24, 0xCF, 0xF3, 0x0F, 0x5C, 0x8F, + 0xC6, 0xFE, 0x66, 0xDB, 0xAB, 0x44, 0x57, 0x1E, 0x3A, 0xDE, 0x3F, 0x1D, 0x84, 0x26, 0x42, 0xD5, 0x0E, 0x05, 0xA3, 0x92, 0x52, + 0x44, 0xF7, 0x04, 0x2E, 0xAF, 0xB0, 0xF5, 0xA7, 0x14, 0x76, 0xDD, 0x9F, 0xED, 0x81, 0x6C, 0x98, 0x16, 0x5F, 0x61, 0xCF, 0xCC, + 0xE8, 0xDE, 0xEC, 0xF2, 0x50, 0xD6, 0x60, 0xFC, 0xEF, 0xB5, 0xD8, 0x1D, 0x1B, 0xDE, 0xAD, 0x69, 0x61, 0x40, 0xDE, 0x88, 0xAA, + 0xA4, 0x66, 0x47, 0xEF, 0x28, 0x0D, 0x56, 0x80, 0x2B, 0x9F, 0x77, 0x31, 0x35, 0xEF, 0xDC, 0x35, 0x95, 0x30, 0xC9, 0xBF, 0x04, + 0xA6, 0xCA, 0x73, 0xF7, 0xE6, 0xF6, 0x53, 0xD7, 0xAD, 0xD2, 0x1D, 0x19, 0x8E, 0x37, 0xB7, 0xFA, 0x52, 0x63, 0x6D, 0x0C, 0x16, + 0x9F, 0xF9, 0x6C, 0x2D, 0x77, 0xBE, 0x3F, 0xDE, 0xCC, 0xE6, 0x93, 0x99, 0xFD, 0xDE, 0xDB, 0xBF, 0x1B, 0x5E, 0x1D, 0x5D, 0x99, + 0x9C, 0x19, 0xCE, 0x37, 0x2A, 0xC7, 0x97, 0xBD, 0x46, 0x49, 0xD6, 0x27, 0xB8, 0xB6, 0x96, 0x23, 0x02, 0xAD, 0x66, 0xA8, 0xA1, + 0xA5, 0xD6, 0xA5, 0x0A, 0x43, 0x30, 0x9C, 0x12, 0x99, 0xB3, 0x7D, 0x8B, 0xA7, 0x87, 0x6B, 0xB1, 0x6E, 0x9D, 0xBA, 0x67, 0x5A, + 0xB8, 0x04, 0x43, 0x5B, 0xA7, 0x31, 0xAD, 0xC9, 0x41, 0xAD, 0x7B, 0x3B, 0xE9, 0xB7, 0xFF, 0x00, 0x00, 0x1A, 0x0D, 0xA0, 0x16, + 0x13, 0x00, 0x00, +}; + // Length of the binary data const int STATIC_MESHTASTIC_JS_LENGTH = 23760; From 485c476f1728b7f271970b8f527a31add5773c93 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Sun, 18 Oct 2020 09:32:12 +0800 Subject: [PATCH 06/17] cleaner battery debug messages --- src/Power.cpp | 3 ++- src/PowerStatus.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index 7d67c7337..3cb43427a 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -146,7 +146,8 @@ void Power::readPowerStatus() const PowerStatus powerStatus = PowerStatus(hasBattery ? OptTrue : OptFalse, batteryLevel->isVBUSPlug() ? OptTrue : OptFalse, batteryLevel->isChargeing() ? OptTrue : OptFalse, batteryVoltageMv, batteryChargePercent); - DEBUG_MSG("Read power stat %d\n", powerStatus.getHasUSB()); + DEBUG_MSG("Battery: hasUSB=%d, isCharging=%d, batMv=%d, batPct=%d\n", powerStatus.getHasUSB(), + powerStatus.getIsCharging(), powerStatus.getBatteryVoltageMv(), powerStatus.getBatteryChargePercent()); newStatus.notifyObservers(&powerStatus); // If we have a battery at all and it is less than 10% full, force deep sleep diff --git a/src/PowerStatus.h b/src/PowerStatus.h index c9bb89a05..e9c192fb8 100644 --- a/src/PowerStatus.h +++ b/src/PowerStatus.h @@ -82,7 +82,7 @@ class PowerStatus : public Status isCharging = newStatus->isCharging; } if (isDirty) { - DEBUG_MSG("Battery %dmV %d%%\n", batteryVoltageMv, batteryChargePercent); + // DEBUG_MSG("Battery %dmV %d%%\n", batteryVoltageMv, batteryChargePercent); onNewStatus.notifyObservers(this); } return 0; From 8fd3cb1aac44228a7307d96b756d3c2952ebc09b Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Sun, 18 Oct 2020 09:44:29 +0800 Subject: [PATCH 07/17] add crude charging detection for 'dumb' voltage based battery sensors --- src/Power.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index 3cb43427a..ae51e8039 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -52,10 +52,13 @@ class AnalogBatteryLevel : public HasBatteryLevel { float v = getBattVoltage() / 1000; - if (v < 2.1) + if (v < noBatVolt) return -1; // If voltage is super low assume no battery installed - return 100 * (v - 3.27) / (4.2 - 3.27); + if (v > chargingVolt) + return 0; // While charging we can't report % full on the battery + + return 100 * (v - emptyVolt) / (fullVolt - emptyVolt); } /** @@ -76,7 +79,20 @@ class AnalogBatteryLevel : public HasBatteryLevel /** * return true if there is a battery installed in this unit */ - virtual bool isBatteryConnect() { return getBattVoltage() != -1; } + virtual bool isBatteryConnect() { return getBattPercentage() != -1; } + + /// If we see a battery voltage higher than physics allows - assume charger is pumping + /// in power + virtual bool isVBUSPlug() { return getBattVoltage() > chargingVolt; } + + /// Assume charging if we have a battery and external power is connected. + /// we can't be smart enough to say 'full'? + virtual bool isChargeing() { return isBatteryConnect() && isVBUSPlug(); } + + private: + /// If we see a battery voltage higher than physics allows - assume charger is pumping + /// in power + const float fullVolt = 4.2, emptyVolt = 3.27, chargingVolt = 4.3, noBatVolt = 2.1; } analogLevel; Power::Power() : OSThread("Power") {} @@ -146,7 +162,7 @@ void Power::readPowerStatus() const PowerStatus powerStatus = PowerStatus(hasBattery ? OptTrue : OptFalse, batteryLevel->isVBUSPlug() ? OptTrue : OptFalse, batteryLevel->isChargeing() ? OptTrue : OptFalse, batteryVoltageMv, batteryChargePercent); - DEBUG_MSG("Battery: hasUSB=%d, isCharging=%d, batMv=%d, batPct=%d\n", powerStatus.getHasUSB(), + DEBUG_MSG("Battery: usbPower=%d, isCharging=%d, batMv=%d, batPct=%d\n", powerStatus.getHasUSB(), powerStatus.getIsCharging(), powerStatus.getBatteryVoltageMv(), powerStatus.getBatteryChargePercent()); newStatus.notifyObservers(&powerStatus); From df2733a3b500a9d9f0de16b8b31bae2aebc19414 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sat, 17 Oct 2020 20:28:19 -0700 Subject: [PATCH 08/17] readded nodeScriptScriptsJS. it got lost in the transition to the new webserver --- src/meshwifi/meshhttp.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index 7f54b2f29..1d6c7cead 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -51,6 +51,7 @@ void handleFavicon(HTTPRequest *req, HTTPResponse *res); void handleRoot(HTTPRequest *req, HTTPResponse *res); void handleBasicHTML(HTTPRequest *req, HTTPResponse *res); void handleBasicJS(HTTPRequest *req, HTTPResponse *res); +void handleScriptsScriptJS(HTTPRequest *req, HTTPResponse *res); void handleStatic(HTTPRequest *req, HTTPResponse *res); void handle404(HTTPRequest *req, HTTPResponse *res); @@ -216,6 +217,7 @@ void initWebServer() ResourceNode *nodeHotspot = new ResourceNode("/hotspot-detect.html", "GET", &handleHotspot); ResourceNode *nodeFavicon = new ResourceNode("/favicon.ico", "GET", &handleFavicon); ResourceNode *nodeRoot = new ResourceNode("/", "GET", &handleRoot); + ResourceNode *nodeScriptScriptsJS = new ResourceNode("/scripts/script.js", "GET", &handleScriptsScriptJS); ResourceNode *nodeBasicHTML = new ResourceNode("/basic.html", "GET", &handleBasicHTML); ResourceNode *nodeBasicJS = new ResourceNode("/basic.js", "GET", &handleBasicJS); ResourceNode *nodeStatic = new ResourceNode("/static/*", "GET", &handleStatic); @@ -228,6 +230,7 @@ void initWebServer() secureServer->registerNode(nodeHotspot); secureServer->registerNode(nodeFavicon); secureServer->registerNode(nodeRoot); + secureServer->registerNode(nodeScriptScriptsJS); secureServer->registerNode(nodeBasicHTML); secureServer->registerNode(nodeBasicJS); secureServer->registerNode(nodeStatic); @@ -242,6 +245,7 @@ void initWebServer() insecureServer->registerNode(nodeHotspot); insecureServer->registerNode(nodeFavicon); insecureServer->registerNode(nodeRoot); + insecureServer->registerNode(nodeScriptScriptsJS); insecureServer->registerNode(nodeBasicHTML); insecureServer->registerNode(nodeBasicJS); insecureServer->registerNode(nodeStatic); From a371592ad9752a789e22a9d4284424a8c1dc6a11 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sun, 18 Oct 2020 18:07:44 -0700 Subject: [PATCH 09/17] Added instructions for David --- src/meshwifi/meshhttpStatic.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/meshwifi/meshhttpStatic.h b/src/meshwifi/meshhttpStatic.h index 673685bb5..b4645625f 100644 --- a/src/meshwifi/meshhttpStatic.h +++ b/src/meshwifi/meshhttpStatic.h @@ -7,6 +7,8 @@ - Convert to hex: http://tomeko.net/online_tools/file_to_hex.php?lang=en - Paste into the array + - Note the filesize of your .gz file and write the file + size into the length int. */ From 3061860dabaf598640d0229793c19cec72dcd9f7 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sun, 18 Oct 2020 18:30:19 -0700 Subject: [PATCH 10/17] Update sleep timer for the CPU clock --- src/meshwifi/meshhttp.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index 1d6c7cead..a63a5d8e5 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -2,7 +2,7 @@ #include "NodeDB.h" #include "configuration.h" #include "main.h" -#include "meshhttpStatic.h" +#include "meshHttpStatic.h" #include "meshwifi/meshwifi.h" #include "sleep.h" #include @@ -79,9 +79,11 @@ void handleWebResponse() insecureServer->loop(); } - // Slow down the CPU if we have not received a request within the last - // 2 minutes. - if (millis() - timeSpeedUp >= (2 * 60 * 1000)) { + /* + Slow down the CPU if we have not received a request within the last few + seconds. + */ + if (millis() - timeSpeedUp >= (25 * 1000)) { setCpuFrequencyMhz(80); timeSpeedUp = millis(); } From a16c3af30a35f7198c19aa19c07ea79a6dd25892 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sun, 18 Oct 2020 18:44:08 -0700 Subject: [PATCH 11/17] Clarified debug message regardding the Web Server startup status. --- src/meshwifi/meshhttp.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index a63a5d8e5..68493f3df 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -255,12 +255,14 @@ void initWebServer() insecureServer->addMiddleware(&middlewareSpeedUp160); - DEBUG_MSG("Starting Web Server...\n"); + DEBUG_MSG("Starting Web Servers...\n"); secureServer->start(); insecureServer->start(); if (secureServer->isRunning() && insecureServer->isRunning()) { - DEBUG_MSG("Web Server Ready\n"); + DEBUG_MSG("HTTP and HTTPS Web Servers Ready! :-) \n"); isWebServerReady = 1; + } else { + DEBUG_MSG("HTTP and HTTPS Web Servers Failed! ;-( \n"); } } From d4df3f8a7e16f8052afc9a4bf5602b565cd4801a Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sun, 18 Oct 2020 21:39:02 -0700 Subject: [PATCH 12/17] mDNS server http://meshtastic.local --- src/graphics/Screen.cpp | 15 ++++++++------- src/meshwifi/meshwifi.cpp | 19 +++++++++++++++---- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index a97e04b9e..350b27d47 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -110,8 +110,6 @@ static void drawBootScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int1 screen->forceDisplay(); } - - static void drawFrameBluetooth(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y) { display->setTextAlignment(TEXT_ALIGN_CENTER); @@ -1044,8 +1042,12 @@ void DebugInfo::drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, i } } - display->drawString(x, y + FONT_HEIGHT_SMALL * 2, "SSID: " + String(wifiName)); - display->drawString(x, y + FONT_HEIGHT_SMALL * 3, "PWD: " + String(wifiPsw)); + if ((millis() / 1000) % 2) { + display->drawString(x, y + FONT_HEIGHT_SMALL * 2, "SSID: " + String(wifiName)); + } else { + display->drawString(x, y + FONT_HEIGHT_SMALL * 2, "PWD: " + String(wifiPsw)); + } + display->drawString(x, y + FONT_HEIGHT_SMALL * 3, "http://meshtastic.local"); /* Display a heartbeat pixel that blinks every time the frame is redrawn */ #ifdef SHOW_REDRAWS @@ -1100,9 +1102,8 @@ void DebugInfo::drawFrameSettings(OLEDDisplay *display, OLEDDisplayUiState *stat #ifndef NO_ESP32 // Show CPU Frequency. - display->drawString(x + SCREEN_WIDTH - display->getStringWidth("CPU " + String(getCpuFrequencyMhz()) + "MHz"), - y + FONT_HEIGHT_SMALL * 1, - "CPU " + String(getCpuFrequencyMhz()) + "MHz"); + display->drawString(x + SCREEN_WIDTH - display->getStringWidth("CPU " + String(getCpuFrequencyMhz()) + "MHz"), + y + FONT_HEIGHT_SMALL * 1, "CPU " + String(getCpuFrequencyMhz()) + "MHz"); #endif // Line 3 diff --git a/src/meshwifi/meshwifi.cpp b/src/meshwifi/meshwifi.cpp index 3026b13f1..a20cebede 100644 --- a/src/meshwifi/meshwifi.cpp +++ b/src/meshwifi/meshwifi.cpp @@ -6,6 +6,7 @@ #include "meshwifi/meshhttp.h" #include "target_specific.h" #include +#include #include static void WiFiEvent(WiFiEvent_t event); @@ -18,7 +19,7 @@ static WiFiServerPort *apiPort; uint8_t wifiDisconnectReason = 0; // Stores our hostname -static char ourHost[16]; +char ourHost[16]; bool isWifiAvailable() { @@ -63,7 +64,6 @@ void initWifi() createSSLCert(); - if (radioConfig.has_preferences) { const char *wifiName = radioConfig.preferences.wifi_ssid; const char *wifiPsw = radioConfig.preferences.wifi_password; @@ -117,12 +117,23 @@ void initWifi() } } } + + if (!MDNS.begin( "Meshtastic" )) { + DEBUG_MSG("Error setting up MDNS responder!\n"); + + while (1) { + delay(1000); + } + } + DEBUG_MSG("mDNS responder started\n"); + DEBUG_MSG("mDNS Host: Meshtastic.local\n"); + MDNS.addService("http", "tcp", 80); + MDNS.addService("https", "tcp", 443); + } else DEBUG_MSG("Not using WIFI\n"); } - - static void initApiServer() { // Start API server on port 4403 From ff20b29c3c30df0a8129e7c4548bdc1e91eb2966 Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Sun, 18 Oct 2020 21:44:55 -0700 Subject: [PATCH 13/17] update case of meshhttpStatic.h --- src/meshwifi/meshhttp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/meshwifi/meshhttp.cpp b/src/meshwifi/meshhttp.cpp index 68493f3df..417388585 100644 --- a/src/meshwifi/meshhttp.cpp +++ b/src/meshwifi/meshhttp.cpp @@ -2,7 +2,7 @@ #include "NodeDB.h" #include "configuration.h" #include "main.h" -#include "meshHttpStatic.h" +#include "meshhttpStatic.h" #include "meshwifi/meshwifi.h" #include "sleep.h" #include From ad7a474a52c0761df5bcc3ef849f09b80d3bf4db Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Wed, 21 Oct 2020 12:48:04 +0800 Subject: [PATCH 14/17] update buildscript to generate universal/regionless roms --- bin/build-all.sh | 83 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 27 deletions(-) diff --git a/bin/build-all.sh b/bin/build-all.sh index 63dfc01c1..55c816d00 100755 --- a/bin/build-all.sh +++ b/bin/build-all.sh @@ -9,11 +9,10 @@ COUNTRIES="US EU433 EU865 CN JP ANZ KR" #COUNTRIES=CN BOARDS_ESP32="tlora-v2 tlora-v1 tlora-v2-1-1.6 tbeam heltec tbeam0.7" +# BOARDS_ESP32=tbeam # FIXME note nrf52840dk build is for some reason only generating a BIN file but not a HEX file nrf52840dk-geeksville is fine BOARDS_NRF52="lora-relay-v1" -BOARDS="$BOARDS_ESP32 $BOARDS_NRF52" -#BOARDS=tbeam OUTDIR=release/latest @@ -22,22 +21,61 @@ ARCHIVEDIR=release/archive rm -f $OUTDIR/firmware* -mkdir -p $OUTDIR/bins $OUTDIR/elfs -rm -f $OUTDIR/bins/* +mkdir -p $OUTDIR/bins +rm -r $OUTDIR/bins/* +mkdir -p $OUTDIR/bins/universal $OUTDIR/elfs/universal # build the named environment and copy the bins to the release directory -function do_build { - echo "Building for $BOARD with $PLATFORMIO_BUILD_FLAGS" +function do_build() { + BOARD=$1 + COUNTRY=$2 + isNrf=$3 + + echo "Building $COUNTRY for $BOARD with $PLATFORMIO_BUILD_FLAGS" rm -f .pio/build/$BOARD/firmware.* # The shell vars the build tool expects to find - export HW_VERSION="1.0-$COUNTRY" export APP_VERSION=$VERSION - export COUNTRY + + # Are we building a universal/regionless rom? + if [ "x$COUNTRY" != "x" ] + then + export HW_VERSION="1.0-$COUNTRY" + export COUNTRY + basename=firmware-$BOARD-$COUNTRY-$VERSION + else + export HW_VERSION="1.0" + unset COUNTRY + basename=universal/firmware-$BOARD-$VERSION + fi pio run --jobs 4 --environment $BOARD # -v SRCELF=.pio/build/$BOARD/firmware.elf - cp $SRCELF $OUTDIR/elfs/firmware-$BOARD-$COUNTRY-$VERSION.elf + cp $SRCELF $OUTDIR/elfs/$basename.elf + + if [ "$isNrf" = "false" ] + then + echo "Copying ESP32 bin file" + SRCBIN=.pio/build/$BOARD/firmware.bin + cp $SRCBIN $OUTDIR/bins/$basename.bin + else + echo "Generating NRF52 uf2 file" + SRCHEX=.pio/build/$BOARD/firmware.hex + bin/uf2conv.py $SRCHEX -c -o $OUTDIR/bins/$basename.uf2 -f 0xADA52840 + fi +} + +function do_boards() { + BOARDS=$1 + isNrf=$2 + for board in $BOARDS; do + for country in $COUNTRIES; do + do_build $board $country "$isNrf" + done + + # Build universal + do_build $board "" "$isNrf" + done } # Make sure our submodules are current @@ -46,26 +84,16 @@ git submodule update # Important to pull latest version of libs into all device flavors, otherwise some devices might be stale platformio lib update -for COUNTRY in $COUNTRIES; do - for BOARD in $BOARDS; do - do_build $BOARD - done - - echo "Copying ESP32 bin files" - for BOARD in $BOARDS_ESP32; do - SRCBIN=.pio/build/$BOARD/firmware.bin - cp $SRCBIN $OUTDIR/bins/firmware-$BOARD-$COUNTRY-$VERSION.bin - done - - echo "Generating NRF52 uf2 files" - for BOARD in $BOARDS_NRF52; do - SRCHEX=.pio/build/$BOARD/firmware.hex - bin/uf2conv.py $SRCHEX -c -o $OUTDIR/bins/firmware-$BOARD-$COUNTRY-$VERSION.uf2 -f 0xADA52840 - done -done +do_boards $BOARDS_ESP32 "false" +do_boards $BOARDS_NRF52 "true" # keep the bins in archive also -cp $OUTDIR/bins/firmware* $OUTDIR/elfs/firmware* $ARCHIVEDIR +cp $OUTDIR/bins/firmware* $OUTDIR/elfs/firmware* $OUTDIR/bins/universal/firmware* $OUTDIR/elfs/universal/firmware* $ARCHIVEDIR + +echo Updating android bins $OUTDIR/forandroid +rm -rf $OUTDIR/forandroid +mkdir -p $OUTDIR/forandroid +cp -a $OUTDIR/bins/universal/*.bin $OUTDIR/forandroid/ cat >$OUTDIR/curfirmwareversion.xml < @@ -79,6 +107,7 @@ Generated by bin/buildall.sh --> XML +echo Generating $ARCHIVEDIR/firmware-$VERSION.zip rm -f $ARCHIVEDIR/firmware-$VERSION.zip zip --junk-paths $ARCHIVEDIR/firmware-$VERSION.zip $OUTDIR/bins/firmware-*-$VERSION.* images/system-info.bin bin/device-install.sh bin/device-update.sh From 0b3c25f6d954856c1f7f226242ad003e028596c0 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Wed, 21 Oct 2020 16:50:09 +0800 Subject: [PATCH 15/17] use correct code for "talking to phone" fixes OTA update while a router --- src/esp32/BluetoothSoftwareUpdate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/esp32/BluetoothSoftwareUpdate.cpp b/src/esp32/BluetoothSoftwareUpdate.cpp index 4fa518ccb..12e30d1ce 100644 --- a/src/esp32/BluetoothSoftwareUpdate.cpp +++ b/src/esp32/BluetoothSoftwareUpdate.cpp @@ -72,7 +72,7 @@ int update_data_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_ crc.update(data, len); Update.write(data, len); updateActualSize += len; - powerFSM.trigger(EVENT_RECEIVED_TEXT_MSG); // Not exactly correct, but we want to force the device to not sleep now + powerFSM.trigger(EVENT_CONTACT_FROM_PHONE); return 0; } From a5d7bacdbf3523fb0f0c4286daf0bbe155c54302 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Wed, 21 Oct 2020 17:27:13 +0800 Subject: [PATCH 16/17] Show current region on the boot screen --- src/graphics/Screen.cpp | 17 ++++++++++------- src/main.cpp | 19 +++++++++++-------- src/mesh/MeshRadio.h | 5 ++++- src/mesh/NodeDB.cpp | 3 +++ src/mesh/RadioInterface.cpp | 29 ++++++++++++++++------------- 5 files changed, 44 insertions(+), 29 deletions(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 350b27d47..b6e626fdf 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -92,21 +92,24 @@ static void drawBootScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int1 // needs to be drawn relative to x and y // draw centered left to right and centered above the one line of app text - display->drawXbm(x + (SCREEN_WIDTH - icon_width) / 2, y + (SCREEN_HEIGHT - FONT_HEIGHT_MEDIUM - icon_height) / 2, icon_width, - icon_height, (const uint8_t *)icon_bits); + display->drawXbm(x + (SCREEN_WIDTH - icon_width) / 2, + y + (SCREEN_HEIGHT - FONT_HEIGHT_MEDIUM - icon_height) / 2 + 2, + icon_width, icon_height, (const uint8_t *)icon_bits); display->setFont(FONT_MEDIUM); display->setTextAlignment(TEXT_ALIGN_LEFT); const char *title = "meshtastic.org"; display->drawString(x + getStringCenteredX(title), y + SCREEN_HEIGHT - FONT_HEIGHT_MEDIUM, title); display->setFont(FONT_SMALL); - const char *region = xstr(HW_VERSION); - if (*region && region[3] == '-') // Skip past 1.0- in the 1.0-EU865 string - region += 4; + + const char *region = myRegion ? myRegion->name : NULL; + if (region) + display->drawString(x + 0, y + 0, region); + char buf[16]; snprintf(buf, sizeof(buf), "%s", xstr(APP_VERSION)); // Note: we don't bother printing region or now, it makes the string too long - display->drawString(SCREEN_WIDTH - 20, 0, buf); + display->drawString(x + SCREEN_WIDTH - display->getStringWidth(buf), y + 0, buf); screen->forceDisplay(); } @@ -1139,7 +1142,7 @@ int Screen::handleStatusUpdate(const meshtastic::Status *arg) // DEBUG_MSG("Screen got status update %d\n", arg->getStatusType()); switch (arg->getStatusType()) { case STATUS_TYPE_NODE: - if (nodeDB.updateTextMessage || nodeStatus->getLastNumTotal() != nodeStatus->getNumTotal()) { + if (showingNormalScreen && (nodeDB.updateTextMessage || nodeStatus->getLastNumTotal() != nodeStatus->getNumTotal())) { setFrames(); // Regen the list of screens } nodeDB.updateGUI = false; diff --git a/src/main.cpp b/src/main.cpp index e258ec521..2781b7707 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -290,14 +290,6 @@ void setup() // Initialize the screen first so we can show the logo while we start up everything else. screen = new graphics::Screen(SSD1306_ADDRESS); -#if defined(ST7735_CS) || defined(HAS_EINK) - screen->setup(); -#else - if (ssd1306_found) - screen->setup(); -#endif - - screen->print("Started...\n"); readFromRTC(); // read the main CPU RTC at first (in case we can't get GPS time) @@ -338,6 +330,17 @@ void setup() service.init(); + // Don't call screen setup until after nodedb is setup (because we need + // the current region name) +#if defined(ST7735_CS) || defined(HAS_EINK) + screen->setup(); +#else + if (ssd1306_found) + screen->setup(); +#endif + + screen->print("Started...\n"); + // We have now loaded our saved preferences from flash // ONCE we will factory reset the GPS for bug #327 diff --git a/src/mesh/MeshRadio.h b/src/mesh/MeshRadio.h index 2cee8f89a..be99032f2 100644 --- a/src/mesh/MeshRadio.h +++ b/src/mesh/MeshRadio.h @@ -16,4 +16,7 @@ struct RegionInfo { const char *name; // EU433 etc }; -extern const RegionInfo regions[]; \ No newline at end of file +extern const RegionInfo regions[]; +extern const RegionInfo *myRegion; + +extern void initRegion(); \ No newline at end of file diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index cf47cfd15..1febc0ae1 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -245,6 +245,9 @@ void NodeDB::init() } } + // Update the global myRegion + initRegion(); + strncpy(myNodeInfo.firmware_version, optstr(APP_VERSION), sizeof(myNodeInfo.firmware_version)); strncpy(myNodeInfo.hw_model, HW_VENDOR, sizeof(myNodeInfo.hw_model)); diff --git a/src/mesh/RadioInterface.cpp b/src/mesh/RadioInterface.cpp index 8fefd80f8..c35075c66 100644 --- a/src/mesh/RadioInterface.cpp +++ b/src/mesh/RadioInterface.cpp @@ -26,7 +26,20 @@ const RegionInfo regions[] = { RDEF(Unset, 903.08f, 2.16f, 13, 0) // Assume US freqs if unset, Must be last }; -static const RegionInfo *myRegion; +const RegionInfo *myRegion; + +void initRegion() +{ + if (!myRegion) { + const RegionInfo *r = regions; + for (; r->code != RegionCode_Unset && r->code != radioConfig.preferences.region; r++) + ; + myRegion = r; + DEBUG_MSG("Wanted region %d, using %s\n", radioConfig.preferences.region, r->name); + + myNodeInfo.num_channels = myRegion->numChannels; // Tell our android app how many channels we have + } +} /** * ## LoRaWAN for North America @@ -91,20 +104,10 @@ void printPacket(const char *prefix, const MeshPacket *p) DEBUG_MSG(")\n"); } -RadioInterface::RadioInterface() +RadioInterface::RadioInterface() { assert(sizeof(PacketHeader) == 4 || sizeof(PacketHeader) == 16); // make sure the compiler did what we expected - if (!myRegion) { - const RegionInfo *r = regions; - for (; r->code != RegionCode_Unset && r->code != radioConfig.preferences.region; r++) - ; - myRegion = r; - DEBUG_MSG("Wanted region %d, using %s\n", radioConfig.preferences.region, r->name); - - myNodeInfo.num_channels = myRegion->numChannels; // Tell our android app how many channels we have - } - // Can't print strings this early - serial not setup yet // DEBUG_MSG("Set meshradio defaults name=%s\n", channelSettings.name); } @@ -120,7 +123,7 @@ bool RadioInterface::init() // we now expect interfaces to operate in promiscous mode // radioIf.setThisAddress(nodeDB.getNodeNum()); // Note: we must do this here, because the nodenum isn't inited at constructor // time. - + return true; } From 14c4022c1871aaa32d99edf6c6b4e6d6188ec3cf Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Wed, 21 Oct 2020 19:18:03 +0800 Subject: [PATCH 17/17] 1.1.6 (and screen layout tweaks) --- bin/build-all.sh | 10 +++++----- bin/version.sh | 2 +- src/graphics/Screen.cpp | 5 ++--- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/bin/build-all.sh b/bin/build-all.sh index 55c816d00..9f0888f03 100755 --- a/bin/build-all.sh +++ b/bin/build-all.sh @@ -66,9 +66,9 @@ function do_build() { } function do_boards() { - BOARDS=$1 - isNrf=$2 - for board in $BOARDS; do + declare boards=$1 + declare isNrf=$2 + for board in $boards; do for country in $COUNTRIES; do do_build $board $country "$isNrf" done @@ -84,8 +84,8 @@ git submodule update # Important to pull latest version of libs into all device flavors, otherwise some devices might be stale platformio lib update -do_boards $BOARDS_ESP32 "false" -do_boards $BOARDS_NRF52 "true" +do_boards "$BOARDS_ESP32" "false" +do_boards "$BOARDS_NRF52" "true" # keep the bins in archive also cp $OUTDIR/bins/firmware* $OUTDIR/elfs/firmware* $OUTDIR/bins/universal/firmware* $OUTDIR/elfs/universal/firmware* $ARCHIVEDIR diff --git a/bin/version.sh b/bin/version.sh index ecc6ad74a..4e8e08ae9 100644 --- a/bin/version.sh +++ b/bin/version.sh @@ -1,3 +1,3 @@ -export VERSION=1.1.5 \ No newline at end of file +export VERSION=1.1.6 \ No newline at end of file diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index b6e626fdf..7773cdc32 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -92,9 +92,8 @@ static void drawBootScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int1 // needs to be drawn relative to x and y // draw centered left to right and centered above the one line of app text - display->drawXbm(x + (SCREEN_WIDTH - icon_width) / 2, - y + (SCREEN_HEIGHT - FONT_HEIGHT_MEDIUM - icon_height) / 2 + 2, - icon_width, icon_height, (const uint8_t *)icon_bits); + display->drawXbm(x + (SCREEN_WIDTH - icon_width) / 2, y + (SCREEN_HEIGHT - FONT_HEIGHT_MEDIUM - icon_height) / 2 + 2, + icon_width, icon_height, (const uint8_t *)icon_bits); display->setFont(FONT_MEDIUM); display->setTextAlignment(TEXT_ALIGN_LEFT);