From 0a0ced3e8e5c77fee0363ed8c03357a4c49aca02 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sun, 18 Dec 2022 21:02:19 +0100 Subject: [PATCH 01/24] Hex string custom palette option --- wled00/FX_fcn.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 99284439..6746b573 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -1512,14 +1512,27 @@ void WS2812FX::loadCustomPalettes() if (readObjectFromFile(fileName, nullptr, &pDoc)) { JsonArray pal = pDoc[F("palette")]; if (!pal.isNull() && pal.size()>7) { // not an empty palette (at least 2 entries) - size_t palSize = MIN(pal.size(), 72); - palSize -= palSize % 4; // make sure size is multiple of 4 - for (size_t i=0; i()<256; i+=4) { - tcp[ i ] = (uint8_t) pal[ i ].as(); // index - tcp[i+1] = (uint8_t) pal[i+1].as(); // R - tcp[i+2] = (uint8_t) pal[i+2].as(); // G - tcp[i+3] = (uint8_t) pal[i+3].as(); // B - DEBUG_PRINTF("%d(%d) : %d %d %d\n", i, int(tcp[i]), int(tcp[i+1]), int(tcp[i+2]), int(tcp[i+3])); + if (pal[0].is() && pal[1].is()) { + // we have an array of index & hex strings + size_t palSize = MIN(pal.size(), 36); + palSize -= palSize % 2; // make sure size is multiple of 2 + for (size_t i=0, j=0; i()<256; i+=2, j+=4) { + uint8_t rgbw[] = {0,0,0,0}; + tcp[ j ] = (uint8_t) pal[ i ].as(); // index + colorFromHexString(rgbw, pal[i+1].as()); // will catch non-string entires + for (size_t c=0; c<3; c++) tcp[j+c] = rgbw[c]; // only use RGB component + DEBUG_PRINTF("%d(%d) : %d %d %d\n", i, int(tcp[i]), int(tcp[i+1]), int(tcp[i+2]), int(tcp[i+3])); + } + } else { + size_t palSize = MIN(pal.size(), 72); + palSize -= palSize % 4; // make sure size is multiple of 4 + for (size_t i=0; i()<256; i+=4) { + tcp[ i ] = (uint8_t) pal[ i ].as(); // index + tcp[i+1] = (uint8_t) pal[i+1].as(); // R + tcp[i+2] = (uint8_t) pal[i+2].as(); // G + tcp[i+3] = (uint8_t) pal[i+3].as(); // B + DEBUG_PRINTF("%d(%d) : %d %d %d\n", i, int(tcp[i]), int(tcp[i+1]), int(tcp[i+2]), int(tcp[i+3])); + } } customPalettes.push_back(targetPalette.loadDynamicGradientPalette(tcp)); } From ea6d339b9ce494963062c3a69ce3034335e29427 Mon Sep 17 00:00:00 2001 From: ezcGman Date: Mon, 19 Dec 2022 22:15:39 +0100 Subject: [PATCH 02/24] UM SHT: Fixed MQTT discovery using correct unit --- usermods/sht/usermod_sht.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index 42b22a79..88daeb43 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -191,7 +191,7 @@ void ShtUsermod::publishHomeAssistantAutodiscovery() { json[F("stat_cla")] = F("measurement"); snprintf_P(buf, 127, PSTR("%s-temperature"), escapedMac.c_str()); json[F("uniq_id")] = buf; - json[F("unit_of_meas")] = F("°C"); + json[F("unit_of_meas")] = F((unitOfTemp ? "°F" : "°C")); appendDeviceToMqttDiscoveryMessage(json); payload_size = serializeJson(json, json_str); snprintf_P(buf, 127, PSTR("homeassistant/sensor/%s/%s-temperature/config"), escapedMac.c_str(), escapedMac.c_str()); From f3d52f493258a66dafeabc603ddba194fe0a353a Mon Sep 17 00:00:00 2001 From: ezcGman Date: Mon, 19 Dec 2022 22:30:11 +0100 Subject: [PATCH 03/24] UM SHT: MQTT re-publish values on unit change --- usermods/sht/usermod_sht.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index 88daeb43..652bdfde 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -387,6 +387,7 @@ bool ShtUsermod::readFromConfig(JsonObject &root) bool oldEnabled = enabled; byte oldShtType = shtType; + byte oldUnitOfTemp = unitOfTemp; bool oldHaMqttDiscovery = haMqttDiscovery; getJsonValue(top[FPSTR(_enabled)], enabled); @@ -410,6 +411,11 @@ bool ShtUsermod::readFromConfig(JsonObject &root) initShtTempHumiditySensor(); } + if (oldUnitOfTemp != unitOfTemp) { + publishTemperatureAndHumidityViaMqtt(); + publishHomeAssistantAutodiscovery(); + } + if (oldHaMqttDiscovery != haMqttDiscovery && haMqttDiscovery) { publishHomeAssistantAutodiscovery(); } From 5cfea54b06828b936f4fce9964a6d4f4e23ffebf Mon Sep 17 00:00:00 2001 From: ezcGman Date: Tue, 20 Dec 2022 23:58:11 +0100 Subject: [PATCH 04/24] UM SHT: Apply PR feedback --- usermods/sht/usermod_sht.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index 652bdfde..9a3a2f4d 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -191,7 +191,7 @@ void ShtUsermod::publishHomeAssistantAutodiscovery() { json[F("stat_cla")] = F("measurement"); snprintf_P(buf, 127, PSTR("%s-temperature"), escapedMac.c_str()); json[F("uniq_id")] = buf; - json[F("unit_of_meas")] = F((unitOfTemp ? "°F" : "°C")); + json[F("unit_of_meas")] = unitOfTemp ? F("°F") : F("°C"); appendDeviceToMqttDiscoveryMessage(json); payload_size = serializeJson(json, json_str); snprintf_P(buf, 127, PSTR("homeassistant/sensor/%s/%s-temperature/config"), escapedMac.c_str(), escapedMac.c_str()); From f12025b86edcb09771593a15a96fd48a5057a3a8 Mon Sep 17 00:00:00 2001 From: ezcGman Date: Wed, 21 Dec 2022 00:05:26 +0100 Subject: [PATCH 05/24] UM SHT: Added getters and isEnabled check --- usermods/sht/usermod_sht.h | 41 +++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index 9a3a2f4d..a5b0e97a 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -56,9 +56,13 @@ class ShtUsermod : public Usermod bool readFromConfig(JsonObject &root); void addToJsonInfo(JsonObject& root); - float getTemperatureC(); - float getTemperatureF(); - float getHumidity(); + bool isEnabled() { return enabled; } + + float getTemperature(); + float getTemperatureC() { return shtCurrentTempC; } + float getTemperatureF() { return shtCurrentTempF; } + float getHumidity() { return shtCurrentHumidity; } + const char* getUnitString(); uint16_t getId() { return USERMOD_ID_SHT; } }; @@ -162,9 +166,9 @@ void ShtUsermod::publishTemperatureAndHumidityViaMqtt() { char buf[128]; snprintf_P(buf, 127, PSTR("%s/temperature"), mqttDeviceTopic); - mqtt->publish(buf, 0, false, String((unitOfTemp ? getTemperatureF() : getTemperatureC())).c_str()); + mqtt->publish(buf, 0, false, String(getTemperature()).c_str()); snprintf_P(buf, 127, PSTR("%s/humidity"), mqttDeviceTopic); - mqtt->publish(buf, 0, false, String(shtCurrentHumidity).c_str()); + mqtt->publish(buf, 0, false, String(getHumidity()).c_str()); } /** @@ -463,36 +467,27 @@ void ShtUsermod::addToJsonInfo(JsonObject& root) return; } - jsonHumidity.add(shtCurrentHumidity); + jsonHumidity.add(getHumidity()); jsonHumidity.add(F(" RH")); - unitOfTemp ? jsonTemp.add(getTemperatureF()) : jsonTemp.add(getTemperatureC()); + jsonTemp.add(getTemperature()); unitOfTemp ? jsonTemp.add(F(" °F")) : jsonTemp.add(F(" °C")); } /** - * Getter for last read temperature in Celsius. + * Getter for last read temperature for configured unit. * * @return float */ -float ShtUsermod::getTemperatureC() { - return shtCurrentTempC; +float ShtUsermod::getTemperature() { + return unitOfTemp ? getTemperatureF() : getTemperatureC(); } /** - * Getter for last read temperature in Fahrenheit. + * Returns the current configured unit as human readable string. * - * @return float + * @return const char* */ -float ShtUsermod::getTemperatureF() { - return shtCurrentTempF; -} - -/** - * Getter for last read humidity in RH%. - * - * @return float - */ -float ShtUsermod::getHumidity() { - return shtCurrentHumidity; +const char* ShtUsermod::getUnitString() { + return unitOfTemp ? "°F" : "°C"; } \ No newline at end of file From 4ecad6592696a44be7ad7641f645a98a250aabd7 Mon Sep 17 00:00:00 2001 From: ezcGman Date: Wed, 21 Dec 2022 00:34:22 +0100 Subject: [PATCH 06/24] UM SHT: Codestyle --- usermods/sht/usermod_sht.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index a5b0e97a..2244e3ad 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -471,7 +471,7 @@ void ShtUsermod::addToJsonInfo(JsonObject& root) jsonHumidity.add(F(" RH")); jsonTemp.add(getTemperature()); - unitOfTemp ? jsonTemp.add(F(" °F")) : jsonTemp.add(F(" °C")); + jsonTemp.add(unitOfTemp ? F(" °F") : F(" °C")); } /** From 4322d195d3ed73f29ab0e3096f634f0ec784b520 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Wed, 21 Dec 2022 21:00:28 +0100 Subject: [PATCH 07/24] Smooth random palette changes Bugfix loading string palettes JS optimization. --- wled00/FX_fcn.cpp | 27 +- wled00/data/index.js | 2 - wled00/html_ui.h | 971 +++++++++++++++++++++---------------------- 3 files changed, 505 insertions(+), 495 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 6746b573..cc3b122e 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -211,6 +211,7 @@ void Segment::setUpLeds() { CRGBPalette16 &Segment::loadPalette(CRGBPalette16 &targetPalette, uint8_t pal) { static unsigned long _lastPaletteChange = 0; // perhaps it should be per segment static CRGBPalette16 randomPalette = CRGBPalette16(DEFAULT_COLOR); + static CRGBPalette16 prevRandomPalette = CRGBPalette16(CRGB(BLACK)); byte tcp[72]; if (pal < 245 && pal > GRADIENT_PALETTE_COUNT+13) pal = 0; if (pal > 245 && (strip.customPalettes.size() == 0 || 255U-pal > strip.customPalettes.size()-1)) pal = 0; @@ -230,16 +231,28 @@ CRGBPalette16 &Segment::loadPalette(CRGBPalette16 &targetPalette, uint8_t pal) { switch (pal) { case 0: //default palette. Exceptions for specific effects above targetPalette = PartyColors_p; break; - case 1: //periodically replace palette with a random one. Doesn't work with multiple FastLED segments - if (millis() - _lastPaletteChange > 5000 /*+ ((uint32_t)(255-intensity))*100*/) { + case 1: {//periodically replace palette with a random one. Transition palette change in 500ms + uint32_t timeSinceLastChange = millis() - _lastPaletteChange; + if (timeSinceLastChange > 5000 /*+ ((uint32_t)(255-intensity))*100*/) { + prevRandomPalette = randomPalette; randomPalette = CRGBPalette16( CHSV(random8(), random8(160, 255), random8(128, 255)), CHSV(random8(), random8(160, 255), random8(128, 255)), CHSV(random8(), random8(160, 255), random8(128, 255)), CHSV(random8(), random8(160, 255), random8(128, 255))); _lastPaletteChange = millis(); + timeSinceLastChange = 0; } - targetPalette = randomPalette; break; + if (timeSinceLastChange <= 500) { + targetPalette = prevRandomPalette; + // there needs to be 255 palette blends (48) for full blend but that is too resource intensive + // so 128 is a compromise + size_t noOfBlends = ((128U * timeSinceLastChange) / 500U); + for (size_t i=0; i7) { // not an empty palette (at least 2 entries) + if (!pal.isNull() && pal.size()>4) { // not an empty palette (at least 2 entries) if (pal[0].is() && pal[1].is()) { // we have an array of index & hex strings size_t palSize = MIN(pal.size(), 36); @@ -1520,8 +1533,8 @@ void WS2812FX::loadCustomPalettes() uint8_t rgbw[] = {0,0,0,0}; tcp[ j ] = (uint8_t) pal[ i ].as(); // index colorFromHexString(rgbw, pal[i+1].as()); // will catch non-string entires - for (size_t c=0; c<3; c++) tcp[j+c] = rgbw[c]; // only use RGB component - DEBUG_PRINTF("%d(%d) : %d %d %d\n", i, int(tcp[i]), int(tcp[i+1]), int(tcp[i+2]), int(tcp[i+3])); + for (size_t c=0; c<3; c++) tcp[j+1+c] = rgbw[c]; // only use RGB component + DEBUG_PRINTF("%d(%d) : %d %d %d\n", i, int(tcp[j]), int(tcp[j+1]), int(tcp[j+2]), int(tcp[j+3])); } } else { size_t palSize = MIN(pal.size(), 72); diff --git a/wled00/data/index.js b/wled00/data/index.js index 1ba88f95..453c1e33 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -1966,7 +1966,6 @@ function selSegAll(o) function selSegEx(s) { - if (gId('selall')) gId('selall').checked = false; var obj = {"seg":[]}; for (let i=0; i<=lSeg; i++) obj.seg.push({"id":i,"sel":(i==s)}); obj.mainseg = s; @@ -1975,7 +1974,6 @@ function selSegEx(s) function selSeg(s) { - if (gId('selall')) gId('selall').checked = false; var sel = gId(`seg${s}sel`).checked; var obj = {"seg": {"id": s, "sel": sel}}; requestJson(obj); diff --git a/wled00/html_ui.h b/wled00/html_ui.h index b955d321..64882461 100644 --- a/wled00/html_ui.h +++ b/wled00/html_ui.h @@ -7,7 +7,7 @@ */ // Autogenerated from wled00/data/index.htm, do not edit!! -const uint16_t PAGE_index_L = 30521; +const uint16_t PAGE_index_L = 30512; const uint8_t PAGE_index[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xd4, 0xbd, 0x69, 0x7a, 0xe3, 0x3a, 0xb2, 0x28, 0xf8, 0xdf, 0xab, 0x60, 0x32, 0xab, 0x9c, 0x52, 0x89, 0x96, 0xa8, 0xd1, 0x1a, 0x52, @@ -1432,489 +1432,488 @@ const uint8_t PAGE_index[] PROGMEM = { 0x96, 0xb1, 0xc4, 0xb2, 0x6c, 0x49, 0x4e, 0x58, 0x51, 0x14, 0x96, 0xa9, 0xd8, 0x71, 0xb1, 0x58, 0xd1, 0xee, 0x12, 0xcb, 0xdd, 0x12, 0x08, 0xc0, 0x00, 0x78, 0xcb, 0x12, 0x79, 0x81, 0xf3, 0x2e, 0xe7, 0x19, 0x4f, 0x77, 0xcf, 0xad, 0x07, 0x97, 0xbd, 0x48, 0x4e, 0xce, 0xa9, 0x8a, 0x23, 0xee, - 0x60, 0x30, 0xe8, 0x99, 0xe9, 0x99, 0xe9, 0xe9, 0xe9, 0xf9, 0x3e, 0xd0, 0x2d, 0x8c, 0x66, 0xc0, - 0x72, 0xca, 0x93, 0x59, 0x6b, 0x8c, 0x78, 0xd0, 0x5d, 0x3b, 0xfe, 0x69, 0x07, 0x86, 0x5a, 0x84, - 0x80, 0x2c, 0x2b, 0x3f, 0x25, 0x4e, 0x88, 0xb0, 0x4d, 0xdf, 0x36, 0x20, 0xdb, 0xa6, 0xd4, 0x79, - 0x73, 0xed, 0x6e, 0x44, 0x54, 0xfe, 0x1b, 0xe3, 0x7c, 0x74, 0xe4, 0x6e, 0xea, 0xe9, 0x29, 0xad, - 0x05, 0xaa, 0xa6, 0x14, 0xa7, 0x2a, 0xce, 0xa9, 0xf0, 0x6f, 0x11, 0x56, 0x32, 0xef, 0x70, 0xe6, - 0x0a, 0xe1, 0xf7, 0x6d, 0x2f, 0x29, 0x2f, 0x12, 0x8b, 0x30, 0x7e, 0x95, 0xd0, 0x71, 0xd5, 0x79, - 0xd0, 0x24, 0x6c, 0x3c, 0x1a, 0xd2, 0x89, 0xd9, 0xcd, 0xf8, 0x01, 0x3a, 0x50, 0xfc, 0xb9, 0x48, - 0xfa, 0x78, 0x56, 0xaf, 0x87, 0x02, 0xbd, 0x22, 0x3b, 0x79, 0x02, 0xed, 0x83, 0x44, 0x3a, 0x98, - 0x16, 0xb2, 0x07, 0xb0, 0x62, 0xc2, 0xfb, 0x13, 0xb7, 0xb2, 0x6a, 0xb6, 0x23, 0xab, 0x76, 0x72, - 0xc3, 0x1a, 0x09, 0x13, 0x02, 0x9e, 0xb0, 0x5b, 0xbf, 0x78, 0x81, 0x61, 0xeb, 0xe2, 0x8a, 0x11, - 0xbf, 0xca, 0x4c, 0x7c, 0x87, 0xf2, 0x3a, 0xc8, 0xe4, 0x88, 0xee, 0x62, 0xf4, 0x68, 0x63, 0xd5, - 0x93, 0xfe, 0xda, 0x5d, 0xa1, 0x05, 0xff, 0x8e, 0xa2, 0xc9, 0x64, 0xc0, 0x0b, 0x19, 0xbb, 0xde, - 0xbc, 0x55, 0xc5, 0x5a, 0xd0, 0x8e, 0x4c, 0xf0, 0x68, 0x33, 0x1e, 0x54, 0x86, 0x81, 0x72, 0x90, - 0x23, 0xe7, 0xeb, 0xde, 0x2b, 0x8a, 0xac, 0xbc, 0x26, 0x6f, 0x14, 0x8e, 0xf8, 0x13, 0x91, 0x4a, - 0xe7, 0x18, 0x4e, 0x70, 0x48, 0x8f, 0xfa, 0x2c, 0xad, 0xf7, 0xd7, 0x24, 0x46, 0xcc, 0xf4, 0xeb, - 0xe3, 0xa3, 0xa6, 0x17, 0xb8, 0xdd, 0xbd, 0xa8, 0xbb, 0xbe, 0x74, 0xc1, 0x90, 0xfd, 0x24, 0x57, - 0x1b, 0xea, 0x11, 0xdb, 0x8e, 0x0e, 0x86, 0x6c, 0x33, 0x6a, 0x2e, 0x17, 0x30, 0xc0, 0xea, 0xed, - 0x36, 0xc7, 0x8f, 0xb0, 0x39, 0xde, 0x81, 0x81, 0xa7, 0x3f, 0xe1, 0x2e, 0x99, 0x73, 0xe1, 0xe9, - 0x89, 0xfb, 0x1d, 0x1a, 0xec, 0x18, 0xf7, 0xb0, 0x14, 0xdf, 0xa3, 0x73, 0x18, 0x36, 0xe6, 0x7d, - 0xbd, 0x99, 0xf6, 0xea, 0x48, 0xbd, 0x95, 0x77, 0x14, 0x1d, 0xb9, 0x8a, 0xc6, 0x46, 0x64, 0x09, - 0xd7, 0x05, 0x12, 0x15, 0x0b, 0x0c, 0x24, 0x93, 0x5f, 0xc0, 0x7d, 0xf7, 0x23, 0x6d, 0xbc, 0xc3, - 0x30, 0xd4, 0x7e, 0x9f, 0x83, 0xbf, 0x9e, 0xbd, 0x79, 0x07, 0x16, 0x10, 0xcc, 0x5b, 0x59, 0x5a, - 0xe0, 0x65, 0x06, 0x8c, 0x36, 0xa2, 0x3d, 0x38, 0x06, 0x81, 0x10, 0x71, 0x3b, 0x6c, 0x70, 0x41, - 0x62, 0x4e, 0x94, 0x81, 0xbe, 0x91, 0x83, 0x24, 0xbd, 0xef, 0xbb, 0x08, 0xee, 0xa7, 0x70, 0xf5, - 0xf4, 0xde, 0x57, 0x4c, 0xdb, 0xb0, 0x4e, 0x2d, 0xae, 0xc0, 0x2e, 0x10, 0x7f, 0x28, 0xda, 0x1e, - 0xbe, 0x5b, 0x16, 0x23, 0x9c, 0x9d, 0x9a, 0x0f, 0xfc, 0xaf, 0xc7, 0xea, 0xa0, 0x3c, 0xdd, 0x81, - 0xcd, 0x33, 0x05, 0x0f, 0x9b, 0x17, 0xc2, 0xd4, 0xad, 0xfa, 0xd2, 0xe7, 0x63, 0xc0, 0x31, 0x23, - 0x06, 0x8b, 0x7f, 0xf4, 0x9c, 0x22, 0x72, 0xd0, 0xaf, 0xe0, 0x95, 0xda, 0x90, 0x40, 0xa2, 0x0c, - 0xb5, 0xd3, 0x84, 0x41, 0x1e, 0x15, 0x19, 0xc5, 0xf1, 0x85, 0x66, 0xfb, 0x89, 0xe8, 0x61, 0xea, - 0xc5, 0x2a, 0x39, 0xb9, 0x2f, 0x68, 0xf7, 0xdf, 0x87, 0xde, 0xdb, 0x5d, 0x3a, 0x77, 0x4e, 0x80, - 0x20, 0x74, 0xd5, 0xae, 0x1b, 0x88, 0x08, 0xae, 0x42, 0x07, 0x67, 0xc5, 0x1e, 0x32, 0x9f, 0x45, - 0x48, 0x9b, 0x8e, 0x54, 0x2c, 0x18, 0x0b, 0xb9, 0x8f, 0x61, 0x6d, 0xd0, 0x90, 0x48, 0xaf, 0xb5, - 0x10, 0xce, 0x30, 0xea, 0x8e, 0x61, 0x0f, 0x1d, 0x8f, 0xe8, 0x45, 0xf8, 0xdb, 0xfb, 0x1f, 0xf7, - 0x5f, 0x3a, 0x95, 0x37, 0x49, 0xaf, 0x1e, 0x83, 0x92, 0x87, 0x76, 0x6d, 0xe1, 0xae, 0xda, 0x10, - 0xd1, 0xb9, 0x14, 0xee, 0xb4, 0x4d, 0x9c, 0x5b, 0xa8, 0x61, 0x5b, 0xfa, 0xb7, 0xae, 0x41, 0xf5, - 0xa5, 0x4f, 0xb6, 0xd4, 0x3e, 0x9b, 0x25, 0xc5, 0x2c, 0x62, 0xb3, 0x9a, 0xb0, 0x12, 0x72, 0x5e, - 0x91, 0xa3, 0x07, 0x17, 0x0d, 0xc1, 0x8b, 0xad, 0x1a, 0x9f, 0xae, 0x0a, 0x4d, 0x61, 0xf2, 0x21, - 0xa0, 0x00, 0xd7, 0x36, 0x1a, 0xd8, 0x13, 0x61, 0x25, 0x28, 0xc3, 0xa5, 0xc6, 0x31, 0x77, 0xb5, - 0xb8, 0x73, 0x1a, 0x31, 0xf0, 0x9c, 0x08, 0x0e, 0x19, 0x6a, 0x0e, 0xa0, 0xf5, 0xe4, 0x3c, 0xbb, - 0x26, 0x44, 0x1f, 0x96, 0x93, 0xfd, 0xc8, 0x73, 0xfe, 0xd5, 0x13, 0x26, 0x2d, 0x6e, 0x87, 0xf6, - 0x9c, 0xde, 0xbf, 0x9c, 0xcf, 0x89, 0xd8, 0xa7, 0x32, 0x79, 0xc8, 0x7e, 0x65, 0xb9, 0x02, 0x3b, - 0xdc, 0x7f, 0x95, 0x71, 0x98, 0x35, 0xdc, 0x7e, 0x12, 0x50, 0x96, 0xee, 0x8b, 0x88, 0x36, 0x15, - 0x40, 0xb1, 0x68, 0x04, 0xb4, 0x90, 0x83, 0x49, 0x28, 0x67, 0x3e, 0xef, 0xac, 0x98, 0x15, 0x9e, - 0x9e, 0x94, 0x0b, 0x19, 0x69, 0xc3, 0x0e, 0x5f, 0xa0, 0x4b, 0x91, 0xb9, 0xf4, 0x24, 0xae, 0x2c, - 0xdb, 0x37, 0xa2, 0x00, 0x30, 0xa3, 0x16, 0x19, 0x2c, 0x5b, 0x91, 0x23, 0x81, 0xbf, 0x57, 0xc5, - 0x0d, 0xd6, 0xc3, 0xcf, 0x28, 0xc6, 0x42, 0x9f, 0xda, 0x2d, 0xd3, 0x24, 0x20, 0xaf, 0x1f, 0x62, - 0x39, 0x27, 0x15, 0x79, 0x00, 0xf9, 0x30, 0x36, 0xae, 0x23, 0x3a, 0x3f, 0xb0, 0x7e, 0x16, 0xd1, - 0xb5, 0xf0, 0x7a, 0x88, 0xd3, 0x05, 0xe4, 0xd8, 0x20, 0xef, 0x13, 0x82, 0x93, 0x0b, 0x37, 0x94, - 0x2f, 0x2e, 0x31, 0xd5, 0xdf, 0xf2, 0x66, 0xf9, 0x3f, 0x83, 0x9d, 0x01, 0x91, 0xa3, 0xb1, 0xa5, - 0xa1, 0x11, 0x29, 0xf7, 0x2e, 0xb6, 0x68, 0x98, 0xfa, 0xe8, 0x77, 0xdc, 0x81, 0xff, 0x73, 0x4f, - 0x3e, 0x60, 0xbb, 0xc3, 0x74, 0x28, 0x6e, 0xed, 0xf6, 0x7e, 0x45, 0xb2, 0x0a, 0x41, 0xcb, 0x44, - 0x64, 0x11, 0xb4, 0x81, 0xfe, 0x62, 0x49, 0xce, 0xc8, 0x91, 0xcf, 0x20, 0x2b, 0x2b, 0x4a, 0x45, - 0x9c, 0x55, 0x48, 0xc4, 0xa3, 0x1f, 0x98, 0x41, 0x66, 0xa0, 0xad, 0xf2, 0xc1, 0xeb, 0xdb, 0xbc, - 0xc2, 0x1b, 0xd7, 0x14, 0xa2, 0xf8, 0x21, 0x70, 0xc4, 0x57, 0xae, 0xc4, 0xed, 0x60, 0x84, 0x71, - 0xc4, 0x90, 0x56, 0xeb, 0xae, 0x5c, 0x12, 0x07, 0xd8, 0x84, 0x20, 0x54, 0x55, 0x35, 0xe4, 0xc7, - 0xb0, 0x13, 0xbb, 0x06, 0xda, 0xfb, 0xb9, 0xa3, 0xfe, 0x72, 0x61, 0x6f, 0x43, 0xc1, 0xb3, 0x24, - 0x3e, 0x31, 0xee, 0x21, 0x61, 0x45, 0x12, 0x95, 0xf7, 0x69, 0xfe, 0x51, 0x54, 0x07, 0x16, 0x81, - 0x1e, 0xe6, 0x47, 0x57, 0x06, 0x51, 0x60, 0x80, 0x69, 0x81, 0xb4, 0x39, 0xef, 0xf1, 0x6f, 0x51, - 0x6d, 0x22, 0xc5, 0x58, 0x5f, 0x4e, 0x2f, 0x4e, 0x93, 0x6b, 0xc8, 0x84, 0xa5, 0x1d, 0x38, 0xea, - 0x8a, 0xcd, 0x12, 0x3d, 0xb1, 0xc1, 0x12, 0x27, 0xe3, 0x40, 0xc9, 0x55, 0x55, 0x43, 0x86, 0xa2, - 0x4b, 0x9d, 0x4c, 0xfe, 0xda, 0x1c, 0x31, 0x75, 0xb5, 0xf0, 0x6b, 0x3a, 0x10, 0x41, 0x7c, 0xef, - 0x16, 0x11, 0x2c, 0x61, 0x4b, 0x35, 0xf0, 0xe8, 0x56, 0xa6, 0x78, 0x4a, 0x63, 0x0f, 0x87, 0x24, - 0xf9, 0xe6, 0xad, 0x47, 0xc6, 0x5b, 0xff, 0xf6, 0x0e, 0x55, 0xf3, 0xed, 0x9d, 0xba, 0x0d, 0x14, - 0xcb, 0x22, 0x1d, 0x1d, 0x4b, 0x88, 0xcb, 0xa8, 0x49, 0x3f, 0x7c, 0xed, 0xd0, 0x5b, 0xee, 0x92, - 0xb3, 0x68, 0xfe, 0xf0, 0x48, 0xa1, 0x0d, 0x2c, 0x93, 0x6b, 0x9b, 0x83, 0x33, 0x74, 0x8d, 0xd0, - 0xf5, 0x60, 0x96, 0xa7, 0x87, 0xf4, 0xa3, 0xce, 0x78, 0x02, 0x03, 0x3c, 0x98, 0xc4, 0xe3, 0x84, - 0xa2, 0xf4, 0x45, 0xd6, 0xd1, 0xae, 0xb0, 0xf7, 0x6f, 0xac, 0x22, 0xeb, 0xc7, 0x88, 0x28, 0xc8, - 0x46, 0xa7, 0x85, 0x95, 0x20, 0x00, 0xad, 0xd9, 0x90, 0xe2, 0xf5, 0x66, 0x34, 0x4b, 0xb9, 0xca, - 0x28, 0x41, 0xae, 0x23, 0x55, 0x1a, 0x88, 0x4f, 0x65, 0x94, 0x81, 0x55, 0x0b, 0x2b, 0x34, 0xaa, - 0x1e, 0x6f, 0x85, 0x9f, 0x64, 0x41, 0x51, 0xd4, 0xf8, 0x38, 0x8b, 0xad, 0x9b, 0xc9, 0xe8, 0x39, - 0xad, 0xe7, 0xb0, 0x98, 0xc7, 0xb0, 0x9a, 0x13, 0xb4, 0x2c, 0x2c, 0xe7, 0x92, 0xb4, 0xb0, 0xae, - 0x1b, 0xa2, 0xf7, 0x97, 0xba, 0xf7, 0x9b, 0x1d, 0x6f, 0x69, 0x84, 0x51, 0x25, 0xc4, 0x58, 0xc6, - 0x97, 0x51, 0x2f, 0x4e, 0xc5, 0xca, 0x66, 0xf1, 0x2f, 0x4a, 0x92, 0x5d, 0x78, 0xd2, 0xda, 0x23, - 0xf8, 0xca, 0x46, 0x7d, 0xc2, 0x5b, 0xe9, 0xb4, 0xd6, 0x48, 0xa2, 0x10, 0xd3, 0x4c, 0x8d, 0x99, - 0x4b, 0xc6, 0xa2, 0x2b, 0xad, 0xaf, 0x29, 0xfc, 0xca, 0xba, 0xd1, 0xbb, 0x58, 0x39, 0xfa, 0xc3, - 0x15, 0x74, 0x98, 0xaa, 0x5d, 0x04, 0x3a, 0x37, 0xc5, 0xae, 0xb7, 0x55, 0x8e, 0xb2, 0x6d, 0x5d, - 0xbb, 0x77, 0xb2, 0x3c, 0x5e, 0x43, 0x59, 0x52, 0x5b, 0x15, 0x71, 0xc5, 0xc2, 0xfb, 0xf1, 0x6a, - 0x0d, 0xf1, 0xbd, 0xd2, 0xba, 0x9d, 0x4e, 0xc1, 0xae, 0x6a, 0x6b, 0xd9, 0x1a, 0x2d, 0x5c, 0xee, - 0x0f, 0x4c, 0xbc, 0xb0, 0x37, 0xf0, 0xdd, 0xbd, 0x4d, 0xee, 0x68, 0xe3, 0x5b, 0x05, 0x7f, 0x2b, - 0xf0, 0xdd, 0x61, 0xc1, 0x2f, 0x61, 0x13, 0x51, 0x0e, 0xbf, 0x60, 0x8d, 0x8d, 0x34, 0xcd, 0xd3, - 0x38, 0x86, 0x92, 0xd2, 0x9f, 0xb1, 0x89, 0x97, 0x93, 0x68, 0x3e, 0xbe, 0x5b, 0xa4, 0x79, 0xa0, - 0xc9, 0x14, 0x69, 0x80, 0xc1, 0x4f, 0x22, 0x99, 0xac, 0x54, 0x44, 0xc8, 0x06, 0x58, 0x40, 0x51, - 0x40, 0xe4, 0x76, 0xed, 0x70, 0x6b, 0x1a, 0x4b, 0x6d, 0xd4, 0x8a, 0x70, 0xb5, 0x06, 0xd2, 0xaa, - 0x89, 0x66, 0x55, 0x6e, 0x81, 0x66, 0x55, 0x03, 0xb0, 0x7a, 0x07, 0xc6, 0x68, 0x21, 0xe1, 0xc3, - 0xe8, 0x52, 0x52, 0x1b, 0x86, 0x95, 0x41, 0xaf, 0x32, 0xd0, 0x2a, 0x04, 0x42, 0x44, 0x00, 0xd6, - 0xa1, 0x73, 0xf4, 0xf2, 0x4b, 0x67, 0x43, 0x2c, 0xab, 0x8e, 0xd7, 0xfe, 0x0d, 0xc0, 0x56, 0xcf, - 0x0c, 0x08, 0x0c, 0x13, 0x79, 0x33, 0xb8, 0x95, 0x72, 0x2d, 0x76, 0x95, 0xd0, 0x80, 0xfd, 0x81, - 0xd6, 0x01, 0x1b, 0xbb, 0x2a, 0xea, 0xc2, 0x5e, 0x29, 0xbb, 0xb1, 0x57, 0x4a, 0x1b, 0x7b, 0x65, - 0x1b, 0x69, 0xd7, 0x81, 0x57, 0x25, 0x5c, 0xb6, 0xe4, 0xf7, 0x92, 0x6d, 0x1b, 0x60, 0x98, 0xb2, - 0x15, 0x3d, 0x7c, 0x52, 0xce, 0x1b, 0xc8, 0x30, 0xe5, 0x5a, 0x64, 0x18, 0xd6, 0xb7, 0xbf, 0x27, - 0xa0, 0xd4, 0xd6, 0x38, 0x52, 0xe5, 0xa7, 0xe0, 0x48, 0xf9, 0x1d, 0xb0, 0x4b, 0xe5, 0x0a, 0xd8, - 0xa5, 0xf2, 0x13, 0x30, 0xa4, 0xca, 0x0d, 0x30, 0xa4, 0x6e, 0xe6, 0x16, 0x56, 0x94, 0xf8, 0xf9, - 0x59, 0xd2, 0x11, 0x42, 0xbd, 0x86, 0x78, 0xea, 0x02, 0xee, 0xb1, 0x74, 0x97, 0x50, 0x7b, 0xbe, - 0x58, 0xea, 0x71, 0x14, 0x55, 0x74, 0x41, 0x80, 0xa1, 0x57, 0xb2, 0x57, 0xa7, 0x4e, 0x97, 0xda, - 0x65, 0x16, 0xbc, 0xbd, 0xe6, 0x55, 0x76, 0x46, 0xaf, 0x30, 0x78, 0x25, 0x66, 0x5a, 0x54, 0xc3, - 0x5f, 0x51, 0xe0, 0x98, 0xb5, 0xb5, 0x81, 0x87, 0xf0, 0x33, 0x77, 0x95, 0x2a, 0x38, 0xa2, 0xc8, - 0x89, 0xce, 0x77, 0x1a, 0xf3, 0xbe, 0x12, 0xb3, 0x20, 0x26, 0x40, 0x9a, 0x9e, 0xc5, 0x55, 0x55, - 0xb9, 0x57, 0x95, 0x8c, 0x00, 0x78, 0x6b, 0xe9, 0xb6, 0x08, 0x0e, 0x9f, 0x67, 0x0f, 0x9a, 0xcc, - 0xcf, 0xc7, 0x81, 0xd3, 0x0d, 0xaf, 0xb9, 0x12, 0x31, 0x88, 0x30, 0x53, 0x1a, 0xb0, 0x9a, 0xe8, - 0x50, 0x14, 0xc0, 0xd6, 0x9b, 0x42, 0xf7, 0xb6, 0xc2, 0x53, 0x52, 0x4d, 0x1c, 0x46, 0x57, 0xa8, - 0x57, 0x7f, 0xa4, 0x1a, 0x5c, 0x8d, 0x8d, 0x33, 0x78, 0x39, 0xa6, 0xd1, 0xfd, 0xfd, 0xd5, 0x95, - 0x5a, 0x7f, 0x44, 0x47, 0x34, 0xee, 0x9d, 0x62, 0xa1, 0x67, 0x20, 0x75, 0xac, 0xe3, 0x55, 0xd4, - 0x25, 0xcd, 0x61, 0x1b, 0xa3, 0x51, 0xd2, 0x41, 0x66, 0xc4, 0xf9, 0x8a, 0x7a, 0x89, 0xba, 0x53, - 0x42, 0xac, 0x43, 0xc9, 0x89, 0xf8, 0x27, 0x30, 0x9c, 0xa0, 0x78, 0x21, 0x9c, 0x8e, 0xf5, 0x62, - 0x1e, 0xff, 0x55, 0xfb, 0x79, 0x80, 0x48, 0x25, 0xfd, 0xa2, 0x0d, 0xa7, 0x04, 0xdf, 0xa7, 0x8b, - 0xc7, 0xf8, 0x07, 0x9d, 0x4a, 0xd8, 0xb8, 0xad, 0x78, 0xa5, 0xda, 0x60, 0x94, 0x98, 0x83, 0x5d, - 0xae, 0x6a, 0x33, 0x10, 0x66, 0x7e, 0x16, 0xbf, 0xb1, 0xa9, 0x57, 0x1d, 0x58, 0xe0, 0xd5, 0xd1, - 0x4c, 0x69, 0xf8, 0xb6, 0x0a, 0xd8, 0xa9, 0xb0, 0x3e, 0x9a, 0x2d, 0xf2, 0x02, 0x66, 0x08, 0x67, - 0xa4, 0x08, 0x89, 0x7a, 0xb2, 0x39, 0x44, 0xf3, 0xee, 0x52, 0xd4, 0x4b, 0x72, 0x9c, 0xc5, 0x9a, - 0x93, 0x54, 0x85, 0x1f, 0x0e, 0x93, 0xbd, 0x3d, 0x17, 0xea, 0x24, 0x9a, 0x1d, 0xc6, 0x78, 0xfe, - 0x08, 0x0d, 0x8f, 0x6c, 0x50, 0x7b, 0xf6, 0x27, 0xe6, 0xf9, 0x3f, 0x95, 0x27, 0x65, 0xd7, 0x2b, - 0xf9, 0xdd, 0x4b, 0x19, 0xc7, 0x52, 0x76, 0x5e, 0x2d, 0xa4, 0xf1, 0x1a, 0xef, 0x23, 0x46, 0x94, - 0x3b, 0x8c, 0xf5, 0x81, 0x2e, 0x5e, 0xb0, 0xa1, 0xf3, 0x81, 0x36, 0xd0, 0x1e, 0xee, 0xe3, 0x24, - 0x88, 0xfb, 0x3e, 0x91, 0x08, 0xb9, 0x2b, 0xe8, 0x01, 0xa8, 0x78, 0x0e, 0xd4, 0xdf, 0x1b, 0xbb, - 0x89, 0x8e, 0xeb, 0x80, 0xbe, 0x42, 0x32, 0x2d, 0x03, 0xbe, 0xcf, 0x1e, 0xb8, 0x23, 0xbc, 0x36, - 0x25, 0x7a, 0xd3, 0x7a, 0x10, 0xf0, 0x16, 0xbb, 0x30, 0x8f, 0xc8, 0x47, 0x7e, 0xc9, 0xa1, 0xfc, - 0x85, 0x17, 0x95, 0xfb, 0x58, 0x60, 0x38, 0x9f, 0xc5, 0x22, 0x86, 0xd2, 0x6a, 0x77, 0x3c, 0x8a, - 0x9e, 0x46, 0xfd, 0x72, 0x6f, 0xe0, 0xf9, 0x1e, 0xde, 0x02, 0xd5, 0x0f, 0xaf, 0x6e, 0x73, 0xfb, - 0xa9, 0xf5, 0xe8, 0xa2, 0xbc, 0xe4, 0x99, 0x8d, 0x97, 0xb6, 0xeb, 0x1d, 0x93, 0x83, 0x5e, 0xb5, - 0x34, 0x8c, 0x85, 0xc3, 0x46, 0x71, 0xab, 0x98, 0xe6, 0xd8, 0xbd, 0xdf, 0x2a, 0xbe, 0x37, 0xe8, - 0x12, 0xdd, 0x7e, 0xd2, 0x22, 0x27, 0x66, 0xb0, 0xa4, 0xe1, 0xb0, 0x39, 0x71, 0x74, 0x56, 0x08, - 0x40, 0x00, 0x5b, 0x20, 0x84, 0xc1, 0xd1, 0xed, 0x5d, 0x34, 0x2e, 0x54, 0xc2, 0x7b, 0xaf, 0x6f, - 0x73, 0xf5, 0x62, 0xd1, 0xf0, 0x86, 0xf7, 0xeb, 0x6d, 0xc9, 0xfd, 0xeb, 0x03, 0xff, 0xeb, 0x42, - 0xf7, 0x20, 0x2f, 0xf2, 0xfd, 0x66, 0x25, 0x5a, 0x2d, 0xbd, 0x49, 0xc1, 0x3f, 0x31, 0x4a, 0x6d, - 0x55, 0xca, 0x10, 0xe3, 0x9a, 0xc4, 0x85, 0xaa, 0x18, 0x2d, 0xca, 0xbc, 0xbc, 0x66, 0x30, 0x59, - 0x1e, 0x7f, 0x92, 0x59, 0x8f, 0x4e, 0xfa, 0x78, 0x04, 0x83, 0x28, 0x6a, 0xb0, 0xff, 0xd2, 0x1c, - 0xbf, 0x18, 0x4c, 0xc7, 0xde, 0x49, 0x07, 0x1f, 0x3a, 0xe0, 0xb1, 0x02, 0xf3, 0xba, 0xbd, 0xd3, - 0x52, 0x1f, 0x33, 0x17, 0xee, 0xa8, 0xd4, 0xd6, 0x5c, 0x30, 0xf8, 0xde, 0x24, 0x57, 0x26, 0xe7, - 0x9a, 0x2f, 0x0b, 0x47, 0x46, 0x2d, 0x7a, 0xf6, 0xcc, 0xbe, 0x93, 0x2f, 0x67, 0x3c, 0x64, 0xab, - 0x88, 0x4c, 0x6b, 0xa3, 0x1f, 0x31, 0x2b, 0x02, 0x0c, 0xee, 0x82, 0x7e, 0x84, 0x7f, 0x7d, 0xc4, - 0x76, 0xd1, 0xed, 0x1f, 0x5c, 0x94, 0xf9, 0xa5, 0x27, 0xaa, 0x13, 0xf8, 0x5e, 0x1e, 0xa0, 0x27, - 0x32, 0xb9, 0x0a, 0x7c, 0xbd, 0x99, 0x33, 0xbd, 0x26, 0x72, 0x9d, 0xd4, 0x13, 0x60, 0x01, 0x2e, - 0x18, 0x64, 0x3d, 0x68, 0x81, 0xb0, 0xef, 0xe5, 0xca, 0xcd, 0x78, 0x76, 0x07, 0x3e, 0xd2, 0xec, - 0xca, 0x49, 0x71, 0x25, 0x14, 0xff, 0xf9, 0xfc, 0x76, 0x36, 0x8b, 0x23, 0x82, 0x52, 0xee, 0x5c, - 0xbe, 0x4d, 0xb7, 0xf3, 0x25, 0x1c, 0x95, 0x45, 0x30, 0xce, 0x21, 0xd3, 0xb5, 0x91, 0xf5, 0xe9, - 0x29, 0xc1, 0xf8, 0xf3, 0x3a, 0x8a, 0xdf, 0x5a, 0x0c, 0x3f, 0x83, 0xfc, 0xb0, 0x86, 0xe0, 0x80, - 0x60, 0xf9, 0x70, 0xa2, 0x9b, 0x2d, 0x92, 0x45, 0x19, 0xc5, 0x8f, 0x1b, 0x49, 0x9f, 0xad, 0x12, - 0x3f, 0x41, 0x0f, 0x2c, 0x88, 0xaa, 0x84, 0xde, 0x5a, 0x62, 0xd3, 0x29, 0x42, 0xb3, 0x74, 0xaf, - 0x28, 0xf8, 0x19, 0xf9, 0x0d, 0x3b, 0xaa, 0xdd, 0x51, 0xaf, 0x1a, 0xab, 0x52, 0x56, 0xaf, 0xd5, - 0xb4, 0xae, 0x5b, 0xd1, 0xbc, 0x76, 0xcc, 0x5e, 0x66, 0x35, 0x43, 0xfb, 0x7a, 0x70, 0xf8, 0x2d, - 0xd9, 0xdb, 0xbe, 0xb4, 0x0a, 0x84, 0x24, 0x49, 0x30, 0xa8, 0x46, 0x3d, 0x3c, 0xcf, 0xd3, 0x16, - 0x6e, 0x0d, 0x0e, 0xdf, 0x19, 0xc1, 0xc0, 0x91, 0x11, 0x69, 0x81, 0xc0, 0xcc, 0xdf, 0x10, 0x30, - 0x3f, 0x8e, 0xb8, 0x6c, 0x62, 0x04, 0x76, 0x34, 0x3d, 0xdd, 0xbc, 0x00, 0xb9, 0x42, 0xae, 0x42, - 0x78, 0xe9, 0xd1, 0xfa, 0x05, 0xa3, 0x04, 0xbf, 0x5e, 0x47, 0xd6, 0x1f, 0xbd, 0x83, 0x56, 0x64, - 0xa0, 0xf3, 0x75, 0xc0, 0xfb, 0x17, 0x2f, 0xb0, 0x3d, 0x8b, 0x32, 0xcd, 0x55, 0x64, 0x1d, 0xcb, - 0xfc, 0xc5, 0xd2, 0x18, 0x74, 0x2b, 0x3f, 0x4d, 0x67, 0x14, 0xd8, 0xd9, 0x16, 0x74, 0x9b, 0x6d, - 0xb5, 0x37, 0xba, 0x71, 0x83, 0xcd, 0x41, 0x09, 0x92, 0xc1, 0x02, 0x87, 0x0d, 0xe1, 0xf5, 0x94, - 0x15, 0xbc, 0x11, 0x53, 0xe3, 0x7b, 0x78, 0xb3, 0xb6, 0x8f, 0xf8, 0x50, 0x29, 0x5c, 0xa0, 0x62, - 0x0d, 0xf9, 0x46, 0x5d, 0xb1, 0x2d, 0x74, 0x96, 0x53, 0x01, 0xd5, 0xd5, 0x9b, 0x10, 0x58, 0x4e, - 0x12, 0x15, 0x05, 0x6d, 0x50, 0x34, 0x84, 0xfd, 0x8a, 0x51, 0x86, 0xf5, 0x58, 0x4c, 0x68, 0x90, - 0xc9, 0x51, 0xf4, 0x7b, 0x8e, 0xfa, 0x95, 0x52, 0x9f, 0x63, 0xe8, 0xa4, 0x72, 0x1e, 0x4d, 0xf0, - 0x74, 0x72, 0x3b, 0xb1, 0x8b, 0xff, 0x1b, 0xb1, 0x5f, 0x89, 0xef, 0x29, 0xc9, 0xf1, 0xc8, 0x44, - 0xcc, 0x65, 0x5b, 0x08, 0x0e, 0x9f, 0x71, 0xb6, 0x12, 0xf8, 0x43, 0x0d, 0xe9, 0x4a, 0x9f, 0x7b, - 0x49, 0xac, 0x46, 0xeb, 0x37, 0x83, 0x6c, 0x2c, 0x6a, 0x94, 0x0d, 0xc8, 0xac, 0x01, 0x15, 0xb4, - 0x21, 0x1c, 0xb7, 0xe1, 0xd3, 0xa0, 0x0a, 0xc4, 0x37, 0x59, 0x13, 0xa8, 0xb1, 0x05, 0x9f, 0xf1, - 0x43, 0x1d, 0x9f, 0xd1, 0x12, 0x93, 0x62, 0x51, 0x8a, 0x0e, 0x98, 0x46, 0xf8, 0x0c, 0x06, 0xf4, - 0x64, 0x6a, 0x4c, 0x0b, 0x98, 0x44, 0x89, 0xd5, 0x54, 0xdb, 0x0b, 0x6d, 0x85, 0xe7, 0x58, 0x34, - 0xf1, 0x1c, 0x25, 0xaa, 0xa3, 0x02, 0xa4, 0xda, 0x8c, 0x0d, 0x40, 0xf0, 0x83, 0xe0, 0xce, 0x0c, - 0xb1, 0x30, 0x0c, 0xf0, 0x39, 0x35, 0x50, 0xf9, 0xb0, 0x0d, 0x3f, 0x00, 0xd4, 0xf4, 0x44, 0xf1, - 0xb7, 0x6e, 0x44, 0x12, 0x50, 0x9b, 0xb5, 0x0c, 0xe7, 0x71, 0x8f, 0xb4, 0x25, 0x58, 0xe1, 0xfd, - 0x2d, 0x2c, 0x42, 0x03, 0x23, 0x0f, 0x13, 0xe7, 0xb7, 0x58, 0x71, 0xc9, 0xb2, 0x1a, 0xfd, 0x16, - 0xb7, 0x55, 0xe8, 0xd9, 0xa8, 0x6d, 0x22, 0x9d, 0x3b, 0xa3, 0x7e, 0x1c, 0xe1, 0xe8, 0x8e, 0xe8, - 0x4c, 0x19, 0x94, 0x00, 0x0f, 0x08, 0x99, 0x98, 0x62, 0x12, 0x74, 0xad, 0x97, 0xa1, 0xdb, 0x29, - 0x0e, 0x09, 0x9b, 0x94, 0x16, 0xe1, 0x5d, 0xb5, 0x08, 0xe3, 0xaa, 0xbb, 0xab, 0x2c, 0x92, 0x4f, - 0x1f, 0xb8, 0xf0, 0x81, 0x13, 0xe7, 0x1c, 0x7a, 0xab, 0x97, 0xe9, 0x5d, 0x2d, 0x18, 0xe0, 0x69, - 0xee, 0x04, 0xd8, 0x03, 0xce, 0x5f, 0xef, 0x90, 0x14, 0x0c, 0x4c, 0x93, 0xde, 0xfd, 0xa2, 0x9c, - 0xf7, 0xe8, 0x8c, 0x1e, 0xbe, 0xfa, 0x37, 0x98, 0xa0, 0xe5, 0x2d, 0x12, 0x99, 0x56, 0x6d, 0x35, - 0xda, 0xa7, 0x45, 0xcd, 0x84, 0x81, 0x9f, 0xaf, 0x0a, 0x63, 0xc4, 0x60, 0x95, 0x9f, 0x9e, 0xca, - 0xcf, 0x33, 0xbd, 0x5a, 0x7a, 0x21, 0x4b, 0x0f, 0x39, 0x9b, 0xf1, 0xa1, 0x33, 0xfa, 0xfe, 0xec, - 0xb4, 0x07, 0xfd, 0x77, 0x33, 0x4e, 0xae, 0x04, 0x13, 0x25, 0x28, 0xc6, 0x38, 0x8f, 0xc6, 0xea, - 0x8d, 0x71, 0xb6, 0x68, 0xd0, 0x5d, 0xd0, 0xcb, 0xf0, 0x80, 0x3c, 0x74, 0x32, 0xff, 0xa8, 0xfd, - 0x73, 0x03, 0xfe, 0xb9, 0x01, 0x3a, 0xe5, 0x8a, 0xaa, 0x75, 0x9d, 0xed, 0xdd, 0x7c, 0x03, 0x26, - 0x2c, 0xea, 0x47, 0x99, 0xf6, 0x4e, 0x5f, 0x77, 0x59, 0x4d, 0x66, 0x7d, 0xba, 0xaa, 0x9b, 0x50, - 0xda, 0x68, 0xa2, 0x66, 0x81, 0x1e, 0xba, 0xe2, 0xa6, 0xd3, 0xe1, 0x0b, 0x9f, 0x4c, 0xa7, 0x81, - 0x36, 0x9d, 0xb0, 0x7f, 0xa3, 0x00, 0x76, 0xfa, 0x6f, 0xd9, 0x61, 0xd2, 0x59, 0xdf, 0xad, 0x46, - 0x1d, 0x86, 0x00, 0x36, 0xff, 0x7a, 0x5b, 0x00, 0x83, 0xff, 0xcf, 0x84, 0x29, 0xa0, 0x7c, 0xdc, - 0x2b, 0xbd, 0x56, 0xca, 0x27, 0x8d, 0x75, 0xe7, 0xa8, 0xce, 0x42, 0xc0, 0xdd, 0xee, 0x2f, 0x52, - 0x53, 0xec, 0xee, 0x45, 0x7b, 0xbb, 0x57, 0x51, 0x6c, 0xc3, 0x49, 0x9f, 0xf5, 0x29, 0x7d, 0x63, - 0x34, 0x69, 0x01, 0x49, 0xbd, 0x1b, 0xec, 0x6e, 0xea, 0x08, 0x3d, 0xb3, 0x3d, 0xa1, 0xbb, 0x15, - 0x93, 0xbc, 0x55, 0x11, 0xee, 0xc7, 0xb9, 0xaa, 0x92, 0x33, 0xc9, 0x04, 0x07, 0xd0, 0x94, 0x75, - 0x27, 0x3e, 0x37, 0x40, 0xeb, 0xaa, 0xee, 0xf6, 0xfc, 0x01, 0x5a, 0x81, 0xd5, 0x72, 0xe4, 0xd4, - 0x8c, 0x65, 0xd4, 0x7d, 0x7a, 0x42, 0x2c, 0x19, 0x45, 0x2d, 0x5c, 0x5b, 0xc2, 0x8f, 0x3a, 0x6c, - 0x8b, 0x25, 0x84, 0x91, 0xfb, 0x38, 0x49, 0x4b, 0xc1, 0xd5, 0x6a, 0x47, 0x20, 0x0a, 0xf4, 0x14, - 0x2f, 0xea, 0xf2, 0xbf, 0x4a, 0x2a, 0x6a, 0x73, 0xea, 0x26, 0x6d, 0xd0, 0xbe, 0xef, 0x2a, 0xde, - 0x6f, 0x0e, 0xe4, 0x93, 0xf9, 0x38, 0xfb, 0xbb, 0xb0, 0xfd, 0x9e, 0xa5, 0xd3, 0x5b, 0x3c, 0x59, - 0x2d, 0xd5, 0x15, 0x37, 0x82, 0x24, 0x85, 0xed, 0xcf, 0x15, 0x06, 0xd4, 0x44, 0x74, 0xcb, 0x8b, - 0xdd, 0xda, 0x26, 0x8c, 0x32, 0xc8, 0x2c, 0x92, 0x28, 0x16, 0x6c, 0xe3, 0x13, 0xc6, 0x69, 0x94, - 0x50, 0xac, 0x89, 0x3c, 0xc6, 0xcd, 0x8a, 0x1f, 0x45, 0xfc, 0x57, 0x7b, 0x43, 0xc0, 0x66, 0xb3, - 0xb1, 0x59, 0xd6, 0xbe, 0xba, 0xb2, 0x15, 0x2c, 0x11, 0x26, 0x7d, 0x7c, 0xde, 0x38, 0x72, 0x64, - 0x6e, 0x3c, 0x7c, 0xa2, 0x3d, 0xf6, 0xc7, 0x9a, 0x4b, 0x41, 0x9f, 0xd7, 0xbd, 0xf4, 0xbf, 0x74, - 0x18, 0xb5, 0xed, 0x36, 0x5c, 0x5e, 0xb5, 0x2d, 0x20, 0xba, 0x74, 0xf4, 0xa8, 0xf3, 0x24, 0xc7, - 0xa2, 0xde, 0x93, 0x38, 0x5f, 0xd4, 0x1d, 0x3d, 0x1a, 0xd2, 0x11, 0xdd, 0x6c, 0x0a, 0x07, 0x5a, - 0x1e, 0x00, 0xb5, 0x6d, 0x27, 0xe8, 0x25, 0xb7, 0xea, 0xe6, 0xc3, 0x52, 0x1c, 0x03, 0xc8, 0xd5, - 0xbb, 0x76, 0xf3, 0x10, 0xef, 0x83, 0x9a, 0xb1, 0x51, 0x25, 0x1c, 0x79, 0x9b, 0xcf, 0x1a, 0xca, - 0xd7, 0xdd, 0x38, 0xc9, 0x52, 0xe7, 0x58, 0xbc, 0xad, 0x8d, 0x38, 0xaf, 0x6f, 0x73, 0x0a, 0x5e, - 0xec, 0x90, 0xf6, 0xbd, 0xf6, 0x71, 0x74, 0x64, 0xf8, 0x03, 0x08, 0xb7, 0x37, 0xa8, 0x36, 0xfa, - 0x98, 0xea, 0xe2, 0xe7, 0xd0, 0xc5, 0x2b, 0xcf, 0x97, 0xec, 0x69, 0xdc, 0x32, 0x73, 0x94, 0xbc, - 0x62, 0x0e, 0xff, 0xe6, 0xc5, 0x8b, 0xa3, 0x03, 0x31, 0x8d, 0xfb, 0x07, 0x87, 0xb0, 0xf0, 0x46, - 0x19, 0xfc, 0x31, 0xe0, 0xdb, 0x65, 0x72, 0xd0, 0x35, 0xd4, 0x40, 0x9b, 0x31, 0x75, 0x07, 0xdd, - 0xb3, 0x01, 0x52, 0xc6, 0x17, 0xed, 0xb5, 0xfd, 0x3d, 0x2a, 0x60, 0x5a, 0x54, 0x55, 0x41, 0x57, - 0xc0, 0x6f, 0xaf, 0xc0, 0xfb, 0xcd, 0xe4, 0xb7, 0xdc, 0x81, 0x2b, 0xab, 0xb1, 0x42, 0x07, 0x9b, - 0x0b, 0xc7, 0x36, 0x3a, 0xd8, 0xe0, 0x22, 0x50, 0x96, 0x73, 0x4d, 0x39, 0xf4, 0x91, 0x5d, 0xc7, - 0x39, 0x8c, 0x9c, 0xb4, 0xb3, 0x77, 0xb7, 0x37, 0xe8, 0xb0, 0x67, 0xe1, 0x87, 0xbf, 0xa6, 0xb7, - 0xbd, 0x24, 0x82, 0x7d, 0xd5, 0xb8, 0xec, 0x81, 0xf1, 0x08, 0xc6, 0xd9, 0xa1, 0xdc, 0xfd, 0x17, - 0x68, 0x26, 0xe0, 0xeb, 0xbd, 0xb1, 0xb6, 0xdc, 0x76, 0x24, 0x78, 0xda, 0x7f, 0x76, 0xe6, 0x57, - 0xe7, 0x8e, 0x03, 0xdf, 0x67, 0xab, 0x00, 0x79, 0x1a, 0xac, 0xd3, 0x27, 0xee, 0x8d, 0xf6, 0xd5, - 0x94, 0x2c, 0x96, 0x05, 0xbd, 0x28, 0xfc, 0xa7, 0x26, 0x77, 0xbe, 0x86, 0x2f, 0xbb, 0xde, 0x17, - 0xf8, 0x22, 0xea, 0xe5, 0x75, 0x2d, 0xab, 0x73, 0x37, 0x9b, 0x55, 0x09, 0xd2, 0xd2, 0xb2, 0x5d, - 0x06, 0x07, 0x3f, 0xef, 0x67, 0x0b, 0xbb, 0x76, 0xc5, 0xcd, 0x60, 0xc7, 0x50, 0x06, 0x71, 0x34, - 0x2b, 0x87, 0x9b, 0xce, 0x94, 0x67, 0xd2, 0x6b, 0xa4, 0x74, 0x75, 0xc3, 0x0f, 0xc7, 0xad, 0x5f, - 0x26, 0x9f, 0xca, 0xe6, 0x9f, 0x96, 0x0a, 0x6a, 0x08, 0xcb, 0x59, 0x00, 0x17, 0x19, 0xfe, 0x51, - 0x1d, 0x28, 0x4d, 0x6e, 0x11, 0x8c, 0x03, 0x7e, 0x68, 0x9e, 0xb4, 0x38, 0xbb, 0xcb, 0x36, 0x9c, - 0x23, 0x99, 0xfb, 0xb0, 0x2d, 0xb7, 0xb8, 0x91, 0x24, 0x5f, 0xb2, 0xa4, 0x21, 0xae, 0xbe, 0x48, - 0xc5, 0x64, 0x53, 0x68, 0xdf, 0x31, 0xe8, 0xf6, 0x89, 0x06, 0xe6, 0xfb, 0x10, 0x50, 0xc1, 0xfb, - 0x90, 0x88, 0x7b, 0x5a, 0x03, 0xa0, 0xd3, 0x44, 0x87, 0x24, 0x44, 0x48, 0x8f, 0x1b, 0x3d, 0xca, - 0x8e, 0x01, 0x35, 0x68, 0x45, 0x39, 0x96, 0xc9, 0x48, 0x46, 0x8c, 0x98, 0x9f, 0xe3, 0x6b, 0x9a, - 0xfe, 0x79, 0x38, 0x9f, 0x39, 0x6e, 0xd6, 0x8d, 0x86, 0xfc, 0xd7, 0xc1, 0xc5, 0x65, 0x55, 0xbb, - 0x76, 0x29, 0x88, 0x46, 0xf0, 0xea, 0x25, 0x7e, 0xf7, 0x5a, 0xa0, 0x4f, 0x63, 0x80, 0x70, 0x81, - 0x77, 0x5b, 0xf1, 0x76, 0x89, 0x68, 0xda, 0xca, 0x1d, 0xf2, 0x88, 0xbe, 0xb2, 0xf1, 0xb1, 0x37, - 0x0f, 0xf8, 0xad, 0xcd, 0x29, 0x44, 0x3e, 0x47, 0xaa, 0x02, 0x76, 0x7e, 0x15, 0x1a, 0x8a, 0xf2, - 0xa2, 0x7f, 0x18, 0x79, 0xab, 0x85, 0xdb, 0x4a, 0x34, 0x3b, 0x9a, 0x18, 0x05, 0x24, 0xd6, 0x07, - 0xfa, 0xb2, 0x05, 0x6f, 0xc8, 0xd9, 0x53, 0xac, 0x50, 0x63, 0xc9, 0x97, 0x63, 0x2b, 0xac, 0x56, - 0x0d, 0x15, 0x2d, 0x57, 0xac, 0x85, 0xf5, 0x4c, 0xd6, 0xc1, 0x7a, 0xe2, 0xd1, 0x8c, 0xbf, 0x13, - 0xca, 0x63, 0xf5, 0xd8, 0xfa, 0x10, 0x28, 0x0d, 0x3b, 0xb5, 0x1a, 0xdb, 0xc8, 0x95, 0x0b, 0xf6, - 0xc8, 0xc6, 0xe3, 0xb4, 0x6a, 0xe5, 0x2d, 0xac, 0x67, 0xd9, 0x7d, 0x6e, 0x21, 0x52, 0x19, 0x5a, - 0x73, 0x64, 0x1a, 0xc7, 0x6b, 0xba, 0xac, 0xb9, 0x92, 0xa0, 0xf4, 0x28, 0x7e, 0x0f, 0x3b, 0x0d, - 0x4f, 0x69, 0x1a, 0x21, 0x41, 0x05, 0x52, 0xba, 0x24, 0xd0, 0xdc, 0x77, 0x41, 0xec, 0xdd, 0x2c, - 0x82, 0xb1, 0x87, 0x91, 0xef, 0xde, 0x24, 0x5f, 0x04, 0xad, 0xf5, 0x26, 0x96, 0x1b, 0x0d, 0x79, - 0x0a, 0xbd, 0x91, 0x56, 0xd5, 0xb0, 0x06, 0x9a, 0xca, 0x90, 0x2b, 0xa7, 0x1b, 0x20, 0x57, 0x5e, - 0xad, 0x47, 0xae, 0xf4, 0xb2, 0xf6, 0x3c, 0xe9, 0xcc, 0x74, 0x43, 0x4e, 0x5a, 0x0a, 0x25, 0x87, - 0x53, 0x4f, 0xfc, 0x0d, 0x25, 0x84, 0x57, 0xf2, 0xef, 0x74, 0x16, 0x66, 0x95, 0xf8, 0x13, 0x34, - 0x83, 0x6e, 0x16, 0x09, 0x52, 0xce, 0xc8, 0xd6, 0xb5, 0x9c, 0x9f, 0x5a, 0xcb, 0x08, 0xae, 0xd5, - 0x3a, 0x34, 0x14, 0x43, 0xa6, 0xa6, 0x3e, 0x35, 0x98, 0x52, 0x50, 0x17, 0x19, 0x19, 0xd0, 0x38, - 0xb6, 0xe5, 0x68, 0xae, 0x09, 0xd3, 0xa9, 0xf8, 0xb8, 0xc0, 0xcb, 0x85, 0x4f, 0x4f, 0xf1, 0x88, - 0x70, 0x81, 0x5d, 0xf9, 0x42, 0x48, 0xc9, 0x1a, 0x93, 0x7f, 0x7c, 0x9c, 0x88, 0x6c, 0xe3, 0x51, - 0x42, 0xd9, 0xcc, 0xd9, 0x3d, 0xfc, 0xd2, 0xd9, 0x6a, 0xfd, 0x4e, 0xce, 0xaa, 0xf1, 0xd3, 0xd3, - 0x4e, 0x23, 0x1d, 0x79, 0x8f, 0xdc, 0x2b, 0x35, 0x62, 0x05, 0x5e, 0xbf, 0xb8, 0x29, 0xd5, 0xaa, - 0x57, 0x71, 0x87, 0x5e, 0xc5, 0xa8, 0x57, 0x63, 0xa1, 0x1b, 0x1a, 0xda, 0xd6, 0x6e, 0x41, 0x44, - 0xb4, 0xf5, 0xec, 0x86, 0x43, 0x04, 0x5b, 0x89, 0x4c, 0x6a, 0x28, 0x76, 0x54, 0x3b, 0xe5, 0xcd, - 0xb6, 0xa3, 0xd2, 0x8f, 0x4b, 0xd1, 0x00, 0x8b, 0x51, 0x49, 0x0d, 0x20, 0xe3, 0x49, 0x10, 0xa1, - 0x48, 0xbd, 0x1c, 0x52, 0x16, 0xca, 0x9e, 0xab, 0x66, 0xcd, 0x65, 0xb3, 0xf2, 0xec, 0xac, 0x89, - 0xe1, 0xc9, 0x30, 0x15, 0x6a, 0x44, 0xdc, 0xf3, 0xe1, 0xc2, 0x53, 0x3f, 0xd3, 0xec, 0xd7, 0xb0, - 0x51, 0xe1, 0x05, 0x56, 0x38, 0xaf, 0xfe, 0x5f, 0x0c, 0x85, 0x94, 0x0d, 0x85, 0x94, 0x0d, 0x85, - 0x54, 0x0f, 0x05, 0x4f, 0x30, 0xbb, 0x8b, 0x84, 0x32, 0x0b, 0xbb, 0x10, 0x6d, 0x31, 0x3a, 0x47, - 0xc7, 0x93, 0x59, 0x03, 0x25, 0xb5, 0x60, 0xc4, 0xf4, 0x0c, 0x6f, 0x28, 0xa9, 0x4e, 0xda, 0xec, - 0x63, 0x30, 0x86, 0xe7, 0xe8, 0x3b, 0xbb, 0x81, 0x45, 0x74, 0x01, 0x9b, 0x08, 0x73, 0x10, 0x01, - 0x4f, 0xe4, 0x71, 0x3d, 0xac, 0xf8, 0x3b, 0x78, 0x12, 0xaf, 0x8a, 0xda, 0xdf, 0xef, 0x5c, 0x0d, - 0x50, 0xf5, 0x7c, 0x98, 0xf6, 0xad, 0xc5, 0x06, 0x59, 0xe5, 0x05, 0x18, 0x7e, 0xeb, 0x4b, 0x38, - 0xd5, 0x75, 0xce, 0xd1, 0xd6, 0x12, 0xa2, 0x08, 0xea, 0x57, 0x94, 0xf5, 0xab, 0x5d, 0xd4, 0xaf, - 0xdd, 0x25, 0xfd, 0x65, 0xb1, 0xa2, 0x1c, 0x98, 0x78, 0xbb, 0x96, 0x86, 0x66, 0x39, 0xab, 0x04, - 0xba, 0xb1, 0x05, 0xba, 0x59, 0x25, 0xd0, 0xe0, 0x70, 0x55, 0x41, 0x83, 0x43, 0xbb, 0xa4, 0x01, - 0x99, 0x67, 0xd2, 0xe1, 0x73, 0x8a, 0xbe, 0x88, 0x7a, 0x81, 0xe7, 0xab, 0x6a, 0x58, 0xd8, 0x35, - 0x2c, 0x16, 0xeb, 0x4a, 0x7b, 0x9f, 0xad, 0x28, 0xad, 0xcc, 0x82, 0x2e, 0x8d, 0x6d, 0x48, 0x15, - 0x5d, 0x9f, 0xdd, 0xe7, 0x2b, 0xca, 0x82, 0xf5, 0x6e, 0x67, 0x8b, 0x05, 0xb6, 0xa5, 0xfc, 0x1f, - 0xf2, 0x55, 0x35, 0xdf, 0x68, 0x29, 0xb5, 0x6f, 0x49, 0x69, 0x7a, 0x6d, 0x75, 0x2d, 0x98, 0x19, - 0x6a, 0x4b, 0xbc, 0x24, 0xe6, 0x94, 0x0e, 0x4c, 0xad, 0x02, 0x6d, 0x87, 0x02, 0x42, 0x84, 0x89, - 0x06, 0x3b, 0xbc, 0xc8, 0x33, 0x97, 0xd4, 0x22, 0x76, 0xc7, 0x54, 0x5e, 0x31, 0x6b, 0xdc, 0x5c, - 0xeb, 0x43, 0xb1, 0x31, 0x6c, 0xdb, 0x06, 0x30, 0x88, 0x56, 0x18, 0x70, 0xe5, 0x8f, 0x7f, 0xd7, - 0xc2, 0x88, 0xbb, 0xb4, 0x61, 0x74, 0xc2, 0xf0, 0x1f, 0xea, 0x58, 0x0e, 0xbb, 0x0a, 0xcb, 0xa1, - 0x8e, 0x6e, 0x19, 0xc8, 0x6e, 0xda, 0xd5, 0x94, 0x72, 0xf5, 0x57, 0x3f, 0x74, 0xbd, 0x7a, 0xc1, - 0x23, 0xcc, 0x2f, 0x39, 0xea, 0xb6, 0xdf, 0x32, 0x41, 0xcc, 0x1e, 0x4c, 0xab, 0xc3, 0xac, 0x39, - 0x7b, 0xb8, 0x8a, 0x66, 0x50, 0xcb, 0x5a, 0xef, 0x29, 0xe4, 0xd3, 0xed, 0xea, 0xa6, 0xe8, 0x89, - 0x5a, 0x51, 0x50, 0x37, 0xa9, 0xe1, 0xca, 0x02, 0xb6, 0xab, 0x27, 0xbc, 0x16, 0x44, 0xf5, 0x6a, - 0xa1, 0x46, 0xd6, 0x14, 0xb2, 0xa1, 0x86, 0x4d, 0x18, 0x33, 0xb7, 0xae, 0xda, 0x88, 0xb8, 0xd2, - 0x6f, 0x53, 0xec, 0xe2, 0xa1, 0xb5, 0x2c, 0x0b, 0xbf, 0xa9, 0x31, 0x52, 0x34, 0x7e, 0x53, 0x6b, - 0x91, 0x8b, 0xf6, 0x22, 0x1b, 0xa0, 0x4f, 0x8d, 0x62, 0xc5, 0x25, 0x59, 0xe8, 0x41, 0x89, 0xe6, - 0x86, 0xdb, 0xc0, 0xa7, 0xa7, 0x68, 0x74, 0xe4, 0xda, 0xe3, 0xa6, 0xaa, 0xea, 0xd6, 0xbe, 0x42, - 0x7c, 0x22, 0x7c, 0x14, 0xb9, 0x74, 0x1e, 0x51, 0xef, 0x8b, 0xe1, 0x34, 0x3d, 0x0a, 0x0b, 0xc4, - 0x11, 0x30, 0x09, 0x87, 0x90, 0x20, 0xff, 0x1c, 0x84, 0x45, 0x7d, 0xbc, 0x58, 0x62, 0x09, 0x64, - 0x16, 0x14, 0x8b, 0x21, 0xcd, 0xd5, 0x65, 0x2b, 0xb4, 0x6c, 0xf2, 0xc3, 0x85, 0x58, 0xa1, 0x8f, - 0xc2, 0x9d, 0x9d, 0x52, 0x7e, 0x5a, 0x26, 0x1d, 0x52, 0x92, 0xfc, 0x31, 0xc0, 0x1f, 0xd6, 0xe7, - 0x8b, 0xda, 0xe7, 0xdf, 0xa6, 0xcd, 0x39, 0x0f, 0xc7, 0x79, 0x54, 0x1f, 0x00, 0xb4, 0xbe, 0xb3, - 0x2d, 0x2a, 0x82, 0xcb, 0x55, 0x43, 0x79, 0xb5, 0x57, 0x9d, 0x60, 0xc3, 0x3c, 0xb1, 0xa3, 0x4f, - 0xb3, 0xef, 0xd1, 0x7a, 0xe2, 0xbf, 0x0c, 0x40, 0xc6, 0x19, 0x3a, 0xbf, 0x22, 0xc7, 0x3d, 0x0e, - 0x09, 0x32, 0x1e, 0x8b, 0x83, 0x29, 0xb0, 0xf2, 0x64, 0x58, 0xb2, 0xe4, 0x6b, 0x29, 0x3d, 0xf5, - 0xb6, 0x6b, 0x42, 0xf4, 0x7e, 0x8b, 0xcd, 0xdf, 0x09, 0x5e, 0x06, 0x53, 0xce, 0x08, 0x90, 0x8d, - 0x26, 0xb8, 0x34, 0x41, 0xc8, 0x5b, 0x8f, 0x59, 0x15, 0x6f, 0xd3, 0x31, 0x06, 0x89, 0x4b, 0x4f, - 0x5b, 0xcf, 0xd9, 0x53, 0xe7, 0xd0, 0x7b, 0x4e, 0xaf, 0x4f, 0x97, 0xa6, 0x5d, 0x67, 0xc5, 0xa4, - 0x46, 0xe7, 0x5f, 0x0a, 0xd6, 0x13, 0xfa, 0x26, 0x3b, 0xad, 0x47, 0xf3, 0x89, 0xf3, 0x3b, 0x3d, - 0x49, 0xbb, 0x50, 0xed, 0xd3, 0xe3, 0x01, 0x8a, 0x03, 0x79, 0xbb, 0x8e, 0xe5, 0xc0, 0x42, 0x3b, - 0x1d, 0x1d, 0xbe, 0xf0, 0x5d, 0x18, 0xcf, 0x39, 0x48, 0x29, 0xe3, 0xaa, 0x4f, 0x5f, 0x83, 0xd1, - 0x03, 0x43, 0x7e, 0x12, 0xf5, 0xf0, 0x88, 0x2f, 0x85, 0xbd, 0x40, 0x54, 0x14, 0x78, 0xd9, 0x94, - 0x4c, 0x6c, 0x04, 0x69, 0xea, 0x67, 0xef, 0x98, 0x5f, 0x85, 0x5c, 0x16, 0xf2, 0xcb, 0xf8, 0xc5, - 0x77, 0x61, 0xbf, 0x3c, 0x71, 0x74, 0x4c, 0xb3, 0x63, 0x22, 0xb6, 0xdd, 0xbd, 0xec, 0x54, 0x61, - 0xfa, 0x2d, 0xcd, 0x6e, 0xac, 0xcd, 0x3b, 0xe3, 0x96, 0x27, 0x60, 0xe4, 0x2a, 0x47, 0xa4, 0x89, - 0xff, 0xf3, 0x0a, 0xd1, 0xbe, 0xf8, 0x2f, 0x36, 0x73, 0x80, 0x64, 0x0a, 0x13, 0x26, 0x0d, 0x85, - 0xd9, 0xb0, 0x4d, 0x29, 0x28, 0x22, 0x7f, 0x5c, 0x34, 0x1f, 0x4f, 0xad, 0xc7, 0xd3, 0xf9, 0xc7, - 0x46, 0xfc, 0xa6, 0x8c, 0xc6, 0x40, 0x50, 0x66, 0xc2, 0x48, 0xaa, 0xa5, 0x8a, 0xba, 0x13, 0x7c, - 0xb1, 0x0c, 0xa0, 0x68, 0xe9, 0x1e, 0x96, 0x13, 0x81, 0x56, 0xf4, 0x76, 0x25, 0x61, 0xa5, 0x8d, - 0x33, 0xbd, 0xd0, 0x0e, 0xcb, 0xfc, 0x71, 0x59, 0x70, 0xe0, 0xce, 0xc4, 0xad, 0xc4, 0x35, 0x71, - 0xa1, 0x07, 0x05, 0x2a, 0x74, 0x98, 0x78, 0x06, 0x6a, 0xcb, 0xda, 0x20, 0x98, 0x42, 0xf1, 0x20, - 0xd0, 0x62, 0x3b, 0x20, 0x7e, 0xc1, 0x97, 0x2f, 0x87, 0x3d, 0x31, 0x08, 0x7a, 0xe4, 0xf7, 0xec, - 0x3d, 0xe2, 0x15, 0x6c, 0x76, 0x76, 0xdd, 0xa3, 0xe8, 0x74, 0x01, 0x53, 0xc1, 0x06, 0xce, 0xd2, - 0x71, 0x47, 0xfb, 0x83, 0xad, 0x3f, 0x75, 0xfe, 0x08, 0xb6, 0xc9, 0x83, 0x04, 0x55, 0x5b, 0x24, - 0xbd, 0xa9, 0x00, 0x0c, 0xc0, 0xea, 0xf1, 0x8f, 0x8a, 0xcf, 0x11, 0xd0, 0x58, 0x63, 0xa8, 0x7e, - 0x6a, 0xf5, 0xa4, 0x97, 0x98, 0x6e, 0x53, 0x67, 0xe3, 0xeb, 0x08, 0x14, 0x7b, 0x86, 0x41, 0x6f, - 0x37, 0xe9, 0xd5, 0x62, 0xf6, 0x88, 0xc3, 0x92, 0xae, 0x64, 0x8b, 0xb1, 0x09, 0x66, 0x93, 0x50, - 0x2c, 0xf8, 0x27, 0xc3, 0x81, 0x17, 0x66, 0xa7, 0xa0, 0x23, 0x49, 0x98, 0xbd, 0x1b, 0x32, 0xaf, - 0x89, 0x0c, 0xd6, 0x30, 0x3b, 0x6b, 0x4e, 0x1a, 0x59, 0xc0, 0x14, 0x01, 0x5b, 0x53, 0x3e, 0x01, - 0x9c, 0x8f, 0x09, 0xfb, 0x17, 0x07, 0xbe, 0x18, 0xf2, 0xd9, 0x69, 0x73, 0xcc, 0x23, 0xd0, 0xe9, - 0x41, 0x7a, 0x22, 0xee, 0x42, 0x5c, 0x64, 0xa7, 0x97, 0x30, 0x71, 0x5b, 0x97, 0x27, 0x20, 0x49, - 0x08, 0xd5, 0x4c, 0x4e, 0x9b, 0x49, 0x77, 0xcd, 0x24, 0x8c, 0x68, 0x84, 0x11, 0x63, 0x3e, 0xb0, - 0x4c, 0x82, 0xec, 0x9d, 0x07, 0x8a, 0x14, 0x38, 0x5d, 0xad, 0x85, 0xe8, 0x7b, 0x51, 0x24, 0xda, - 0x28, 0x89, 0xee, 0xe3, 0x47, 0x9a, 0x8f, 0xae, 0x54, 0x8f, 0x1d, 0x38, 0xb0, 0x5a, 0xa1, 0x2a, - 0xe2, 0xc8, 0xd7, 0x1f, 0x42, 0xd5, 0xa4, 0x54, 0xac, 0xd2, 0x6f, 0xb1, 0xf5, 0x0c, 0x1a, 0x07, - 0xd3, 0x5c, 0xc3, 0xa4, 0xa4, 0x20, 0x17, 0xb0, 0x39, 0x8c, 0x1b, 0xdd, 0xab, 0xa3, 0x33, 0x64, - 0x37, 0xe5, 0x5b, 0x68, 0xcd, 0xd0, 0xf7, 0x38, 0x4e, 0x83, 0x84, 0xd7, 0xe2, 0x30, 0x09, 0x22, - 0x76, 0x50, 0x4d, 0x98, 0x44, 0x6a, 0xa8, 0xae, 0x00, 0xe0, 0x33, 0xa5, 0x48, 0x76, 0x2a, 0xde, - 0x82, 0xe5, 0x5a, 0xb4, 0x79, 0xb4, 0xa1, 0x23, 0x30, 0x86, 0xc9, 0xc3, 0x0a, 0x72, 0x0f, 0x6b, - 0xe5, 0x0e, 0xb6, 0x29, 0xf7, 0xe8, 0xe5, 0x4c, 0xc4, 0x2e, 0xe0, 0x11, 0x81, 0x99, 0x29, 0x57, - 0xce, 0x84, 0xb5, 0xd5, 0xd5, 0xac, 0x1b, 0x52, 0x20, 0x7b, 0x6d, 0x55, 0x05, 0xe1, 0x5a, 0x5e, - 0xbb, 0x50, 0xd0, 0xe6, 0x34, 0xbf, 0x42, 0x0f, 0xdf, 0xd0, 0x6a, 0xc3, 0x69, 0x32, 0x3b, 0xe9, - 0xdb, 0x65, 0x5e, 0xa1, 0xf7, 0xb7, 0x72, 0x6d, 0x8d, 0x43, 0x38, 0xb0, 0x46, 0x0f, 0xf3, 0xe3, - 0x8e, 0xce, 0xc3, 0x0e, 0x8a, 0x6e, 0x17, 0x1e, 0xf6, 0x69, 0x13, 0x62, 0x77, 0x8b, 0xe6, 0xb4, - 0xc3, 0x31, 0x76, 0xf0, 0x5d, 0x56, 0x0b, 0x30, 0xc4, 0x2c, 0xdf, 0xaf, 0x01, 0x04, 0x5b, 0x22, - 0x4c, 0x53, 0x18, 0x0d, 0xd9, 0x8d, 0x9e, 0x2e, 0xdc, 0x53, 0x0c, 0xb8, 0x2b, 0xdd, 0xb6, 0xd3, - 0x99, 0x87, 0x07, 0x22, 0x45, 0x18, 0x22, 0xd9, 0x65, 0xbd, 0xaa, 0xf2, 0x19, 0xea, 0xf8, 0x19, - 0x71, 0x3f, 0xf4, 0xf3, 0xeb, 0xc9, 0x79, 0x99, 0xf7, 0x4b, 0x86, 0x6a, 0x0a, 0x43, 0x04, 0x11, - 0xa3, 0x90, 0x1c, 0x42, 0xb4, 0x83, 0x5a, 0x68, 0xea, 0x74, 0x09, 0x9e, 0xcd, 0xca, 0x21, 0x7d, - 0x43, 0xc6, 0x31, 0x65, 0x21, 0xa5, 0x76, 0xd2, 0x7e, 0x10, 0x9f, 0x47, 0x0d, 0x93, 0x52, 0x90, - 0x04, 0xc1, 0xa8, 0x9b, 0x87, 0xbe, 0x01, 0x84, 0xca, 0x5e, 0x49, 0x00, 0x4a, 0x27, 0x87, 0x39, - 0x1b, 0x99, 0xcb, 0x96, 0x60, 0x3f, 0x2e, 0xe7, 0x01, 0x2c, 0xcb, 0xf0, 0xdf, 0x5d, 0x80, 0x27, - 0x19, 0xb0, 0x6d, 0xe6, 0x97, 0x2a, 0x5e, 0xf8, 0x36, 0xc1, 0xe6, 0x1e, 0x62, 0xe2, 0x5d, 0xa5, - 0xcb, 0xe8, 0x60, 0xce, 0xb3, 0x1d, 0x7d, 0x53, 0xcb, 0xe7, 0x56, 0xf7, 0xd0, 0xe6, 0x51, 0x9f, - 0x12, 0xc7, 0x93, 0xa2, 0x0f, 0x2f, 0xec, 0x93, 0x44, 0xee, 0x31, 0x16, 0x21, 0x84, 0x83, 0xc4, - 0xca, 0xb4, 0x65, 0x24, 0x10, 0x60, 0xb1, 0xc9, 0x30, 0x7c, 0xa4, 0xce, 0xed, 0xa3, 0xdb, 0x4d, - 0xde, 0x7f, 0xe7, 0x2d, 0x0c, 0xdd, 0x30, 0xb4, 0x29, 0x54, 0x34, 0x72, 0x72, 0xee, 0xd9, 0xfc, - 0x29, 0xfa, 0xc1, 0xb5, 0x67, 0x93, 0xa7, 0x18, 0xac, 0x65, 0xa1, 0x40, 0x60, 0xce, 0xf3, 0x4f, - 0xcc, 0xa3, 0x87, 0x73, 0x82, 0x65, 0x62, 0x18, 0x6b, 0x83, 0x86, 0xff, 0xbe, 0xa6, 0x70, 0x17, - 0xa8, 0x91, 0xbc, 0x17, 0x87, 0x89, 0x58, 0x6c, 0xf6, 0x60, 0xad, 0x2c, 0xd3, 0x73, 0x59, 0xcc, - 0x37, 0x8a, 0x92, 0x05, 0x3e, 0x32, 0xd5, 0x92, 0x14, 0x26, 0x2d, 0x99, 0xad, 0xc7, 0x2b, 0x3a, - 0x72, 0x1d, 0xc9, 0x59, 0x6f, 0x89, 0x7d, 0x1b, 0x79, 0x63, 0x2b, 0xa5, 0x18, 0x97, 0x32, 0x9a, - 0xc0, 0x4b, 0x9b, 0x6a, 0xca, 0x9b, 0xf1, 0x4f, 0x5a, 0x94, 0xd8, 0x82, 0xd1, 0x35, 0x08, 0xb6, - 0x3c, 0xf9, 0x67, 0x9d, 0x9c, 0xc2, 0x96, 0x64, 0x91, 0xa7, 0x07, 0xaf, 0x84, 0x04, 0xc5, 0xdd, - 0xfb, 0xf4, 0xa7, 0xeb, 0x49, 0x1f, 0x34, 0x2d, 0x06, 0x4d, 0x03, 0x2d, 0x53, 0xba, 0x56, 0x2f, - 0x35, 0x89, 0x1e, 0xd4, 0x7d, 0xb3, 0xf3, 0xc5, 0x24, 0xa6, 0xc6, 0x6e, 0xa5, 0x8d, 0x73, 0x3a, - 0xa8, 0xe8, 0xfe, 0x30, 0x1e, 0x8f, 0x7b, 0xfb, 0x83, 0x17, 0x5f, 0x7a, 0x3d, 0x64, 0x57, 0x75, - 0xf6, 0x60, 0x5c, 0xef, 0x39, 0x1e, 0xfe, 0x7b, 0x2d, 0xff, 0x9d, 0xc0, 0x12, 0x8e, 0xd3, 0xd1, - 0x0a, 0x09, 0xc7, 0x6d, 0xf2, 0xfd, 0xfc, 0xbb, 0xc8, 0xe7, 0xfb, 0xfe, 0x66, 0xf2, 0xb1, 0x2f, - 0xff, 0x59, 0x37, 0x2c, 0xef, 0xad, 0x8f, 0x51, 0x0c, 0xd6, 0x89, 0x19, 0x25, 0xa0, 0x26, 0xe2, - 0xd6, 0xb0, 0xbb, 0x1c, 0xc0, 0x66, 0x4f, 0x9c, 0x1f, 0x7e, 0x8c, 0x1e, 0x91, 0x0d, 0xe0, 0xab, - 0xaf, 0x90, 0xf0, 0x80, 0x70, 0xf5, 0xf8, 0xd4, 0x29, 0xaf, 0x19, 0x47, 0xad, 0x6f, 0xe8, 0xc3, - 0x09, 0xf3, 0x86, 0x2e, 0x84, 0x73, 0x8f, 0x70, 0x95, 0x95, 0xa1, 0x5e, 0xc6, 0x31, 0xc2, 0xc6, - 0xca, 0x37, 0x2e, 0xa2, 0x86, 0x0a, 0x03, 0x59, 0x0f, 0x79, 0xe7, 0x0f, 0x88, 0xc5, 0xcb, 0x41, - 0x0b, 0x61, 0x28, 0x48, 0x83, 0x99, 0xbc, 0xbd, 0x26, 0xe3, 0x6c, 0x36, 0x1e, 0xfb, 0xbe, 0x63, - 0x00, 0x1f, 0x57, 0x0c, 0xb3, 0x50, 0x60, 0x37, 0x96, 0x2e, 0xd2, 0xdf, 0x99, 0x49, 0xe5, 0xb0, - 0xb6, 0x37, 0x55, 0xd3, 0x8e, 0x5c, 0x3e, 0x11, 0x3c, 0x4c, 0x2b, 0x05, 0x1e, 0x4e, 0x48, 0xef, - 0x3e, 0x6c, 0xc4, 0xac, 0xf1, 0x03, 0xfb, 0xd9, 0xd2, 0x0d, 0x6a, 0x49, 0xaf, 0xe6, 0x63, 0x58, - 0xde, 0x62, 0x68, 0x8f, 0xe2, 0x0e, 0x3a, 0x12, 0xfe, 0xf3, 0x3b, 0xa7, 0xec, 0xcf, 0x61, 0x78, - 0xaa, 0xf5, 0x06, 0xf4, 0xc5, 0x6a, 0x41, 0xe6, 0x96, 0x2a, 0xfd, 0xc9, 0xb8, 0x39, 0xac, 0x72, - 0xce, 0xd7, 0x96, 0x53, 0x38, 0xad, 0x53, 0x40, 0xad, 0x9c, 0x9f, 0xd7, 0x96, 0x73, 0xe7, 0xb4, - 0xce, 0x19, 0xb5, 0x72, 0xfe, 0xdc, 0x2c, 0xa7, 0xbf, 0x14, 0x1a, 0x1f, 0xb4, 0x8d, 0x8c, 0xaa, - 0xf6, 0x3e, 0x0e, 0x66, 0x4b, 0x4b, 0x6b, 0xeb, 0x82, 0x57, 0x86, 0x6d, 0xab, 0x82, 0x3c, 0x2e, - 0xaa, 0xaf, 0x09, 0x43, 0xa3, 0x2c, 0x92, 0xb4, 0x59, 0xc5, 0x25, 0x61, 0x18, 0xaf, 0xfb, 0x41, - 0x04, 0x85, 0xb4, 0x93, 0x4c, 0xd7, 0x75, 0x33, 0x0f, 0x23, 0xaf, 0x9e, 0x76, 0x8d, 0x08, 0xf6, - 0xb5, 0xb4, 0x49, 0x58, 0x28, 0x3c, 0x74, 0xf9, 0xa8, 0x56, 0xc5, 0x5f, 0xec, 0xf8, 0x4e, 0x6d, - 0x0c, 0x78, 0xed, 0x96, 0x4f, 0xd9, 0x18, 0x23, 0x91, 0xaa, 0xb3, 0xf8, 0x8a, 0xcc, 0x60, 0x2b, - 0x5f, 0x54, 0xf3, 0x85, 0xc9, 0x91, 0xb1, 0xec, 0xb6, 0xb0, 0xe8, 0xb4, 0x12, 0xe9, 0xa5, 0x61, - 0xd5, 0xa9, 0x7d, 0x13, 0x96, 0x1b, 0x1f, 0x6d, 0x52, 0x82, 0xc9, 0x83, 0x1e, 0xfa, 0x21, 0x86, - 0x59, 0xb3, 0x8f, 0xc0, 0xd7, 0x6b, 0x55, 0x86, 0x28, 0x5c, 0x0f, 0x77, 0xf0, 0x55, 0x8e, 0x25, - 0xdf, 0xea, 0x6f, 0xd3, 0xa6, 0x94, 0xab, 0xce, 0xfa, 0xea, 0x96, 0xc2, 0x18, 0x7a, 0xa1, 0x50, - 0xf8, 0xad, 0x8b, 0x83, 0x3c, 0x48, 0xbd, 0x31, 0x74, 0x42, 0x62, 0x92, 0xae, 0x29, 0x69, 0x12, - 0xc6, 0x26, 0x69, 0x42, 0x49, 0xf7, 0xb0, 0xb8, 0xd5, 0x1a, 0x8c, 0x3e, 0xa2, 0x8e, 0xc5, 0xe1, - 0x23, 0xc1, 0xc5, 0xc5, 0xa5, 0x47, 0xff, 0xbb, 0xac, 0x2a, 0x79, 0x6c, 0x8c, 0x20, 0xf7, 0x94, - 0x3b, 0xbc, 0x10, 0x8d, 0x93, 0x5e, 0xd6, 0x8f, 0x85, 0x2d, 0xff, 0xea, 0x38, 0xc6, 0x78, 0xe2, - 0x76, 0xaf, 0xff, 0x74, 0x5a, 0x72, 0xd7, 0x33, 0xee, 0x07, 0x08, 0xe7, 0x76, 0xca, 0x6d, 0x3d, - 0xa4, 0xaa, 0xf8, 0x23, 0xce, 0x0e, 0x92, 0xba, 0x04, 0x7f, 0x2b, 0x1a, 0x94, 0x67, 0xcf, 0xae, - 0x17, 0xe5, 0xfc, 0x76, 0x82, 0xe7, 0x8b, 0xcf, 0xbe, 0x5f, 0xe4, 0xd3, 0x34, 0x4d, 0x3f, 0x2e, - 0xa2, 0x67, 0xc8, 0x7a, 0xf3, 0xec, 0x7e, 0xf1, 0x71, 0x81, 0xdb, 0xe9, 0x3a, 0x20, 0xb3, 0x82, - 0x54, 0xea, 0xf7, 0xe7, 0xd3, 0xbd, 0x70, 0xf0, 0xd2, 0x1d, 0x1d, 0x21, 0xf2, 0x64, 0x1f, 0x3f, - 0xeb, 0x7a, 0xf3, 0xe9, 0xe8, 0x50, 0xfd, 0x3c, 0xf2, 0x71, 0xaa, 0x7f, 0xfe, 0x3c, 0x0c, 0xe7, - 0x53, 0x4a, 0xd9, 0x0b, 0x8f, 0x30, 0xc5, 0x7f, 0xc9, 0x52, 0xa0, 0x00, 0x65, 0xdd, 0x20, 0xfc, - 0x8f, 0x6b, 0xed, 0x1b, 0x3e, 0xcc, 0x0b, 0x8c, 0xbf, 0x9b, 0x4f, 0x2b, 0xaf, 0x87, 0xb0, 0x49, - 0x5e, 0xef, 0x85, 0xff, 0x25, 0xb2, 0x41, 0x7a, 0xdf, 0x0d, 0x14, 0x24, 0x73, 0x32, 0xcb, 0x2d, - 0xb4, 0x53, 0x48, 0xf8, 0x89, 0x5c, 0x8d, 0xc2, 0x13, 0x8a, 0xcf, 0xad, 0x09, 0x80, 0xb6, 0x32, - 0xc8, 0xfb, 0xec, 0x0e, 0x15, 0xb5, 0x4e, 0xf7, 0x5e, 0x85, 0x87, 0x66, 0x21, 0xf4, 0xe5, 0x6c, - 0x91, 0xdf, 0xf4, 0x7e, 0x8a, 0x26, 0x69, 0x2a, 0xb7, 0x8d, 0x7d, 0xf1, 0x7d, 0xb0, 0x52, 0x1b, - 0xd4, 0x30, 0xb0, 0x15, 0x0f, 0x9d, 0x67, 0xc2, 0x2d, 0x51, 0x29, 0x51, 0xcf, 0x6d, 0x64, 0x56, - 0x58, 0x58, 0x0b, 0x7b, 0x7e, 0xca, 0x0b, 0x21, 0x9b, 0x92, 0xfd, 0xdc, 0xfd, 0x44, 0x29, 0xc5, - 0x87, 0x8d, 0x90, 0xe7, 0x44, 0xe4, 0xa5, 0x64, 0xf0, 0x3a, 0x8a, 0x9b, 0xd5, 0x8b, 0xa3, 0xb6, - 0xd4, 0xa7, 0xa7, 0x8e, 0x15, 0xca, 0xb3, 0x14, 0x47, 0xf3, 0xbe, 0x38, 0x1f, 0x55, 0xe0, 0x22, - 0x14, 0xad, 0xb1, 0xe3, 0x57, 0x97, 0x88, 0x66, 0xf8, 0x17, 0x75, 0x66, 0x24, 0x30, 0x07, 0xd2, - 0x2c, 0xbc, 0xb9, 0xf7, 0x58, 0x02, 0xbc, 0xff, 0x77, 0xda, 0xba, 0xb3, 0x2c, 0xbf, 0x86, 0x37, - 0x73, 0x8e, 0x77, 0x3e, 0x18, 0x46, 0x32, 0x48, 0x28, 0xaa, 0x05, 0x09, 0xc9, 0x73, 0xd9, 0xee, - 0x70, 0x25, 0xf2, 0x34, 0x88, 0xf3, 0x8e, 0xe2, 0x35, 0x4c, 0x3e, 0x1c, 0xff, 0x36, 0x63, 0xe9, - 0x36, 0xc0, 0x3e, 0xd1, 0x13, 0xc1, 0x16, 0x3e, 0x07, 0x0b, 0x0e, 0x91, 0x0f, 0x10, 0x3a, 0xb3, - 0xef, 0xdc, 0xc7, 0x44, 0x06, 0xf0, 0xe0, 0x48, 0x58, 0x08, 0x34, 0x60, 0xc4, 0x0e, 0x9f, 0x79, - 0xf9, 0x04, 0xc7, 0x2e, 0x11, 0xca, 0xdd, 0x51, 0xe4, 0x3a, 0xfe, 0xa3, 0xba, 0x90, 0x7f, 0x11, - 0x9e, 0x64, 0xa2, 0x73, 0x60, 0x02, 0x8b, 0xfa, 0xdc, 0xd8, 0xa9, 0xac, 0x7c, 0xcb, 0xca, 0xbb, - 0xd6, 0xe7, 0x47, 0xa2, 0x12, 0xbe, 0x27, 0xe1, 0x2e, 0x99, 0x98, 0x45, 0x43, 0x4c, 0xaf, 0x86, - 0x20, 0xbb, 0xcc, 0x02, 0x5e, 0xb0, 0x77, 0xc7, 0x91, 0x21, 0x91, 0x85, 0xbc, 0xb9, 0x7d, 0xf4, - 0x84, 0xf9, 0xa7, 0xdc, 0x38, 0x91, 0xf7, 0xdd, 0x77, 0xd6, 0xd9, 0x4d, 0x5d, 0x30, 0xf2, 0xd9, - 0x6c, 0xc6, 0xff, 0x0d, 0xa2, 0x3c, 0x9c, 0x64, 0x64, 0x22, 0xef, 0x45, 0x36, 0x0d, 0xf8, 0x67, - 0xa0, 0xcd, 0xb6, 0x33, 0x88, 0xaf, 0xc4, 0x8e, 0x2d, 0xd0, 0x35, 0xc5, 0x1b, 0xdc, 0x3e, 0x43, - 0x80, 0xe6, 0xb7, 0x5a, 0x0d, 0xba, 0x0d, 0xca, 0xc0, 0xd8, 0x8e, 0x93, 0xba, 0x83, 0xab, 0xd1, - 0x1a, 0x7b, 0x03, 0x68, 0x8f, 0xca, 0x83, 0x6d, 0x6e, 0x80, 0xe8, 0xc6, 0x1b, 0xf2, 0x8b, 0x23, - 0xa0, 0xf3, 0x5f, 0x08, 0x6e, 0x2e, 0x12, 0xd0, 0x23, 0x9a, 0x6f, 0x76, 0x05, 0x05, 0x72, 0x3b, - 0x7c, 0xf5, 0x16, 0x5c, 0xc7, 0x30, 0x2d, 0x25, 0xa1, 0x73, 0xf8, 0xda, 0x91, 0x67, 0x41, 0x36, - 0x43, 0x1d, 0xe1, 0x8c, 0xf2, 0xc4, 0xff, 0xfe, 0x1f, 0xe4, 0x84, 0x0b, 0x4c, 0x52, 0x84, 0x79, - 0xbc, 0xa4, 0x85, 0x7f, 0xb6, 0xc1, 0x05, 0x57, 0x44, 0x08, 0x44, 0x4c, 0x48, 0x33, 0x7a, 0x30, - 0x46, 0xdd, 0x5b, 0x2a, 0x8d, 0x5f, 0x80, 0xae, 0x7b, 0x69, 0xab, 0xd4, 0xa3, 0x3b, 0x35, 0x82, - 0x01, 0x36, 0x51, 0xb9, 0xa2, 0x6d, 0x68, 0x5a, 0x59, 0x84, 0x4e, 0x46, 0x9c, 0x79, 0x21, 0xde, - 0x89, 0xf4, 0x83, 0xc1, 0x70, 0x71, 0xac, 0xa1, 0x59, 0x16, 0x0a, 0xa5, 0x3f, 0x09, 0x8b, 0x8b, - 0xc5, 0xa5, 0xb7, 0x29, 0x43, 0x20, 0xec, 0xe2, 0xff, 0x96, 0x65, 0x51, 0xfe, 0x6a, 0x8c, 0x18, - 0xd7, 0xc3, 0xa4, 0x26, 0xbd, 0x21, 0xd4, 0x93, 0x55, 0xb0, 0xf3, 0x23, 0xc1, 0x9e, 0x8a, 0x41, - 0x05, 0x35, 0x66, 0x9c, 0x70, 0x71, 0x34, 0x4e, 0x04, 0x4e, 0x75, 0x2b, 0xc0, 0xb9, 0x98, 0xb1, - 0x22, 0x8a, 0x1b, 0x5d, 0xa4, 0xb7, 0x85, 0xdd, 0x84, 0x6a, 0xe7, 0x82, 0x94, 0x05, 0x3c, 0xea, - 0x14, 0x0b, 0x41, 0x5d, 0x7c, 0x83, 0x5b, 0xbd, 0x3e, 0xee, 0x77, 0xc4, 0x5f, 0x0e, 0x1d, 0x14, - 0xe3, 0xce, 0x03, 0xf4, 0x8c, 0x02, 0xa0, 0xd1, 0x73, 0x28, 0x38, 0xd1, 0x65, 0xc9, 0x07, 0x08, - 0xc3, 0x21, 0x34, 0x71, 0x11, 0x97, 0xc4, 0xba, 0xd0, 0xd2, 0xdc, 0xe2, 0xc0, 0x99, 0xee, 0x01, - 0xa8, 0xdb, 0x7e, 0x97, 0x14, 0xd7, 0x9d, 0xbf, 0x19, 0xcb, 0x21, 0x10, 0xb1, 0x38, 0x4c, 0xcb, - 0x6c, 0xa7, 0x62, 0x7f, 0x7c, 0x50, 0x24, 0x29, 0x8a, 0x35, 0xcb, 0xe6, 0x01, 0x57, 0xd1, 0xd9, - 0x6a, 0xe3, 0xe7, 0x5f, 0xea, 0xba, 0xea, 0x82, 0x4f, 0x22, 0x6d, 0xe5, 0xce, 0xe2, 0x32, 0xd8, - 0xba, 0x0d, 0x3e, 0xb7, 0x96, 0x08, 0x4b, 0x5d, 0xea, 0xc0, 0x09, 0xce, 0xdd, 0xcd, 0xab, 0x9b, - 0xe6, 0x37, 0xe3, 0xf2, 0xfb, 0xdc, 0x98, 0xd3, 0x1e, 0xd2, 0x16, 0x1a, 0xac, 0x20, 0x6c, 0x03, - 0xfb, 0x5e, 0x73, 0x84, 0x97, 0x35, 0x5c, 0xa5, 0xa5, 0xf4, 0x6b, 0x28, 0x36, 0xba, 0x89, 0x4b, - 0xf8, 0xde, 0x64, 0x25, 0x53, 0x7a, 0x78, 0x91, 0x5c, 0x62, 0xac, 0x58, 0xbf, 0x14, 0xf9, 0x64, - 0xa1, 0xee, 0x71, 0xe1, 0x6a, 0xb0, 0x26, 0x30, 0x17, 0xe3, 0xe3, 0x62, 0xbf, 0x1c, 0xc6, 0xa0, - 0xfa, 0x22, 0x17, 0x2d, 0xaf, 0x91, 0xb8, 0x13, 0xb2, 0x3f, 0x10, 0x24, 0x4c, 0x0d, 0x21, 0x18, - 0xc6, 0xb9, 0xbb, 0x4c, 0x2c, 0xd0, 0x73, 0x5b, 0x9c, 0x32, 0x47, 0x69, 0x18, 0xc2, 0x39, 0x17, - 0x8a, 0x41, 0xd5, 0xd8, 0xb2, 0xd5, 0xe5, 0x62, 0x19, 0xa5, 0x78, 0xfc, 0xca, 0x07, 0x4a, 0x69, - 0x1a, 0x55, 0xc7, 0x5c, 0xb2, 0x0d, 0x8a, 0x88, 0xda, 0x16, 0xb8, 0x46, 0x11, 0x0b, 0xd9, 0x4e, - 0xe5, 0xb6, 0x4d, 0x6e, 0xf9, 0x32, 0xc9, 0xa6, 0xa9, 0x37, 0x32, 0x38, 0x3b, 0x8d, 0xb0, 0x45, - 0x2d, 0x9f, 0x71, 0xd1, 0xea, 0x33, 0xe6, 0x94, 0xb1, 0xd0, 0xf1, 0x25, 0xe2, 0xff, 0x37, 0x73, - 0xe9, 0xab, 0x12, 0xc2, 0x92, 0x68, 0x09, 0x14, 0x37, 0x39, 0xbc, 0x68, 0x44, 0xdd, 0xa9, 0x3a, - 0x1b, 0x45, 0xae, 0xbf, 0x65, 0x22, 0x87, 0xcc, 0x7b, 0x88, 0x7d, 0xaa, 0x4f, 0xb6, 0x13, 0xf7, - 0x44, 0x5d, 0xdc, 0x4a, 0x2e, 0xc3, 0x4c, 0xfe, 0xa1, 0x0f, 0x25, 0x3c, 0xa3, 0x83, 0x3a, 0x17, - 0xe1, 0x02, 0x43, 0x17, 0xea, 0x04, 0x09, 0xd4, 0xe2, 0x1a, 0x54, 0x18, 0x9d, 0x16, 0x1a, 0x40, - 0xa5, 0x84, 0x40, 0x52, 0x78, 0x0e, 0x8a, 0xb2, 0xae, 0x97, 0x85, 0xd8, 0xc5, 0x56, 0x41, 0x08, - 0x71, 0xa3, 0x2e, 0x81, 0x88, 0x1e, 0xe2, 0x67, 0x82, 0xe2, 0x0e, 0x49, 0x42, 0xcc, 0x66, 0xec, - 0xd6, 0x48, 0xa2, 0xb8, 0x67, 0x3a, 0xdf, 0x30, 0xc1, 0xb0, 0xd9, 0xe2, 0x67, 0xd8, 0xc1, 0x24, - 0xae, 0xbe, 0x36, 0x90, 0xf0, 0xe3, 0xda, 0x30, 0x46, 0x57, 0x7d, 0xdc, 0x3c, 0xb5, 0x94, 0xb1, - 0xe3, 0xe2, 0x85, 0xda, 0x19, 0xb7, 0xc0, 0xdf, 0xa7, 0xeb, 0x0a, 0x49, 0xe7, 0xc9, 0x48, 0xe3, - 0x82, 0x8d, 0x00, 0xb3, 0x60, 0xe4, 0xc9, 0x1d, 0x35, 0x50, 0x0c, 0xea, 0xeb, 0x0e, 0x5b, 0xaa, - 0xf2, 0x13, 0xee, 0xc8, 0x30, 0x9f, 0x7a, 0x42, 0x33, 0xa2, 0xf1, 0xa9, 0x37, 0x42, 0x76, 0x26, - 0xf1, 0x6d, 0xde, 0x6f, 0xa5, 0x4f, 0x6b, 0x3e, 0xe1, 0x51, 0x34, 0xe2, 0x69, 0x25, 0x80, 0x0d, - 0xfe, 0xf1, 0xaa, 0x49, 0xc3, 0xa3, 0xf4, 0x16, 0x19, 0x60, 0xbd, 0x77, 0xe1, 0x73, 0x1a, 0x85, - 0x0b, 0x92, 0x04, 0x4c, 0x89, 0x07, 0x5f, 0x32, 0x40, 0x50, 0xe5, 0xce, 0xe9, 0xd8, 0x50, 0xb6, - 0xfa, 0x90, 0x49, 0x2f, 0xb8, 0x11, 0x96, 0x7a, 0x93, 0x24, 0xd1, 0x15, 0xde, 0xa7, 0xb7, 0xd0, - 0x4b, 0xc5, 0x49, 0x3d, 0x01, 0x49, 0x4e, 0x22, 0x66, 0x6b, 0x8d, 0x8b, 0xd3, 0x3c, 0x25, 0x3c, - 0x33, 0x65, 0x6d, 0x89, 0x09, 0x03, 0x89, 0x08, 0x23, 0x4e, 0x3f, 0x48, 0x46, 0x0a, 0x71, 0x0a, - 0xe2, 0x9e, 0xa5, 0xf8, 0x05, 0x36, 0xce, 0x7d, 0x07, 0xde, 0xd5, 0x07, 0xdb, 0xb0, 0xe3, 0x51, - 0xec, 0x8e, 0x7c, 0xff, 0x31, 0xfd, 0xa8, 0xd6, 0xb1, 0x6c, 0x8a, 0x56, 0x9d, 0x9a, 0x91, 0x60, - 0xf6, 0x1a, 0xe7, 0xd7, 0x11, 0x1b, 0xc6, 0x34, 0xed, 0xcb, 0x44, 0x7b, 0xc5, 0xd5, 0x59, 0x86, - 0x7c, 0xac, 0xab, 0x2b, 0xe0, 0x60, 0xef, 0xf1, 0x6a, 0x94, 0xb5, 0xdf, 0x05, 0xfc, 0xee, 0x43, - 0x63, 0xaa, 0xa6, 0x82, 0xd2, 0xd0, 0x11, 0xfd, 0x77, 0xdd, 0xb0, 0xd7, 0x6f, 0x7e, 0x78, 0xf5, - 0xae, 0xef, 0x94, 0xe3, 0xc9, 0x54, 0x58, 0xdb, 0x8e, 0x7b, 0x21, 0x7a, 0xe1, 0x52, 0x6a, 0xd6, - 0xfb, 0x34, 0xf3, 0xfe, 0xf1, 0xaa, 0xed, 0x3e, 0x8b, 0x54, 0xaf, 0x9d, 0xbe, 0xea, 0x1b, 0xdf, - 0xb5, 0xe0, 0xd8, 0x48, 0xf7, 0x45, 0xfd, 0x45, 0x8e, 0xaf, 0xbe, 0xaa, 0xb5, 0x43, 0x53, 0xac, - 0xb0, 0xdc, 0x7f, 0x40, 0xc6, 0x48, 0x3a, 0x31, 0x22, 0x1b, 0xbc, 0x40, 0x94, 0xdf, 0xbd, 0x7e, - 0xf2, 0x75, 0xf1, 0xec, 0xfe, 0x17, 0x30, 0xdb, 0xd3, 0x1f, 0x17, 0x0f, 0xd1, 0x55, 0xff, 0xd0, - 0x1d, 0xfa, 0x3b, 0x38, 0xc7, 0xf6, 0x85, 0xb8, 0x23, 0x9f, 0xe0, 0x99, 0x5c, 0x9d, 0x70, 0x4c, - 0xec, 0xb4, 0x98, 0x10, 0x8f, 0x0e, 0x06, 0x87, 0x60, 0xb6, 0x6c, 0x52, 0x55, 0xd8, 0xb4, 0x89, - 0x96, 0x81, 0x72, 0xa0, 0xd6, 0xc2, 0xea, 0xa2, 0x08, 0xa6, 0x14, 0xcc, 0xb5, 0xf2, 0xb1, 0xef, - 0xec, 0xef, 0x2f, 0x1c, 0x4f, 0xbc, 0xb7, 0x1f, 0x26, 0x28, 0xdc, 0x60, 0x3f, 0x56, 0xee, 0xb2, - 0x31, 0x1a, 0x5e, 0x1f, 0x0b, 0x29, 0x02, 0x58, 0x11, 0x5d, 0x65, 0xcc, 0x1c, 0x2f, 0x76, 0x37, - 0x6d, 0xd7, 0x01, 0x14, 0x24, 0x47, 0x04, 0xb7, 0xa4, 0x0d, 0xb1, 0xea, 0xb2, 0x05, 0x4f, 0xba, - 0x66, 0x81, 0xaa, 0xbd, 0x5e, 0x72, 0x35, 0xa5, 0xb3, 0xa7, 0xfb, 0x5f, 0x46, 0xdf, 0x7e, 0xf7, - 0xed, 0xd3, 0x13, 0xfc, 0xfb, 0xe2, 0xe8, 0xbb, 0xaf, 0xbe, 0xba, 0xff, 0xe5, 0xf8, 0xdb, 0x43, - 0xdf, 0xed, 0xa4, 0x27, 0x16, 0x38, 0xe2, 0xcb, 0xfb, 0x5f, 0x14, 0x79, 0x2e, 0x4d, 0x56, 0x04, - 0x22, 0xcc, 0x29, 0x5e, 0x87, 0xcc, 0x9b, 0x41, 0x37, 0xe5, 0x64, 0xd7, 0x0a, 0x4c, 0xd8, 0x61, - 0xf1, 0x2a, 0x8d, 0xb1, 0xfa, 0x58, 0x3f, 0xc9, 0xb0, 0xe5, 0xa9, 0xb4, 0x89, 0x72, 0x52, 0xd3, - 0xcc, 0x66, 0xbd, 0x27, 0x73, 0x0a, 0xec, 0xee, 0x3e, 0xb4, 0xfb, 0x73, 0xf3, 0x5a, 0x99, 0x99, - 0xa2, 0x24, 0xc9, 0x02, 0xe9, 0x58, 0x13, 0xf4, 0x5c, 0xa6, 0x0b, 0x60, 0x51, 0x02, 0x38, 0xa3, - 0x84, 0xef, 0x43, 0xa9, 0x95, 0xdf, 0x7b, 0xed, 0x9b, 0xea, 0x6c, 0x7a, 0xe3, 0x78, 0x32, 0x8b, - 0x2b, 0xff, 0x08, 0xf5, 0x6f, 0x68, 0xb8, 0xc1, 0xe1, 0x0b, 0x5f, 0xeb, 0xf6, 0xd3, 0x13, 0x32, - 0x80, 0xf4, 0x75, 0x32, 0xb6, 0xfc, 0x3d, 0xfd, 0x4d, 0x8d, 0x1d, 0xb2, 0x54, 0xf1, 0x03, 0x87, - 0x28, 0x3a, 0xe6, 0x40, 0x79, 0xc4, 0x4d, 0x49, 0x55, 0xe4, 0x89, 0xfc, 0xd4, 0xce, 0x20, 0x90, - 0x5f, 0x83, 0x8f, 0x18, 0xb9, 0x8d, 0x08, 0x35, 0xe5, 0x53, 0x4b, 0xa9, 0xd0, 0x87, 0x33, 0x90, - 0x9e, 0xa3, 0x8b, 0x8b, 0xb7, 0x2c, 0x98, 0x79, 0xd6, 0xea, 0x42, 0x6b, 0x04, 0x8f, 0x9a, 0xcc, - 0x0a, 0x1f, 0xd5, 0xd7, 0x10, 0xa0, 0x29, 0x20, 0xdf, 0x89, 0xe3, 0xe3, 0x7e, 0xfc, 0xb6, 0x4c, - 0x9d, 0x2d, 0x7a, 0x4f, 0x0f, 0x05, 0x71, 0x91, 0x58, 0xc9, 0x81, 0xae, 0x3d, 0x28, 0xed, 0x39, - 0xfe, 0x43, 0x61, 0xc5, 0xf7, 0x21, 0x8c, 0x73, 0x36, 0x8b, 0x44, 0x30, 0x29, 0xbe, 0x8e, 0xa2, - 0x0c, 0xf6, 0x8c, 0x07, 0x07, 0x07, 0x9a, 0x8b, 0x45, 0xda, 0x8b, 0x6a, 0xee, 0xd7, 0xcc, 0xd8, - 0xb0, 0x22, 0xce, 0x17, 0x33, 0xd8, 0x72, 0x8b, 0x4b, 0x21, 0xb0, 0xa1, 0xa7, 0xd8, 0x3e, 0xf1, - 0x57, 0xe1, 0xba, 0x1c, 0x6f, 0x67, 0x01, 0x7a, 0xed, 0xca, 0x27, 0x78, 0x9f, 0xfd, 0x84, 0x66, - 0xf9, 0xa7, 0x27, 0xdb, 0x0b, 0x10, 0x79, 0x4b, 0x48, 0xa5, 0x98, 0x0b, 0x8f, 0x49, 0x03, 0x69, - 0x1e, 0xbd, 0xe5, 0x06, 0xad, 0xf9, 0xe9, 0x5a, 0xbd, 0xf6, 0x33, 0x36, 0xaa, 0x51, 0x89, 0x11, - 0xd5, 0x39, 0x43, 0x24, 0x8e, 0x07, 0x5a, 0x2e, 0x07, 0x1b, 0xac, 0xfa, 0xb4, 0x3f, 0xc1, 0x89, - 0x02, 0x69, 0x5d, 0xc8, 0x93, 0x09, 0xef, 0x3b, 0x84, 0xef, 0xef, 0xa1, 0x2d, 0x02, 0xe5, 0x34, - 0x73, 0xdd, 0xa4, 0x18, 0x2f, 0x98, 0xde, 0x43, 0x61, 0x38, 0xac, 0xbb, 0x33, 0x96, 0xb8, 0x42, - 0x0a, 0x10, 0xf6, 0x35, 0x39, 0xa9, 0xc8, 0x14, 0xf6, 0x48, 0x1e, 0xce, 0xef, 0x6b, 0xf2, 0xdd, - 0x66, 0xeb, 0xb2, 0xd1, 0x87, 0xc1, 0x00, 0x34, 0xf9, 0xfe, 0xeb, 0xf8, 0x19, 0xcc, 0xc1, 0x8b, - 0xac, 0x1c, 0xf5, 0x8e, 0x9f, 0x21, 0x81, 0x10, 0xfe, 0x3b, 0x2f, 0x6f, 0xe2, 0x51, 0xef, 0x7f, - 0x01, 0xb3, 0xbf, 0x4d, 0xd5, 0x1e, 0x7a, 0x01, 0x00 + 0x60, 0x2e, 0x3d, 0xf7, 0x9e, 0x9e, 0x9e, 0xef, 0x83, 0xb1, 0x85, 0xde, 0x0c, 0x98, 0x4f, 0x79, + 0x32, 0x6b, 0xf5, 0x11, 0x0f, 0xba, 0x6b, 0xc7, 0x8b, 0x76, 0x60, 0xaa, 0x45, 0x08, 0xc8, 0xb2, + 0xb2, 0x28, 0x71, 0x43, 0x84, 0x6d, 0xfa, 0xb6, 0x01, 0xd9, 0x36, 0xa5, 0xce, 0x9b, 0x6b, 0x73, + 0x23, 0xa2, 0xf2, 0xdf, 0x18, 0xe3, 0xa3, 0x23, 0x4f, 0x53, 0x4f, 0x4f, 0x69, 0xcd, 0x51, 0x35, + 0x25, 0x3f, 0x55, 0x71, 0x4f, 0x85, 0x7f, 0x0b, 0xb7, 0x92, 0x79, 0x87, 0x31, 0x57, 0x08, 0xbf, + 0x6f, 0x5b, 0x49, 0x79, 0x96, 0x98, 0x85, 0xb1, 0xab, 0x84, 0x8e, 0xab, 0xee, 0x83, 0x26, 0x61, + 0xe3, 0xd3, 0x90, 0x6e, 0xcc, 0x6e, 0xc6, 0x0f, 0xd0, 0x81, 0xe2, 0xcf, 0x45, 0xd2, 0xc7, 0xbb, + 0x7a, 0x3d, 0x15, 0x28, 0x89, 0xec, 0xe4, 0x09, 0xb4, 0x0f, 0x12, 0xe9, 0x60, 0x58, 0xc8, 0x3e, + 0xc0, 0x8e, 0x09, 0xe9, 0x27, 0x6e, 0x65, 0xd5, 0x6c, 0x47, 0x56, 0xed, 0xe4, 0x86, 0x35, 0x12, + 0x06, 0x04, 0x3c, 0x60, 0xb7, 0xfe, 0xf0, 0x02, 0xdd, 0xd6, 0xc5, 0x13, 0x23, 0xfe, 0x94, 0x99, + 0xf8, 0x0e, 0xe5, 0x73, 0x90, 0xc9, 0x11, 0xbd, 0xc5, 0xe8, 0xd1, 0xc1, 0xaa, 0x27, 0xed, 0xb5, + 0xbb, 0x62, 0x14, 0xfc, 0x3b, 0xb2, 0x26, 0x95, 0x01, 0x1f, 0x64, 0xec, 0x7a, 0xf3, 0xd6, 0x21, + 0xd6, 0x82, 0x76, 0x64, 0x9c, 0x47, 0x9b, 0xfe, 0xa0, 0xd2, 0x0d, 0x94, 0x83, 0x1c, 0x39, 0x5f, + 0xf7, 0x5e, 0x91, 0x67, 0xe5, 0x35, 0x59, 0xa3, 0x70, 0xc6, 0x9f, 0x88, 0x50, 0xba, 0xc7, 0x70, + 0x82, 0x43, 0xfa, 0xd4, 0x67, 0x61, 0xbd, 0xbf, 0x26, 0x31, 0x62, 0xa6, 0x5f, 0x1f, 0x1f, 0x35, + 0xad, 0xc0, 0xed, 0xe6, 0x45, 0xdd, 0xf5, 0xa5, 0x0b, 0x8a, 0xec, 0x27, 0x99, 0xda, 0x70, 0x1c, + 0xb1, 0xe3, 0xe8, 0x60, 0xc8, 0x0e, 0xa3, 0xe6, 0x71, 0x01, 0x03, 0xac, 0xde, 0xee, 0x70, 0xfc, + 0x08, 0x87, 0xe3, 0x1d, 0x98, 0x78, 0xba, 0x08, 0x77, 0xc9, 0x8c, 0x0b, 0x4f, 0x4f, 0xdc, 0xee, + 0xd0, 0x60, 0xc7, 0xb8, 0x87, 0xad, 0xf8, 0x1e, 0x8d, 0xc3, 0x70, 0x30, 0xef, 0xeb, 0xc3, 0xb4, + 0x57, 0x47, 0xea, 0xad, 0xbc, 0xa3, 0xe8, 0xc8, 0x55, 0x34, 0x36, 0x22, 0x4a, 0xb8, 0xce, 0x91, + 0xa8, 0x58, 0xa0, 0x23, 0x99, 0x2c, 0x01, 0xcf, 0xdd, 0x8f, 0x74, 0xf0, 0x0e, 0xc3, 0x50, 0xdb, + 0x7d, 0x0e, 0xfe, 0x7a, 0xf6, 0xe6, 0x1d, 0x68, 0x40, 0xb0, 0x6e, 0x65, 0x69, 0x81, 0x8f, 0x19, + 0xd0, 0xdb, 0x88, 0xce, 0xe0, 0xe8, 0x04, 0x42, 0xc4, 0xed, 0x70, 0xc0, 0x05, 0x89, 0x39, 0x51, + 0x06, 0xda, 0x46, 0x0e, 0x92, 0xf4, 0xbe, 0xef, 0x22, 0xb8, 0x9f, 0xc2, 0xd5, 0xd3, 0x67, 0x5f, + 0xb1, 0x6c, 0xc3, 0x3e, 0xb5, 0xb8, 0x02, 0xbd, 0x40, 0xfc, 0xa1, 0x68, 0x7b, 0xf8, 0x69, 0x59, + 0xcc, 0x70, 0x76, 0x6b, 0x3e, 0xf0, 0xbf, 0x1e, 0xab, 0x8b, 0xf2, 0x74, 0x07, 0x0e, 0xcf, 0xe4, + 0x3c, 0x6c, 0x12, 0x84, 0xa9, 0x5b, 0xf5, 0xa5, 0xcd, 0xc7, 0x80, 0x63, 0x46, 0x0c, 0x16, 0xff, + 0xe8, 0x39, 0x79, 0xe4, 0xa0, 0x5d, 0xc1, 0x2b, 0xb5, 0x22, 0x81, 0x44, 0x19, 0xea, 0xa4, 0x09, + 0x93, 0x3c, 0x2a, 0x32, 0xf2, 0xe3, 0x0b, 0xcd, 0xf1, 0x13, 0xd1, 0xc3, 0x54, 0xc2, 0x2a, 0x39, + 0xb9, 0x2f, 0xe8, 0xf4, 0xdf, 0x87, 0xde, 0xdb, 0x5d, 0x3a, 0x77, 0x4e, 0x80, 0x20, 0x74, 0xd5, + 0xae, 0x1b, 0x08, 0x0f, 0xae, 0x42, 0x3b, 0x67, 0xc5, 0x1e, 0x32, 0x9f, 0x45, 0x48, 0x9b, 0x8e, + 0x54, 0x2c, 0xe8, 0x0b, 0xb9, 0x8f, 0x6e, 0x6d, 0xd0, 0x90, 0x48, 0xaf, 0xb5, 0x10, 0xc6, 0x30, + 0xea, 0x8e, 0x61, 0x0f, 0x0d, 0x8f, 0x68, 0x45, 0xf8, 0xdb, 0xfb, 0x1f, 0xf7, 0x5f, 0x3a, 0x95, + 0x37, 0x49, 0xaf, 0x1e, 0x83, 0x92, 0xbb, 0x76, 0x6d, 0x61, 0xae, 0xda, 0x10, 0xd1, 0xb9, 0x14, + 0xe6, 0xb4, 0x4d, 0x8c, 0x5b, 0x38, 0xc2, 0xb6, 0xb4, 0x6f, 0x5d, 0xc3, 0xd0, 0x97, 0x36, 0xd9, + 0x52, 0xdb, 0x6c, 0x96, 0xe4, 0xb3, 0x88, 0xcd, 0x6a, 0xdc, 0x4a, 0xc8, 0x78, 0x45, 0x86, 0x1e, + 0xdc, 0x34, 0x04, 0x2f, 0xb6, 0x6a, 0x7c, 0x7a, 0x2a, 0x34, 0x85, 0xc5, 0x87, 0x80, 0x02, 0x5c, + 0x5b, 0x69, 0x60, 0x5f, 0x84, 0x96, 0xa0, 0x14, 0x97, 0x1a, 0xc7, 0xdc, 0xd5, 0xe2, 0xce, 0x69, + 0xf8, 0xc0, 0x73, 0x22, 0x38, 0x64, 0xa8, 0x39, 0x80, 0xd6, 0x93, 0xeb, 0xec, 0x1a, 0x17, 0x7d, + 0xd8, 0x4e, 0xf6, 0x23, 0xcf, 0xf9, 0x57, 0x4f, 0xa8, 0xb4, 0x78, 0x1c, 0xda, 0x73, 0x7a, 0xff, + 0x72, 0x3e, 0xc7, 0x63, 0x9f, 0xf2, 0xe4, 0x2e, 0xfb, 0x95, 0x65, 0x0a, 0xec, 0x30, 0xff, 0x55, + 0xc6, 0x60, 0xd6, 0x30, 0xfb, 0x49, 0x40, 0x59, 0x7a, 0x2f, 0x22, 0xda, 0x54, 0x00, 0xc5, 0xa2, + 0x12, 0xd0, 0x42, 0x0e, 0x26, 0xa1, 0x9c, 0xf9, 0xba, 0xb3, 0x62, 0x55, 0x78, 0x7a, 0x52, 0x26, + 0x64, 0xa4, 0x0d, 0x3b, 0x7c, 0x81, 0x26, 0x45, 0x66, 0xd2, 0x93, 0xb8, 0xb2, 0xec, 0xdc, 0x88, + 0x02, 0xc0, 0x8a, 0x5a, 0x64, 0xb0, 0x6d, 0x45, 0x8e, 0x04, 0xfe, 0x5e, 0xe5, 0x37, 0x58, 0x77, + 0x3f, 0x23, 0x1f, 0x0b, 0x7d, 0x6b, 0xb7, 0x4c, 0x93, 0x80, 0xac, 0x7e, 0x88, 0xe5, 0x9c, 0x54, + 0x64, 0x01, 0xe4, 0xd3, 0xd8, 0x98, 0x8e, 0xe8, 0xfe, 0xc0, 0xfa, 0x59, 0x44, 0xd7, 0xc2, 0xea, + 0x21, 0x6e, 0x17, 0x90, 0x63, 0x83, 0xac, 0x4f, 0x08, 0x4e, 0x2e, 0xcc, 0x50, 0xbe, 0x78, 0xc4, + 0x54, 0x4f, 0xe5, 0xcd, 0xf2, 0x7f, 0x06, 0x3b, 0x03, 0x22, 0x47, 0x63, 0x5b, 0x43, 0xc3, 0x53, + 0xee, 0x5d, 0x6c, 0xd1, 0x30, 0xf5, 0xd1, 0xee, 0xb8, 0x03, 0xff, 0xe7, 0x9e, 0x7c, 0xc0, 0x76, + 0x87, 0xe5, 0x50, 0xbc, 0xda, 0xed, 0xfd, 0x8a, 0x64, 0x15, 0x82, 0x96, 0x89, 0xc8, 0x22, 0xe8, + 0x00, 0xfd, 0xc5, 0x92, 0x8c, 0x91, 0x23, 0x9f, 0x41, 0x56, 0x56, 0x14, 0x8a, 0x38, 0xab, 0x10, + 0x88, 0x57, 0x3f, 0xb0, 0x82, 0xcc, 0x60, 0xb4, 0xca, 0x0f, 0xaf, 0x6f, 0xf3, 0x0a, 0x5f, 0x5c, + 0x93, 0x8b, 0xe2, 0x87, 0xc0, 0x11, 0xa5, 0x5c, 0x89, 0xd7, 0xc1, 0x08, 0xe3, 0x88, 0x2e, 0xad, + 0xd6, 0x5b, 0xb9, 0x24, 0x0e, 0xb0, 0x09, 0x41, 0xa8, 0xaa, 0x6a, 0xc8, 0x8f, 0x6e, 0x27, 0x76, + 0x0d, 0xb4, 0xf5, 0x73, 0x47, 0xfd, 0xe5, 0xc2, 0xd9, 0x86, 0x9c, 0x67, 0x49, 0x7c, 0x62, 0xdc, + 0x43, 0xc2, 0x8a, 0x24, 0x2a, 0xef, 0xd3, 0xfc, 0xa3, 0xa8, 0x0e, 0x6c, 0x02, 0x3d, 0x8c, 0x8f, + 0xa6, 0x0c, 0xa2, 0xc0, 0x00, 0xd5, 0x02, 0x69, 0x73, 0xde, 0xe3, 0xdf, 0xa2, 0xda, 0x44, 0x8a, + 0xb1, 0x3e, 0x9f, 0x5e, 0x9c, 0x26, 0xd7, 0x10, 0x09, 0x73, 0x3b, 0x70, 0xd4, 0x13, 0x9b, 0x25, + 0x5a, 0x62, 0x83, 0x25, 0x2e, 0xc6, 0x81, 0x92, 0xab, 0xaa, 0x86, 0x0c, 0x45, 0x97, 0x3a, 0x99, + 0xec, 0xb5, 0x39, 0x62, 0xea, 0x6a, 0xe1, 0xd7, 0x74, 0x20, 0x82, 0xf8, 0xde, 0x2d, 0x22, 0xd8, + 0xc2, 0x96, 0x6a, 0xe2, 0xd1, 0xab, 0x4c, 0xf1, 0x95, 0xe6, 0x1e, 0x4e, 0x49, 0xb2, 0xcd, 0x5b, + 0x9f, 0x8c, 0xb5, 0xfe, 0xed, 0x1d, 0x0e, 0xcd, 0xb7, 0x77, 0xea, 0x35, 0x50, 0x2c, 0xb3, 0x74, + 0xb4, 0x2f, 0x21, 0x6e, 0xa3, 0x26, 0xfc, 0xf0, 0xb5, 0x43, 0xa9, 0xdc, 0x25, 0x67, 0xd1, 0xfc, + 0xe1, 0x91, 0x5c, 0x1b, 0x58, 0x24, 0xd7, 0x56, 0x07, 0x67, 0x68, 0x1a, 0xa1, 0xe7, 0xc1, 0x2c, + 0x4e, 0x0f, 0xe9, 0x47, 0x9d, 0xf1, 0x04, 0x26, 0x78, 0x30, 0x89, 0xc7, 0x09, 0x79, 0xe9, 0x8b, + 0xa8, 0xa3, 0x5d, 0xa1, 0xef, 0xdf, 0x58, 0x59, 0xd6, 0xaf, 0x11, 0x51, 0x90, 0x8d, 0x6e, 0x0b, + 0x2b, 0x41, 0x00, 0x5a, 0xd3, 0x21, 0x45, 0xf2, 0xa6, 0x37, 0x4b, 0xb9, 0x4a, 0x29, 0x41, 0xae, + 0x23, 0x95, 0x1b, 0x88, 0x4f, 0x79, 0x94, 0x81, 0x55, 0x0b, 0xcb, 0x35, 0xaa, 0xee, 0x6f, 0x85, + 0x45, 0x32, 0xa7, 0x28, 0x6a, 0x7c, 0x5c, 0xc5, 0xd6, 0xad, 0x64, 0xf4, 0x9d, 0xf6, 0x73, 0xd8, + 0xcc, 0x63, 0xd8, 0xcd, 0x09, 0x5a, 0x16, 0xb6, 0x73, 0x49, 0x5a, 0x58, 0x1f, 0x1b, 0xa2, 0xf7, + 0x97, 0xba, 0xf7, 0x9b, 0x1d, 0x6f, 0x8d, 0x08, 0x33, 0x94, 0x10, 0x63, 0x19, 0x13, 0xe3, 0xb8, + 0x38, 0x15, 0x3b, 0x9b, 0xc5, 0xbf, 0x28, 0x49, 0x76, 0xe1, 0x4b, 0x6b, 0x8f, 0x60, 0x92, 0x8d, + 0xfa, 0x84, 0xb7, 0xd2, 0x69, 0xad, 0x91, 0x44, 0x26, 0xa6, 0x99, 0x1a, 0x2b, 0x97, 0xf4, 0x45, + 0x57, 0xa3, 0xbe, 0x36, 0xe0, 0x57, 0xd6, 0x8d, 0xd2, 0x62, 0xe5, 0xe8, 0x0f, 0x57, 0xd0, 0x61, + 0xaa, 0x76, 0x11, 0xe8, 0xdc, 0xe4, 0xbb, 0xde, 0x56, 0x39, 0x8a, 0xb6, 0x75, 0xed, 0xde, 0xc9, + 0xfc, 0x78, 0x0d, 0x65, 0x4e, 0x6d, 0x55, 0xc4, 0x1d, 0x0b, 0xdf, 0xc7, 0xab, 0x3d, 0xc4, 0xf7, + 0x4a, 0xeb, 0x75, 0x3a, 0x39, 0xbb, 0xaa, 0xa3, 0x65, 0xab, 0xb7, 0x70, 0xb9, 0x3f, 0x30, 0xfe, + 0xc2, 0xde, 0xc0, 0x77, 0xf7, 0x36, 0x79, 0xa3, 0x8d, 0xa9, 0x0a, 0x9e, 0x2a, 0xf0, 0xdd, 0x61, + 0xc1, 0x1f, 0x61, 0x13, 0x51, 0x0e, 0x7f, 0x60, 0x8d, 0x8d, 0x34, 0xcd, 0xd3, 0x38, 0x86, 0x9c, + 0xd2, 0x9f, 0xb1, 0x89, 0x97, 0x93, 0x68, 0x3e, 0xbe, 0x5b, 0xa4, 0x79, 0xa0, 0xc9, 0x14, 0x69, + 0x82, 0xc1, 0x4f, 0x22, 0x99, 0xac, 0x94, 0x47, 0xc8, 0x06, 0x58, 0x40, 0x51, 0x40, 0xe4, 0x76, + 0xed, 0x70, 0x6b, 0x1a, 0x4b, 0x6d, 0xd4, 0x8a, 0x70, 0xb5, 0x06, 0xd2, 0xaa, 0x89, 0x66, 0x55, + 0x6e, 0x81, 0x66, 0x55, 0x03, 0xb0, 0x7a, 0x07, 0xca, 0x68, 0x21, 0xe1, 0xc3, 0xe8, 0x51, 0x52, + 0x1b, 0x86, 0x95, 0x41, 0xaf, 0x32, 0xd0, 0x2a, 0x04, 0x42, 0x44, 0x00, 0xd6, 0xa1, 0x73, 0xf4, + 0xf2, 0x4b, 0x67, 0x43, 0x2c, 0xab, 0x8e, 0x64, 0xff, 0x06, 0x60, 0xab, 0x67, 0x06, 0x04, 0x86, + 0x89, 0xbc, 0x19, 0xdc, 0x4a, 0xb9, 0x16, 0xbb, 0x4a, 0x8c, 0x80, 0xfd, 0x81, 0x1e, 0x03, 0x36, + 0x76, 0x55, 0xd4, 0x85, 0xbd, 0x52, 0x76, 0x63, 0xaf, 0x94, 0x36, 0xf6, 0xca, 0x36, 0xd2, 0xae, + 0x03, 0xaf, 0x4a, 0xb8, 0x6c, 0xc9, 0xef, 0x25, 0xdb, 0x36, 0xc0, 0x30, 0x65, 0x2b, 0x7a, 0xf8, + 0xa4, 0x9c, 0x37, 0x90, 0x61, 0xca, 0xb5, 0xc8, 0x30, 0xac, 0x6f, 0x7f, 0x4f, 0x40, 0xa9, 0xad, + 0x71, 0xa4, 0xca, 0x4f, 0xc1, 0x91, 0xf2, 0x3b, 0x60, 0x97, 0xca, 0x15, 0xb0, 0x4b, 0xe5, 0x27, + 0x60, 0x48, 0x95, 0x1b, 0x60, 0x48, 0xdd, 0xcc, 0x2d, 0xac, 0x28, 0xf1, 0xf3, 0xb3, 0xa4, 0x23, + 0x84, 0x7a, 0x0d, 0xf1, 0xd4, 0x05, 0xdc, 0x63, 0x8d, 0x5d, 0x42, 0xed, 0xf9, 0x62, 0xa9, 0xe7, + 0x51, 0x54, 0xd1, 0x03, 0x01, 0x86, 0x5e, 0xc9, 0x92, 0x4e, 0x9d, 0xae, 0x61, 0x97, 0x59, 0xf0, + 0xf6, 0x9a, 0x57, 0xd9, 0x19, 0xbd, 0x42, 0xe7, 0x95, 0x98, 0x8d, 0xa2, 0x1a, 0xfe, 0x8a, 0x02, + 0xc7, 0xac, 0xed, 0x0d, 0xdc, 0x85, 0x9f, 0x99, 0xab, 0x54, 0xc6, 0x11, 0x79, 0x4e, 0x74, 0xa6, + 0x69, 0xac, 0xfb, 0x4a, 0xcc, 0x82, 0x98, 0x00, 0x69, 0x79, 0x16, 0x4f, 0x55, 0xe5, 0x59, 0x55, + 0x32, 0x02, 0xe0, 0xab, 0xa5, 0xdb, 0x22, 0x38, 0x7c, 0x9e, 0x3d, 0x68, 0x32, 0x3f, 0x1f, 0x27, + 0x4e, 0x37, 0xbc, 0xe6, 0x4a, 0xc4, 0x20, 0xc2, 0x4c, 0x69, 0xc0, 0x6a, 0xa2, 0x41, 0x51, 0x00, + 0x5b, 0x6f, 0x0a, 0xdd, 0xdb, 0x0a, 0x4f, 0x49, 0x35, 0x71, 0x18, 0x5d, 0xa1, 0xde, 0xfd, 0x91, + 0x6a, 0x70, 0x35, 0x36, 0xce, 0xe0, 0xe5, 0x98, 0x66, 0xf7, 0xf7, 0x57, 0x57, 0x6a, 0xff, 0x11, + 0x1d, 0xd1, 0x78, 0x77, 0x8a, 0x99, 0x9e, 0x81, 0xd4, 0xb1, 0xf6, 0x57, 0x51, 0x8f, 0x34, 0x87, + 0x6d, 0x8c, 0x46, 0x49, 0x07, 0x99, 0x11, 0xe7, 0x2b, 0xea, 0x25, 0xea, 0x4d, 0x09, 0xb1, 0x0e, + 0x25, 0x27, 0xe2, 0x9f, 0xc0, 0x70, 0x82, 0xe2, 0x83, 0x70, 0xba, 0xd6, 0x8b, 0xb9, 0xff, 0x57, + 0xed, 0xe7, 0x01, 0x22, 0x95, 0xf4, 0x8b, 0x36, 0x9c, 0x12, 0x4c, 0x4f, 0x0f, 0x8f, 0xf1, 0x0f, + 0xba, 0x95, 0xb0, 0x71, 0x5b, 0xf1, 0x49, 0xb5, 0xc1, 0x28, 0x31, 0x17, 0xbb, 0x7c, 0xa8, 0xcd, + 0x40, 0x98, 0xf9, 0x59, 0xfc, 0xc6, 0xa6, 0x5e, 0x75, 0x60, 0x83, 0x57, 0x57, 0x33, 0xa5, 0xe1, + 0xdb, 0x2a, 0xe0, 0xa4, 0xc2, 0xfa, 0x68, 0xb6, 0xc8, 0x0b, 0x58, 0x21, 0x9c, 0x91, 0x22, 0x24, + 0xea, 0xc9, 0xe6, 0x10, 0xcd, 0xbb, 0x4b, 0x5e, 0x2f, 0xc9, 0x71, 0x16, 0x6b, 0x4e, 0x52, 0xe5, + 0x7e, 0x38, 0x4c, 0xf6, 0xf6, 0x5c, 0xa8, 0x93, 0x68, 0x76, 0x98, 0xe3, 0xf9, 0x23, 0x34, 0x3c, + 0xb2, 0x41, 0xed, 0xd9, 0x45, 0xcc, 0xf3, 0x7f, 0x2a, 0x4b, 0xca, 0xae, 0x57, 0xf2, 0xb7, 0x97, + 0xd2, 0x8f, 0xa5, 0xec, 0x7c, 0x5a, 0x48, 0xf3, 0x35, 0xde, 0x47, 0x8c, 0x28, 0x77, 0x18, 0xeb, + 0x0b, 0x5d, 0x7c, 0x60, 0x43, 0xf7, 0x03, 0x6d, 0xa0, 0x3d, 0xdc, 0xc6, 0x49, 0x10, 0xf7, 0x7d, + 0x22, 0x11, 0x72, 0x57, 0xd0, 0x03, 0x50, 0xf6, 0x1c, 0xa8, 0xbf, 0x37, 0x76, 0x13, 0xed, 0xd7, + 0x01, 0x7d, 0x85, 0x64, 0x5a, 0x06, 0x7c, 0x9f, 0x7d, 0x70, 0x47, 0xf8, 0x6c, 0x4a, 0xf4, 0xa6, + 0xf5, 0x21, 0xe0, 0x2d, 0x76, 0x61, 0x3e, 0x91, 0x8d, 0xfc, 0x92, 0x43, 0xf9, 0x0b, 0x2b, 0x2a, + 0xb7, 0xb1, 0xc0, 0x74, 0x3e, 0x8b, 0x85, 0x0f, 0xa5, 0xd5, 0xee, 0x78, 0x15, 0x3d, 0x8d, 0xfa, + 0xe5, 0xde, 0xc0, 0xf3, 0x3d, 0x7c, 0x05, 0xaa, 0x3f, 0x5e, 0xdd, 0xe6, 0xf6, 0x57, 0xeb, 0xd3, + 0x45, 0x79, 0xc9, 0x23, 0x1b, 0x2b, 0x6d, 0x57, 0x1a, 0x13, 0x83, 0x92, 0x5a, 0x23, 0x8c, 0xb9, + 0xc3, 0x46, 0x71, 0xab, 0x98, 0xe6, 0xda, 0xbd, 0xdf, 0x2a, 0xbe, 0x37, 0xe8, 0x12, 0xdd, 0xfe, + 0xd2, 0x22, 0x27, 0x46, 0xb0, 0xa4, 0xe1, 0xb0, 0x39, 0x71, 0x74, 0x56, 0x08, 0x40, 0x00, 0x5b, + 0x20, 0x84, 0xc1, 0xd1, 0xed, 0x5d, 0x34, 0x1e, 0x54, 0x42, 0xba, 0xd7, 0xb7, 0xb9, 0x4a, 0x58, + 0x34, 0xac, 0xe1, 0xfd, 0x7a, 0x5b, 0x72, 0xfb, 0xfa, 0xc0, 0xff, 0xba, 0xd0, 0x3d, 0xc8, 0xb3, + 0x7c, 0xbf, 0x59, 0x8e, 0x56, 0x4b, 0x6f, 0x92, 0xf1, 0x4f, 0x8c, 0x52, 0x5b, 0xe5, 0x32, 0x44, + 0xbf, 0x26, 0xf1, 0xa0, 0x2a, 0x46, 0x8d, 0x32, 0x2f, 0xaf, 0x19, 0x4c, 0x96, 0xc7, 0xbf, 0x64, + 0xd6, 0xa7, 0x93, 0x3e, 0x5e, 0xc1, 0x20, 0x8a, 0x1a, 0x9c, 0xbf, 0x34, 0xc7, 0x2f, 0x3a, 0xd3, + 0xb1, 0x34, 0xe9, 0xe0, 0x43, 0x07, 0x3c, 0x56, 0x60, 0x92, 0xdb, 0x27, 0x2d, 0x55, 0x98, 0x79, + 0x70, 0x47, 0xb9, 0xb6, 0xc6, 0x82, 0xc9, 0xf7, 0x26, 0xb9, 0x32, 0x31, 0xd7, 0x94, 0x2c, 0x0c, + 0x19, 0x35, 0xef, 0xd9, 0x33, 0xfb, 0x4d, 0xbe, 0x5c, 0xf1, 0x90, 0xad, 0x22, 0x32, 0xad, 0x8d, + 0x76, 0xc4, 0xac, 0x08, 0xd0, 0xb9, 0x0b, 0xfa, 0x11, 0xfe, 0xf5, 0x11, 0xdb, 0x45, 0xb7, 0x7f, + 0x70, 0x51, 0xe6, 0x97, 0x9e, 0xa8, 0x4e, 0xe0, 0x7b, 0x79, 0x80, 0x96, 0xc8, 0xe4, 0x2a, 0xf0, + 0xf5, 0x61, 0xce, 0xf4, 0x9a, 0x88, 0x75, 0x52, 0x0f, 0x80, 0x0d, 0xb8, 0x60, 0x90, 0xf5, 0x30, + 0x0a, 0x84, 0x7e, 0x2f, 0x77, 0x6e, 0xc6, 0xb3, 0x3b, 0xf0, 0x91, 0x66, 0x57, 0x2e, 0x8a, 0x2b, + 0xa1, 0xf8, 0xcf, 0xe7, 0xb7, 0xb3, 0x59, 0x1c, 0x11, 0x94, 0x72, 0xe7, 0xf6, 0x6d, 0xba, 0x9d, + 0x6f, 0xe1, 0x38, 0x58, 0x04, 0xe3, 0x1c, 0x32, 0x5d, 0x1b, 0x59, 0x9f, 0x9e, 0x12, 0xf4, 0x3f, + 0xaf, 0xa3, 0xf8, 0xad, 0xc5, 0xf0, 0x33, 0xc8, 0x0f, 0x6b, 0x08, 0x0e, 0x08, 0x96, 0x0f, 0x17, + 0xba, 0xd9, 0x22, 0x59, 0x94, 0x51, 0xfc, 0xb8, 0x91, 0xf4, 0xd9, 0x2a, 0xf1, 0x13, 0xb4, 0xc0, + 0x82, 0xa8, 0x4a, 0xe8, 0xad, 0x25, 0x36, 0x9d, 0x22, 0x46, 0x96, 0xee, 0x15, 0x05, 0x3f, 0x23, + 0xcb, 0xb0, 0xbd, 0xda, 0x1d, 0x95, 0xd4, 0x68, 0x95, 0xb2, 0x7a, 0xad, 0xaa, 0x75, 0x5d, 0x8b, + 0xe6, 0xb5, 0x63, 0xfa, 0x32, 0xab, 0x19, 0xea, 0xd7, 0x83, 0xc3, 0x6f, 0x49, 0xdf, 0xf6, 0xa5, + 0x56, 0x20, 0x24, 0x49, 0x82, 0x41, 0x35, 0xea, 0xe1, 0x7d, 0x9e, 0xd6, 0x70, 0x6b, 0x70, 0xf8, + 0xce, 0x08, 0x26, 0x8e, 0xf4, 0x48, 0x0b, 0x04, 0x66, 0xfe, 0x86, 0x80, 0xf9, 0x71, 0xc4, 0x65, + 0x13, 0x33, 0xb0, 0xa3, 0xe9, 0xe9, 0xe5, 0x05, 0xc8, 0x15, 0xf2, 0x21, 0x84, 0x8f, 0x1e, 0xad, + 0x5f, 0x30, 0x4b, 0xb0, 0xf4, 0x3a, 0xb2, 0xfe, 0xe8, 0x1d, 0xb4, 0x22, 0x03, 0x9d, 0xaf, 0x03, + 0xde, 0xbf, 0x78, 0x81, 0xed, 0x59, 0x94, 0x69, 0xae, 0x3c, 0xeb, 0x58, 0xe4, 0x2f, 0x96, 0x46, + 0xa1, 0x5b, 0x59, 0x34, 0xdd, 0x51, 0x60, 0x67, 0x5b, 0xd0, 0x6d, 0xb6, 0xd6, 0xde, 0xe8, 0xc6, + 0x0d, 0x0e, 0x07, 0x25, 0x48, 0x06, 0x1b, 0x1c, 0x36, 0x84, 0xd7, 0x53, 0x5a, 0xf0, 0x46, 0x4c, + 0x8d, 0xef, 0x21, 0x65, 0xed, 0x1c, 0xf1, 0xa1, 0x52, 0xb8, 0x40, 0xc5, 0x1a, 0xf2, 0x8d, 0xfa, + 0xc0, 0xb6, 0xd0, 0x59, 0x4e, 0x05, 0x54, 0x57, 0x6f, 0x42, 0x60, 0x39, 0x49, 0x54, 0x14, 0x74, + 0x40, 0xd1, 0x10, 0xf6, 0x2b, 0x66, 0x19, 0xd6, 0x63, 0x31, 0xa1, 0x49, 0x26, 0x67, 0xd1, 0xef, + 0x39, 0xeb, 0x57, 0x4a, 0x7d, 0x8e, 0xae, 0x93, 0xca, 0x78, 0x34, 0xc1, 0xdb, 0xc9, 0xed, 0xc4, + 0x2e, 0xfe, 0x6f, 0xc4, 0x7e, 0x25, 0xca, 0x53, 0x92, 0xe3, 0x95, 0x89, 0x58, 0xcb, 0xb6, 0x10, + 0x1c, 0x8a, 0x71, 0xb6, 0x12, 0xf8, 0x43, 0x0d, 0xe9, 0x4a, 0xdf, 0x7b, 0x49, 0xac, 0x46, 0xeb, + 0x37, 0x83, 0x6c, 0x2c, 0x6a, 0x94, 0x0d, 0xc8, 0xac, 0x01, 0x15, 0xb4, 0x21, 0x1c, 0xb7, 0xe1, + 0xd3, 0xa0, 0x0a, 0xc4, 0x37, 0x59, 0x13, 0xa8, 0xb1, 0x05, 0x9f, 0xf1, 0x43, 0x1d, 0x9f, 0xd1, + 0x12, 0x93, 0x7c, 0x51, 0x8a, 0x0e, 0x98, 0x46, 0x28, 0x06, 0x1d, 0x7a, 0x32, 0x35, 0xa7, 0x05, + 0x4c, 0xa2, 0xc4, 0x6a, 0xaa, 0x9d, 0x85, 0xb6, 0xc2, 0x73, 0x2c, 0x9a, 0x78, 0x8e, 0x12, 0xd5, + 0x51, 0x01, 0x52, 0x6d, 0xc6, 0x06, 0x20, 0xf8, 0x41, 0xf0, 0x64, 0x86, 0x58, 0x18, 0x06, 0xf8, + 0x9c, 0x1a, 0xa8, 0x7c, 0xd8, 0x86, 0x1f, 0x00, 0x6a, 0x7a, 0xa2, 0xf8, 0x5b, 0x37, 0x22, 0x09, + 0xa8, 0xad, 0x5a, 0x86, 0xf3, 0xb8, 0x47, 0xa3, 0x25, 0x58, 0x61, 0xfd, 0x2d, 0x2c, 0x42, 0x03, + 0x23, 0x0f, 0x13, 0xe7, 0xb7, 0x58, 0x71, 0xc9, 0xb2, 0x1a, 0xfd, 0x16, 0xb7, 0x55, 0xe8, 0xd9, + 0xa8, 0x6d, 0x21, 0x9d, 0x3b, 0xa3, 0x7e, 0x1c, 0xe1, 0xec, 0x8e, 0xe8, 0x4e, 0x19, 0x06, 0x01, + 0x5e, 0x10, 0x32, 0x31, 0xc5, 0x22, 0xe8, 0x5a, 0x89, 0xa1, 0xdb, 0xc9, 0x0f, 0x09, 0x9b, 0x94, + 0x36, 0xe1, 0x5d, 0xb5, 0x09, 0xe3, 0xae, 0xbb, 0xab, 0x34, 0x92, 0x4f, 0x9f, 0xb8, 0x50, 0xc0, + 0x89, 0x73, 0x0e, 0xbd, 0xd5, 0xcb, 0xf4, 0xa9, 0x16, 0x14, 0xf0, 0x34, 0x77, 0x02, 0xec, 0x01, + 0xe7, 0xaf, 0x77, 0x48, 0x0a, 0x06, 0xaa, 0x49, 0xef, 0x7e, 0x51, 0xce, 0x7b, 0x74, 0x47, 0x0f, + 0xa5, 0xfe, 0x0d, 0x16, 0x68, 0xf9, 0x8a, 0x44, 0x86, 0x55, 0x5b, 0xcd, 0xf6, 0x69, 0x51, 0x53, + 0x61, 0xe0, 0xe7, 0xab, 0xc2, 0x28, 0x31, 0x58, 0xe5, 0xa7, 0xa7, 0xf2, 0xf3, 0x54, 0xaf, 0x96, + 0x5e, 0xc8, 0xd2, 0x43, 0xce, 0x66, 0x7c, 0xe8, 0x8c, 0xbe, 0x3f, 0x3b, 0xed, 0x41, 0xff, 0xdd, + 0x8c, 0x93, 0x2b, 0xc1, 0x44, 0x09, 0x03, 0x63, 0x9c, 0x47, 0x63, 0x95, 0x62, 0x9c, 0x2d, 0x1a, + 0x74, 0x17, 0x94, 0x18, 0x3e, 0x90, 0x85, 0x4e, 0xc6, 0x1f, 0xb5, 0x17, 0x37, 0xe0, 0xc5, 0x0d, + 0xd0, 0x28, 0x57, 0x54, 0xad, 0xfb, 0x6c, 0xef, 0xe6, 0x1b, 0x50, 0x61, 0x71, 0x7c, 0x94, 0x69, + 0xef, 0xf4, 0x75, 0x97, 0xd6, 0x64, 0xf6, 0xa7, 0xab, 0xba, 0x0a, 0xa5, 0x95, 0x26, 0x6a, 0x16, + 0xe8, 0xa1, 0x2b, 0xae, 0x3a, 0x1d, 0xbe, 0xf0, 0x49, 0x75, 0x1a, 0x68, 0xd5, 0x09, 0xfb, 0x37, + 0x0a, 0xe0, 0xa4, 0xff, 0x96, 0x5d, 0x26, 0x9d, 0xf5, 0xdd, 0x6a, 0xd4, 0xa1, 0x08, 0x60, 0xf3, + 0xaf, 0xd7, 0x05, 0xd0, 0xf9, 0xff, 0x4c, 0xa8, 0x02, 0xca, 0xc6, 0xbd, 0xd2, 0x6a, 0xa5, 0x6c, + 0xd2, 0x58, 0x77, 0x8e, 0xea, 0x2c, 0x04, 0xdc, 0xed, 0x2e, 0x91, 0x9a, 0x62, 0x77, 0x2f, 0xda, + 0xdb, 0xbd, 0x8a, 0x62, 0x1b, 0x4e, 0xfa, 0xac, 0x4f, 0xe1, 0x1b, 0xa3, 0x49, 0x0b, 0x48, 0xea, + 0xdd, 0x60, 0x77, 0x53, 0x43, 0xe8, 0x99, 0x6d, 0x09, 0xdd, 0xad, 0x98, 0xe4, 0xad, 0x03, 0xe1, + 0x7e, 0x9c, 0xab, 0x2a, 0x39, 0x93, 0x4c, 0x70, 0x00, 0x4d, 0x59, 0x77, 0xe2, 0x77, 0x03, 0xb4, + 0xae, 0xea, 0x6e, 0xaf, 0x1f, 0x30, 0x2a, 0xb0, 0x5a, 0x8e, 0x5c, 0x9a, 0x31, 0x8f, 0xba, 0x4d, + 0x4f, 0x88, 0x25, 0xbd, 0xa8, 0x85, 0x69, 0x4b, 0xd8, 0x51, 0x87, 0x6d, 0xbe, 0x84, 0x30, 0x73, + 0x1f, 0x27, 0x69, 0x29, 0xb8, 0x5a, 0x6d, 0x0f, 0x44, 0x81, 0x9e, 0xe2, 0x45, 0x5d, 0xf6, 0x57, + 0x49, 0x45, 0x6d, 0x6e, 0xdd, 0xa4, 0x0e, 0xda, 0xf7, 0x5d, 0xc5, 0xfb, 0xcd, 0x81, 0x7c, 0x32, + 0x1f, 0x57, 0x7f, 0x17, 0x8e, 0xdf, 0xb3, 0x74, 0x7a, 0x8b, 0x37, 0xab, 0xa5, 0x7a, 0xe2, 0x46, + 0x90, 0xa4, 0x70, 0xfc, 0xb9, 0x42, 0x87, 0x9a, 0x88, 0x5e, 0x79, 0xb1, 0x57, 0xdb, 0x84, 0x51, + 0x06, 0x91, 0x45, 0x10, 0xf9, 0x82, 0x6d, 0x7c, 0xc3, 0x38, 0x8d, 0x12, 0xf2, 0x35, 0x91, 0xd7, + 0xb8, 0x59, 0xf1, 0xa3, 0xf0, 0xff, 0x6a, 0x6f, 0x08, 0x38, 0x6c, 0x36, 0x0e, 0xcb, 0xda, 0x56, + 0x57, 0xb6, 0x82, 0x25, 0xc2, 0xa2, 0x8f, 0xdf, 0x1b, 0x57, 0x8e, 0xcc, 0x8c, 0x87, 0x5f, 0xb4, + 0xc5, 0xfe, 0x58, 0x73, 0x29, 0xe8, 0xfb, 0xba, 0x97, 0xfe, 0x97, 0x0e, 0xa3, 0xb6, 0xdd, 0x86, + 0xcb, 0xab, 0x76, 0x04, 0x44, 0x93, 0x8e, 0x9e, 0x75, 0x9e, 0xe4, 0x58, 0xd4, 0x67, 0x12, 0xe7, + 0x8b, 0xba, 0xa1, 0x47, 0x43, 0x3a, 0xa2, 0x99, 0x4d, 0xe1, 0x40, 0xcb, 0x0b, 0xa0, 0xb6, 0xe3, + 0x04, 0x25, 0x72, 0xab, 0x6e, 0x3e, 0x2c, 0xc5, 0x31, 0x80, 0x5c, 0xbd, 0x6b, 0x0f, 0x0f, 0xf1, + 0x3e, 0x0c, 0x33, 0x36, 0xab, 0x84, 0x21, 0x6f, 0xf3, 0x55, 0x43, 0xd9, 0xba, 0x1b, 0x37, 0x59, + 0xea, 0x1e, 0x8b, 0xb7, 0xb5, 0x11, 0xe7, 0xf5, 0x6d, 0x4e, 0xce, 0x8b, 0x1d, 0xd2, 0xbe, 0xd7, + 0x36, 0x8e, 0x8e, 0x08, 0x7f, 0x00, 0xe1, 0xf6, 0x06, 0xd5, 0x46, 0x85, 0xa9, 0x2e, 0x7e, 0x0e, + 0x5d, 0xbc, 0xf2, 0x7e, 0xc9, 0x5e, 0xc6, 0x2d, 0x35, 0x47, 0xc9, 0x2b, 0xd6, 0xf0, 0x6f, 0x5e, + 0xbc, 0x38, 0x3a, 0x10, 0xcb, 0xb8, 0x7f, 0x70, 0x08, 0x1b, 0x6f, 0x94, 0xc1, 0x1f, 0x03, 0x7e, + 0x5c, 0x26, 0x03, 0x5d, 0x63, 0x18, 0x68, 0x35, 0xa6, 0x6e, 0xa0, 0x7b, 0x36, 0x40, 0xca, 0xf8, + 0xa2, 0xbd, 0xb6, 0xbf, 0x47, 0x05, 0x4c, 0x8b, 0xaa, 0x2a, 0xe8, 0x0a, 0xf8, 0xed, 0x15, 0x78, + 0xbf, 0x99, 0xfc, 0x96, 0x39, 0x70, 0x65, 0x35, 0x56, 0x8c, 0xc1, 0xe6, 0xc6, 0xb1, 0xcd, 0x18, + 0x6c, 0x70, 0x11, 0x28, 0xcd, 0xb9, 0x36, 0x38, 0xf4, 0x95, 0x5d, 0xc7, 0x3d, 0x8c, 0x5c, 0xb4, + 0xb3, 0x77, 0xb7, 0x37, 0x68, 0xb0, 0x67, 0xee, 0x87, 0xbf, 0xa6, 0xb7, 0xbd, 0x24, 0x82, 0x73, + 0xd5, 0xb8, 0xec, 0x81, 0xf2, 0x08, 0xca, 0xd9, 0xa1, 0x3c, 0xfd, 0x17, 0xa8, 0x26, 0x60, 0xf2, + 0xde, 0x58, 0x6b, 0x6e, 0x3b, 0x12, 0x3c, 0xed, 0x3f, 0xbb, 0xf2, 0xab, 0x7b, 0xc7, 0x81, 0xef, + 0xb3, 0x5d, 0x80, 0x2c, 0x0d, 0xd6, 0xed, 0x13, 0xb7, 0x46, 0xfb, 0x6a, 0x49, 0x16, 0xdb, 0x82, + 0xde, 0x14, 0xfe, 0x53, 0x8b, 0x3b, 0xdf, 0xc3, 0x97, 0x5d, 0xe9, 0x05, 0xbe, 0x88, 0x4a, 0xbc, + 0xae, 0x65, 0x75, 0xec, 0x66, 0xb3, 0x2a, 0x41, 0x5a, 0x5a, 0xb6, 0x4b, 0xe1, 0xe0, 0xf7, 0xfd, + 0x6c, 0x63, 0xd7, 0xa6, 0xb8, 0x19, 0x9c, 0x18, 0xca, 0x20, 0x8e, 0x66, 0xe5, 0x70, 0xd3, 0x95, + 0xf2, 0x4c, 0x5a, 0x8d, 0xd4, 0x58, 0xdd, 0xb0, 0xe0, 0xb8, 0xb5, 0x64, 0xb2, 0xa9, 0x6c, 0x5e, + 0xb4, 0x1c, 0xa0, 0x86, 0xb0, 0x9c, 0x39, 0x70, 0x91, 0xe2, 0x1f, 0xd5, 0x81, 0xd2, 0xe4, 0x11, + 0xc1, 0x18, 0xe0, 0x87, 0xe6, 0x4b, 0x8b, 0xb1, 0xbb, 0x6c, 0xc3, 0x39, 0x92, 0xb1, 0x0f, 0xdb, + 0x62, 0x8b, 0x17, 0x49, 0x32, 0x91, 0x25, 0x0d, 0x71, 0xf5, 0x45, 0xca, 0x27, 0x9b, 0x5c, 0xfb, + 0x8e, 0x61, 0x6c, 0x9f, 0x68, 0x60, 0xbe, 0x0f, 0x01, 0x65, 0xbc, 0x0f, 0x81, 0x78, 0xa6, 0x35, + 0x00, 0x3a, 0x4d, 0x74, 0x48, 0x42, 0x84, 0xf4, 0xb8, 0xd2, 0xa3, 0xf4, 0x18, 0x18, 0x06, 0xad, + 0x28, 0xc7, 0x32, 0x18, 0xc9, 0x88, 0x11, 0xf3, 0x73, 0x7c, 0x4d, 0xcb, 0x3f, 0x77, 0xe7, 0x33, + 0xd7, 0xcd, 0xba, 0xd1, 0x90, 0xff, 0x3a, 0xb8, 0xb8, 0xac, 0x6a, 0xcf, 0x2e, 0x05, 0xd1, 0x08, + 0x3e, 0xbd, 0xc4, 0x72, 0xaf, 0x05, 0xfa, 0x34, 0x3a, 0x08, 0x17, 0xf8, 0xb6, 0x15, 0x5f, 0x97, + 0x88, 0xa6, 0xad, 0xdc, 0x21, 0xf7, 0xe8, 0x2b, 0x1b, 0x85, 0xbd, 0x79, 0xf8, 0xdc, 0xb2, 0x0a, + 0x38, 0xcf, 0x55, 0xa8, 0xfe, 0xc9, 0xe7, 0xfb, 0x61, 0xe4, 0xad, 0x2e, 0x52, 0xa0, 0x0e, 0x33, + 0xcf, 0x5f, 0x2c, 0x96, 0x18, 0x1a, 0x28, 0x3f, 0x0b, 0x8a, 0x90, 0x33, 0x9d, 0x58, 0x6e, 0xc1, + 0x92, 0xdb, 0xc6, 0x1e, 0x5c, 0xba, 0x1b, 0x95, 0x67, 0x5b, 0xb1, 0x16, 0x82, 0x33, 0x59, 0x07, + 0xc1, 0x89, 0xd7, 0x28, 0xfe, 0x4e, 0x28, 0xaf, 0xc0, 0x63, 0xab, 0x20, 0xe8, 0x60, 0x76, 0xc3, + 0x34, 0xb6, 0x51, 0x26, 0x17, 0xec, 0x93, 0x8d, 0x9d, 0x69, 0xd5, 0xca, 0x5b, 0x58, 0xdf, 0xb2, + 0xfb, 0xdc, 0x42, 0x8f, 0x32, 0x14, 0xe4, 0xc8, 0x0a, 0x8e, 0x4f, 0x6a, 0x59, 0x73, 0x25, 0x41, + 0xe9, 0x91, 0xaf, 0x1d, 0x76, 0x05, 0xde, 0xa8, 0x34, 0xdc, 0x77, 0x0a, 0xa4, 0x5f, 0x49, 0xa0, + 0x43, 0xee, 0x82, 0xd8, 0xbb, 0x59, 0x04, 0x63, 0x0f, 0xbd, 0xd4, 0xbd, 0x49, 0xbe, 0x08, 0x5a, + 0xeb, 0x4d, 0x8c, 0x34, 0x1a, 0x9e, 0x14, 0x7a, 0x23, 0xad, 0xaa, 0x61, 0x0d, 0xe0, 0x94, 0xa1, + 0x4c, 0x4e, 0x37, 0x40, 0x99, 0xbc, 0x5a, 0x8f, 0x32, 0xe9, 0x65, 0xed, 0x71, 0xd2, 0x99, 0xe9, + 0x86, 0x9c, 0xc6, 0x1e, 0xe4, 0x1c, 0x4e, 0x3d, 0xf1, 0x37, 0xe4, 0x10, 0x5e, 0xc9, 0xbf, 0xd3, + 0x59, 0x98, 0x55, 0xe2, 0x4f, 0x18, 0x19, 0xf4, 0x0a, 0x48, 0x10, 0x68, 0x46, 0xb6, 0x63, 0x75, + 0xce, 0x6f, 0x98, 0xa5, 0xb7, 0xd5, 0xea, 0x31, 0x24, 0x99, 0xec, 0x6b, 0xc3, 0xa7, 0x06, 0x29, + 0x0a, 0xc3, 0x45, 0xde, 0xe2, 0x37, 0xae, 0x58, 0x39, 0xf2, 0x6a, 0xc2, 0xc6, 0x54, 0x7c, 0x5c, + 0xe0, 0x43, 0xc0, 0xa7, 0xa7, 0x78, 0x44, 0x18, 0xbe, 0xae, 0x4c, 0x10, 0x52, 0xb0, 0xc6, 0xcf, + 0x1f, 0x1f, 0x27, 0x22, 0xda, 0x78, 0x94, 0x50, 0x34, 0x73, 0xcf, 0x0e, 0xbf, 0x74, 0xb4, 0x5a, + 0xbf, 0x93, 0x61, 0x69, 0xfc, 0xf4, 0xb4, 0xd3, 0x08, 0x47, 0x8e, 0x22, 0xf7, 0x4a, 0xcd, 0x43, + 0x81, 0xad, 0x2f, 0x5e, 0x35, 0xb5, 0x8e, 0xab, 0xb8, 0x63, 0x5c, 0xc5, 0x38, 0xae, 0xc6, 0x62, + 0x6c, 0x68, 0x18, 0x5a, 0xbb, 0x05, 0x11, 0x7d, 0xd6, 0xb3, 0x1b, 0x0e, 0xd1, 0x66, 0x25, 0x8a, + 0xa8, 0xa1, 0xc3, 0x51, 0xed, 0x94, 0x37, 0xdb, 0x8e, 0x72, 0x3f, 0x2e, 0x45, 0x03, 0x2c, 0x46, + 0x25, 0x35, 0x80, 0xf4, 0xfd, 0x40, 0x34, 0x21, 0x95, 0x38, 0xa4, 0x28, 0x14, 0x3d, 0x57, 0xcd, + 0x9a, 0xcb, 0x66, 0xe5, 0xd1, 0x59, 0x13, 0xc3, 0x97, 0x61, 0x2a, 0x86, 0x11, 0xf1, 0xc4, 0x87, + 0x0b, 0x4f, 0xfd, 0x4c, 0xb3, 0x5f, 0xc3, 0x46, 0x85, 0x17, 0x58, 0xe1, 0xbc, 0xfa, 0x7f, 0x31, + 0x15, 0x52, 0x36, 0x15, 0x52, 0x36, 0x15, 0x52, 0x3d, 0x15, 0x3c, 0xc1, 0xc2, 0x2e, 0x02, 0xca, + 0x2c, 0xec, 0x42, 0x9f, 0x45, 0x4f, 0x1a, 0xed, 0xfb, 0x65, 0x4d, 0x94, 0xd4, 0x82, 0xfc, 0xd2, + 0xeb, 0xb6, 0xa1, 0x8f, 0x3a, 0x69, 0xd3, 0x65, 0x41, 0x71, 0x9d, 0xa3, 0x9d, 0xeb, 0x06, 0x36, + 0xbc, 0x05, 0x28, 0xfc, 0xe6, 0xd2, 0x00, 0xbe, 0xc8, 0xab, 0x75, 0xd8, 0x9d, 0x77, 0xf0, 0xd6, + 0x5c, 0x65, 0xb5, 0xbf, 0xef, 0x75, 0xed, 0x06, 0x38, 0xf4, 0x7c, 0x58, 0xf6, 0xad, 0x2d, 0x04, + 0x19, 0xe0, 0x57, 0x6c, 0x21, 0xb8, 0xd4, 0x75, 0xae, 0xd1, 0xd6, 0x16, 0xa2, 0xc8, 0xe4, 0x57, + 0xe4, 0xf5, 0xab, 0x9d, 0xd5, 0xaf, 0xdd, 0x39, 0xfd, 0x65, 0xb1, 0x22, 0x1f, 0x58, 0x78, 0xbb, + 0xb6, 0x86, 0x66, 0x3e, 0xab, 0x04, 0xba, 0xb1, 0x05, 0xba, 0x59, 0x25, 0xd0, 0xe0, 0x70, 0x55, + 0x46, 0x83, 0x43, 0x3b, 0xa7, 0x01, 0xa9, 0x52, 0xd2, 0x38, 0x73, 0x8a, 0x76, 0x83, 0x7a, 0x86, + 0xe7, 0xab, 0x6a, 0x58, 0xd8, 0x35, 0x2c, 0x16, 0xeb, 0x72, 0x7b, 0x9f, 0xad, 0xc8, 0xad, 0xcc, + 0x82, 0xae, 0x11, 0xdb, 0x90, 0x2a, 0xba, 0x3e, 0xbb, 0xcf, 0x57, 0xe4, 0x05, 0xfb, 0xdd, 0xce, + 0x16, 0x1b, 0x6c, 0x4b, 0xfe, 0x3f, 0xe4, 0xab, 0x6a, 0xbe, 0xd1, 0x56, 0x6a, 0xbf, 0x68, 0xd2, + 0x54, 0xd8, 0xea, 0x09, 0x2f, 0x53, 0xbf, 0x96, 0xf8, 0xa0, 0xcb, 0x29, 0x1d, 0x58, 0x5a, 0x05, + 0x32, 0x0e, 0x39, 0x6f, 0x08, 0xc5, 0x0b, 0x4e, 0x63, 0x91, 0x67, 0x1e, 0x94, 0x45, 0xec, 0x3d, + 0xa8, 0x7c, 0x0e, 0xd6, 0x78, 0x65, 0xd6, 0x87, 0x6c, 0x63, 0x38, 0x62, 0x0d, 0x60, 0x12, 0xad, + 0x50, 0xcb, 0xca, 0x1f, 0xff, 0xae, 0x85, 0x11, 0xef, 0x5e, 0xc3, 0xe8, 0x84, 0x61, 0x35, 0xd4, + 0x71, 0x17, 0x76, 0x15, 0xee, 0x42, 0x1d, 0x89, 0x32, 0x90, 0xdd, 0xb4, 0xab, 0xe9, 0xdf, 0xea, + 0x49, 0x3f, 0x74, 0x25, 0xbd, 0xe0, 0xde, 0xe0, 0x97, 0x1c, 0x21, 0xdb, 0x6f, 0x59, 0x20, 0x66, + 0x0f, 0xa6, 0xd5, 0x61, 0xd5, 0x9c, 0x3d, 0x5c, 0x45, 0x33, 0xa8, 0x65, 0xad, 0xf7, 0x14, 0x4a, + 0xe9, 0x76, 0x75, 0x53, 0x54, 0x42, 0xad, 0x88, 0xa5, 0x9b, 0xd4, 0x70, 0x65, 0x06, 0xdb, 0xd5, + 0x13, 0x92, 0x05, 0x51, 0xbd, 0x5a, 0x38, 0x22, 0x6b, 0x03, 0xb2, 0x31, 0x0c, 0x9b, 0x90, 0x63, + 0x6e, 0x7d, 0x68, 0x23, 0x3a, 0x4a, 0xbf, 0x6d, 0x60, 0x17, 0x0f, 0xad, 0x79, 0x59, 0x58, 0x4b, + 0x8d, 0x99, 0xa2, 0xb1, 0x96, 0x5a, 0xb3, 0x5c, 0xb4, 0x67, 0xd9, 0x00, 0x68, 0x6a, 0x64, 0x2b, + 0x1e, 0xb4, 0x42, 0x0f, 0x4a, 0xe4, 0x35, 0x3c, 0xb2, 0x3d, 0x3d, 0x45, 0xa3, 0x23, 0xd7, 0x9e, + 0x37, 0x55, 0x55, 0xd7, 0xf6, 0x15, 0x3a, 0x13, 0x61, 0x99, 0xc8, 0xad, 0xf3, 0x88, 0x7a, 0x5f, + 0x4c, 0xa7, 0xe9, 0x51, 0x58, 0xe0, 0x9b, 0x7f, 0x13, 0x70, 0x08, 0x01, 0xf2, 0xcf, 0x41, 0x58, + 0xd4, 0xe7, 0x8b, 0x25, 0x96, 0x40, 0x51, 0x41, 0xb1, 0x18, 0x2a, 0x5c, 0x5d, 0xb6, 0x42, 0xcb, + 0x26, 0x0b, 0x2e, 0xc4, 0x0e, 0x7d, 0x14, 0xee, 0xec, 0x94, 0xb2, 0x68, 0x19, 0x74, 0x48, 0x41, + 0xf2, 0xc7, 0x00, 0x7f, 0x58, 0xc5, 0x17, 0xb5, 0xe2, 0xdf, 0xa6, 0xcd, 0x35, 0x0f, 0xe7, 0x79, + 0x54, 0x9f, 0x00, 0xb4, 0xbf, 0xb3, 0x23, 0x1e, 0x02, 0xc1, 0x55, 0x43, 0xf9, 0x0c, 0x57, 0xdd, + 0x36, 0xc3, 0x3a, 0xb1, 0xa3, 0x6f, 0x9e, 0xef, 0x51, 0x7b, 0xe2, 0xbf, 0x0c, 0x98, 0xc5, 0x19, + 0x1a, 0xaa, 0x22, 0xc7, 0x3d, 0x0e, 0x09, 0xde, 0x1d, 0xb3, 0x83, 0x25, 0xb0, 0xf2, 0xa4, 0x0b, + 0xb1, 0xe4, 0x56, 0x29, 0x3d, 0x95, 0xda, 0x35, 0xee, 0x74, 0xbf, 0xc5, 0xe6, 0xef, 0x04, 0x1f, + 0x6e, 0x29, 0xc3, 0x01, 0xc8, 0x46, 0x0b, 0x5c, 0x9a, 0x20, 0x3c, 0xad, 0xc7, 0xb4, 0x8a, 0xb7, + 0xe9, 0x18, 0x1d, 0xba, 0xa5, 0x55, 0xac, 0xe7, 0xec, 0xa9, 0x3b, 0xe3, 0x3d, 0xa7, 0xd7, 0xa7, + 0x07, 0xce, 0xae, 0xb3, 0x62, 0x51, 0xa3, 0xbb, 0x2a, 0x05, 0xc1, 0x09, 0x7d, 0x93, 0x9d, 0xd6, + 0x3d, 0xef, 0xc4, 0x5d, 0x9b, 0x5e, 0xa4, 0x5d, 0xa8, 0xf6, 0xe9, 0xf1, 0x00, 0xc5, 0x81, 0xb8, + 0x5d, 0x57, 0x68, 0xa0, 0xa1, 0x9d, 0x8e, 0x0e, 0x5f, 0xf8, 0x2e, 0xcc, 0xe7, 0x1c, 0xa4, 0x94, + 0x3e, 0xd0, 0xa7, 0xaf, 0x41, 0xe9, 0x81, 0x29, 0x3f, 0x89, 0x7a, 0x78, 0x1d, 0x97, 0xc2, 0x59, + 0x20, 0x2a, 0x0a, 0x7c, 0x18, 0x4a, 0x2a, 0x36, 0x02, 0x2a, 0xf5, 0xb3, 0x77, 0xcc, 0x06, 0x42, + 0xe6, 0x05, 0x59, 0x32, 0x96, 0xf8, 0x2e, 0xec, 0x97, 0x27, 0x8e, 0xf6, 0x3f, 0x76, 0x8c, 0x77, + 0xb5, 0xbb, 0x97, 0x9d, 0x2a, 0xfc, 0xbd, 0xa5, 0x39, 0x8d, 0xb5, 0x59, 0x52, 0xdc, 0xf2, 0x04, + 0x94, 0x5c, 0x65, 0x34, 0x34, 0xbe, 0x7a, 0x5e, 0x21, 0xda, 0x17, 0xff, 0xc5, 0x66, 0x0e, 0x90, + 0xf8, 0x60, 0xc2, 0xa4, 0x21, 0x97, 0x18, 0x76, 0x28, 0x85, 0x81, 0xc8, 0x3f, 0x17, 0xcd, 0xcf, + 0x53, 0xeb, 0xf3, 0x74, 0xfe, 0xb1, 0xe1, 0x6b, 0x29, 0x3d, 0x27, 0x10, 0x40, 0x99, 0xf0, 0x8c, + 0x6a, 0xa1, 0xa2, 0xee, 0x04, 0x35, 0x2c, 0x9d, 0x1d, 0x5a, 0xba, 0x87, 0xc5, 0x44, 0x50, 0x14, + 0x7d, 0x5c, 0x49, 0x58, 0x6e, 0xe3, 0x4c, 0x6f, 0xb4, 0xc3, 0x32, 0x7f, 0x5c, 0x16, 0x1c, 0x64, + 0x33, 0x71, 0x2b, 0xf1, 0xa4, 0x5b, 0x8c, 0x83, 0x02, 0x07, 0x74, 0x98, 0x78, 0x06, 0x16, 0xcb, + 0x3a, 0x20, 0x98, 0x4c, 0xf1, 0xd2, 0xce, 0x62, 0x26, 0x20, 0x2e, 0xc0, 0x97, 0x2f, 0x87, 0x3d, + 0x31, 0x09, 0x7a, 0x64, 0xa3, 0xec, 0x3d, 0xe2, 0x73, 0x69, 0x76, 0xcf, 0xdc, 0x23, 0x4f, 0x72, + 0x01, 0x29, 0xc1, 0x26, 0xce, 0xd2, 0x71, 0x47, 0xfb, 0x83, 0xad, 0x8b, 0x3a, 0x7f, 0x04, 0xdd, + 0xe4, 0x41, 0x02, 0xa0, 0x2d, 0x92, 0xde, 0x54, 0x3c, 0xee, 0xc7, 0xea, 0xf1, 0x42, 0x45, 0x71, + 0x04, 0x0a, 0xd6, 0x98, 0xaa, 0x9f, 0x5a, 0x3d, 0x69, 0xd1, 0xa5, 0x97, 0xcf, 0xd9, 0xf8, 0x3a, + 0x82, 0x81, 0x3d, 0x43, 0x07, 0xb5, 0x9b, 0xf4, 0x6a, 0x31, 0x7b, 0xc4, 0x69, 0x49, 0xcf, 0xa7, + 0xc5, 0xdc, 0x04, 0xb5, 0x49, 0x0c, 0x2c, 0xf8, 0x27, 0xc3, 0x89, 0x17, 0x66, 0xa7, 0x30, 0x46, + 0x92, 0x30, 0x7b, 0x37, 0x64, 0x56, 0x13, 0xe9, 0x58, 0x61, 0x4e, 0xd6, 0x9c, 0xe0, 0xb1, 0x80, + 0x25, 0x02, 0x8e, 0xa6, 0x7c, 0x01, 0x38, 0x1f, 0x13, 0x4e, 0x2f, 0x4e, 0x7c, 0x31, 0xe5, 0xb3, + 0xd3, 0xe6, 0x9c, 0x47, 0x50, 0xd2, 0x83, 0xf4, 0x44, 0xbc, 0x5b, 0xb8, 0xc8, 0x4e, 0x2f, 0x61, + 0xe1, 0xb6, 0x1e, 0x3a, 0x40, 0x90, 0x10, 0xaa, 0x19, 0x9c, 0x36, 0x83, 0xee, 0x9a, 0x41, 0xe8, + 0x7d, 0x08, 0x33, 0xc6, 0x14, 0xb0, 0x4c, 0x82, 0xec, 0x9d, 0x07, 0x03, 0x29, 0x70, 0xba, 0x5a, + 0x0b, 0x91, 0xf2, 0xa2, 0x48, 0xb4, 0x51, 0x12, 0xdd, 0xc7, 0x8f, 0xb4, 0x1e, 0x5d, 0xa9, 0x1e, + 0x3b, 0x70, 0x60, 0xb7, 0xc2, 0xa1, 0x88, 0x33, 0x5f, 0x17, 0x84, 0x43, 0x93, 0x42, 0xb1, 0x4a, + 0xbf, 0xc5, 0xd6, 0x37, 0x68, 0x1c, 0x0c, 0x73, 0x0d, 0xeb, 0x91, 0x82, 0x47, 0xc0, 0xe6, 0x30, + 0x26, 0x6f, 0xaf, 0x8e, 0xa4, 0x90, 0xdd, 0x94, 0x6f, 0xa1, 0x35, 0x43, 0xdf, 0xe3, 0x98, 0x0a, + 0x12, 0x0a, 0x8b, 0x43, 0x1a, 0x08, 0x3f, 0x3f, 0xb5, 0x60, 0x12, 0x01, 0xa1, 0x72, 0xd7, 0xc7, + 0x6f, 0x6a, 0x20, 0xd9, 0xa1, 0xf8, 0x62, 0x95, 0x8f, 0xa2, 0xcd, 0x3d, 0x03, 0x1d, 0x81, 0x07, + 0x4c, 0xd6, 0x50, 0x90, 0x7b, 0x58, 0xcb, 0x77, 0xb0, 0x4d, 0xbe, 0x47, 0x2f, 0x67, 0xc2, 0xcf, + 0x00, 0xcd, 0xf9, 0x66, 0xa5, 0x5c, 0xb9, 0x12, 0xd6, 0x76, 0x57, 0xb3, 0x6f, 0x48, 0x81, 0xec, + 0xbd, 0x55, 0x65, 0x84, 0x7b, 0x79, 0xcd, 0xf9, 0xbf, 0xcd, 0xc0, 0x7d, 0x85, 0x16, 0xbe, 0xa1, + 0xd5, 0x86, 0xd3, 0x64, 0x76, 0xd2, 0xb7, 0xf3, 0xbc, 0x42, 0x4b, 0x6d, 0xe5, 0xda, 0x23, 0x0e, + 0xa1, 0xbb, 0x1a, 0x3d, 0xcc, 0xaf, 0x26, 0x3a, 0x2f, 0x26, 0xc8, 0x13, 0x5d, 0x58, 0xc3, 0xa7, + 0x4d, 0x38, 0xdc, 0x2d, 0x9a, 0xd3, 0x76, 0x9d, 0xd8, 0xc1, 0xb4, 0xac, 0x16, 0xa0, 0x88, 0x59, + 0x16, 0x5d, 0x03, 0xde, 0xb5, 0x44, 0x48, 0xa5, 0x30, 0x1a, 0xb2, 0xd7, 0x37, 0x5d, 0x18, 0xa5, + 0xe8, 0x1c, 0x57, 0xba, 0x6d, 0x37, 0x29, 0x0f, 0x0f, 0x44, 0x60, 0x30, 0x44, 0x62, 0xca, 0x7a, + 0x55, 0xe5, 0x37, 0x1c, 0xe3, 0x67, 0xc4, 0xd3, 0xd0, 0xcf, 0xaf, 0x27, 0xe7, 0x65, 0xde, 0x2f, + 0x19, 0x02, 0x29, 0x4c, 0x11, 0x44, 0x77, 0x42, 0x22, 0x07, 0xd1, 0x0e, 0x6a, 0xa3, 0xa9, 0x53, + 0x1b, 0x78, 0x36, 0x83, 0x86, 0xb4, 0x0d, 0x19, 0xc3, 0x94, 0x85, 0x6a, 0xda, 0x49, 0xd1, 0x41, + 0xdc, 0x1b, 0x35, 0xfc, 0x48, 0x41, 0xe8, 0x03, 0xb3, 0x6e, 0x1e, 0xfa, 0x06, 0xbc, 0x29, 0x7b, + 0x25, 0xc1, 0x22, 0x9d, 0x1c, 0xd6, 0x6c, 0x64, 0x19, 0x5b, 0x82, 0xfe, 0xb8, 0x9c, 0x07, 0xb0, + 0x2d, 0xc3, 0x7f, 0x77, 0x01, 0xde, 0x3a, 0xc0, 0xb1, 0x99, 0x3f, 0x80, 0x78, 0xe1, 0xdb, 0x64, + 0x98, 0x7b, 0x88, 0x5f, 0x77, 0x95, 0x2e, 0xa3, 0x83, 0x39, 0x8f, 0x76, 0xf4, 0x4d, 0x2d, 0x9e, + 0x5b, 0xdd, 0x43, 0x9b, 0x47, 0x7d, 0x0a, 0x1c, 0x4f, 0x8a, 0x3e, 0x24, 0xd8, 0x27, 0x89, 0xdc, + 0x63, 0xcc, 0x42, 0x08, 0x07, 0x81, 0x95, 0x69, 0xcb, 0x48, 0xa0, 0xb5, 0x62, 0x93, 0xa1, 0xab, + 0x47, 0x9d, 0x87, 0x47, 0xb7, 0x9b, 0x7c, 0xab, 0xce, 0x5b, 0x18, 0xba, 0x61, 0x68, 0xd3, 0x9d, + 0x68, 0x94, 0xe3, 0xdc, 0xb3, 0xb9, 0x4e, 0xf4, 0x87, 0x6b, 0xcf, 0x26, 0x3a, 0x31, 0xb8, 0xc8, + 0x62, 0x00, 0x81, 0x3a, 0xcf, 0x8b, 0x98, 0x47, 0x0f, 0xe7, 0x04, 0xa1, 0xc4, 0xf0, 0xd0, 0x06, + 0x0d, 0xfb, 0x7d, 0x6d, 0xc0, 0x5d, 0xe0, 0x88, 0xe4, 0xbd, 0x38, 0x4c, 0xc4, 0x66, 0xb3, 0x07, + 0x7b, 0x65, 0x99, 0x9e, 0xcb, 0x6c, 0xbe, 0x51, 0xf4, 0x29, 0x50, 0xc8, 0x54, 0x4b, 0x52, 0x98, + 0xb0, 0x64, 0xb6, 0x1e, 0x5b, 0xe8, 0xc8, 0x75, 0x24, 0xbf, 0xbc, 0x25, 0xf6, 0x6d, 0xe4, 0x8d, + 0xad, 0x90, 0x62, 0x5c, 0xca, 0x9b, 0x7f, 0x2f, 0x6d, 0x0e, 0x53, 0xde, 0x8c, 0x7f, 0xd2, 0xa2, + 0xc4, 0x16, 0xe4, 0xad, 0x41, 0x9b, 0xe5, 0xc1, 0x3f, 0xeb, 0xe0, 0x14, 0x8e, 0x24, 0x8b, 0x3c, + 0x3d, 0x78, 0x25, 0x24, 0x28, 0xee, 0xde, 0xa7, 0x3f, 0x5d, 0x4f, 0xfa, 0x30, 0xd2, 0x62, 0x18, + 0x69, 0x30, 0xca, 0xd4, 0x58, 0xab, 0xe7, 0x9a, 0x44, 0x0f, 0xea, 0x6d, 0xd8, 0xf9, 0x62, 0x12, + 0x53, 0x63, 0xb7, 0x52, 0xbc, 0x39, 0x1d, 0xb4, 0x71, 0x7f, 0x18, 0x8f, 0xc7, 0xbd, 0xfd, 0xc1, + 0x8b, 0x2f, 0xbd, 0x1e, 0x32, 0xa1, 0x3a, 0x7b, 0x30, 0xaf, 0xf7, 0x1c, 0x0f, 0xff, 0xbd, 0x96, + 0xff, 0x4e, 0x60, 0x0b, 0xc7, 0xe5, 0x68, 0x85, 0x84, 0xe3, 0x36, 0xf9, 0x7e, 0xfe, 0x5d, 0xe4, + 0xf3, 0x7d, 0x7f, 0x33, 0xf9, 0x58, 0xc9, 0x7f, 0xd6, 0x0d, 0xcb, 0x7b, 0xeb, 0x63, 0x14, 0x83, + 0x76, 0x62, 0x66, 0x09, 0x0c, 0x13, 0xf1, 0xc2, 0xd7, 0x5d, 0x0e, 0xe0, 0xb0, 0x27, 0xee, 0xfa, + 0x3e, 0x46, 0x8f, 0x88, 0xdc, 0xff, 0xd5, 0x57, 0x48, 0x4e, 0x40, 0x18, 0x78, 0x7c, 0xe9, 0x94, + 0x4f, 0x82, 0xa3, 0xd6, 0x14, 0xfa, 0x72, 0xc2, 0xa4, 0xd0, 0x99, 0x70, 0x9e, 0x10, 0x3e, 0x64, + 0xa5, 0x5b, 0x96, 0x31, 0x8c, 0xb0, 0xb9, 0xf2, 0x8d, 0x8b, 0x08, 0x9f, 0x42, 0x41, 0xd6, 0x53, + 0xde, 0xf9, 0x03, 0xe2, 0xe6, 0x72, 0x80, 0x41, 0x98, 0x0a, 0x52, 0x61, 0x26, 0x6b, 0xaf, 0x89, + 0x38, 0x9b, 0x8d, 0xc7, 0xbe, 0xef, 0x18, 0x70, 0xc6, 0x15, 0xd3, 0x2c, 0x14, 0x38, 0x8b, 0xa5, + 0x8b, 0x54, 0x75, 0x66, 0x51, 0x39, 0xac, 0x9d, 0x4d, 0xd5, 0xb2, 0x23, 0xb7, 0x4f, 0x04, 0xfa, + 0xd2, 0x83, 0x02, 0x2f, 0x27, 0xa4, 0x75, 0x1f, 0x0e, 0x62, 0xd6, 0xfc, 0x81, 0xf3, 0x6c, 0xe9, + 0x06, 0xb5, 0xa0, 0x57, 0xf3, 0x31, 0x6c, 0x6f, 0x31, 0xb4, 0x47, 0x71, 0x07, 0x1d, 0x09, 0xff, + 0xf9, 0x9d, 0x4b, 0xf6, 0xe7, 0xb0, 0x31, 0xd5, 0x7a, 0x03, 0xfa, 0x62, 0xb5, 0x20, 0x73, 0x6b, + 0x28, 0xfd, 0xc9, 0x98, 0x39, 0xac, 0x7c, 0xce, 0xd7, 0xe6, 0x53, 0x38, 0xad, 0x4b, 0x40, 0x2d, + 0x9f, 0x9f, 0xd7, 0xe6, 0x73, 0xe7, 0xb4, 0xae, 0x19, 0xb5, 0x7c, 0xfe, 0xdc, 0xcc, 0xa7, 0xbf, + 0x14, 0x23, 0x3e, 0x68, 0x9b, 0x19, 0x55, 0x2d, 0x3d, 0x4e, 0x66, 0x6b, 0x94, 0xd6, 0xf6, 0x05, + 0xaf, 0x0c, 0xdb, 0x76, 0x05, 0x79, 0x5d, 0x54, 0xdf, 0x13, 0x86, 0x66, 0xb0, 0x48, 0x82, 0x65, + 0xe5, 0x43, 0x84, 0x2e, 0xb7, 0xee, 0x07, 0xe1, 0xc0, 0xd1, 0x4e, 0x08, 0x5d, 0x1f, 0x9b, 0x79, + 0x18, 0x79, 0xf5, 0xb0, 0x6b, 0x44, 0x9b, 0xaf, 0x85, 0x4d, 0xc2, 0x42, 0x61, 0x97, 0xcb, 0x4f, + 0xb5, 0x2a, 0xfe, 0x62, 0xfb, 0x62, 0x6a, 0x65, 0xc0, 0x6b, 0xd7, 0x7c, 0xca, 0xc6, 0x1c, 0x89, + 0x54, 0x9d, 0x45, 0x29, 0x32, 0x82, 0x3d, 0xf8, 0xa2, 0x9a, 0x2d, 0x4c, 0xce, 0x8c, 0x65, 0xb7, + 0x86, 0x45, 0xb7, 0x95, 0x48, 0x05, 0x0d, 0xbb, 0x4e, 0xad, 0x4c, 0xd8, 0x6e, 0x7c, 0xd4, 0x49, + 0x09, 0xd2, 0x0e, 0x7a, 0xe8, 0x87, 0x18, 0x56, 0xcd, 0x3e, 0x82, 0x54, 0xaf, 0x1d, 0x32, 0x44, + 0xb7, 0x7a, 0xb8, 0x83, 0x49, 0x39, 0xee, 0x7b, 0xab, 0xbd, 0x4d, 0xab, 0x52, 0xae, 0xba, 0xeb, + 0xab, 0x6b, 0x0a, 0x63, 0xe8, 0x85, 0x42, 0x61, 0xad, 0x2e, 0x0e, 0xf2, 0x20, 0xf5, 0xc6, 0xd0, + 0x09, 0x89, 0x09, 0xba, 0xa6, 0xa0, 0x49, 0x18, 0x9b, 0xa0, 0x09, 0x05, 0xdd, 0xc3, 0xe6, 0x56, + 0x6b, 0x30, 0x2a, 0x44, 0x5d, 0x8b, 0x43, 0x21, 0xc1, 0xc5, 0xc5, 0xa5, 0x47, 0xff, 0xbb, 0xac, + 0x2a, 0x79, 0x6d, 0x8c, 0x80, 0xf4, 0x14, 0x3b, 0xbc, 0x10, 0x8d, 0x93, 0x5e, 0xd6, 0xaf, 0x85, + 0x2d, 0xfb, 0xea, 0x38, 0x46, 0xdf, 0xdf, 0x76, 0xab, 0xff, 0x74, 0x5a, 0x72, 0xd3, 0x33, 0x9e, + 0x07, 0x08, 0x93, 0x76, 0xca, 0x75, 0x3d, 0xa4, 0x95, 0xf8, 0x23, 0xae, 0x0e, 0x92, 0x66, 0x04, + 0x7f, 0x2b, 0xca, 0x92, 0x67, 0xcf, 0xae, 0x17, 0xe5, 0xfc, 0x76, 0x82, 0xf7, 0x8b, 0xcf, 0xbe, + 0x5f, 0xe4, 0xd3, 0x34, 0x4d, 0x3f, 0x2e, 0xa2, 0x67, 0xc8, 0x50, 0xf3, 0xec, 0x7e, 0xf1, 0x71, + 0x81, 0xc7, 0xe9, 0x3a, 0x78, 0xb2, 0x82, 0x3f, 0xea, 0xf7, 0xe7, 0xd3, 0xbd, 0x70, 0xf0, 0xd2, + 0x1d, 0x1d, 0x21, 0x4a, 0x64, 0x1f, 0x8b, 0x75, 0xbd, 0xf9, 0x74, 0x74, 0xa8, 0x7e, 0x1e, 0xf9, + 0xb8, 0xd4, 0x3f, 0x7f, 0x1e, 0x86, 0xf3, 0x29, 0x85, 0xec, 0x85, 0x47, 0x18, 0xe2, 0xbf, 0x64, + 0x21, 0x90, 0x81, 0xd2, 0x6e, 0x10, 0xaa, 0xc7, 0xb5, 0xce, 0x0d, 0x1f, 0xe6, 0x05, 0xfa, 0xca, + 0xcd, 0xa7, 0x95, 0xd7, 0x43, 0x88, 0x23, 0xaf, 0xf7, 0xc2, 0xff, 0x12, 0x99, 0x1b, 0xbd, 0xef, + 0x06, 0x0a, 0x3e, 0x39, 0x99, 0xe5, 0x16, 0x32, 0x29, 0x04, 0xfc, 0x44, 0xa6, 0x46, 0x61, 0x09, + 0xc5, 0xef, 0xd6, 0x02, 0x40, 0x47, 0x19, 0xe4, 0x68, 0x76, 0x87, 0x8a, 0x06, 0xa7, 0xfb, 0xac, + 0xc2, 0xdd, 0xa8, 0x10, 0xa6, 0x72, 0xb6, 0xc8, 0x6f, 0x7a, 0x3f, 0x45, 0x93, 0x34, 0x95, 0xc7, + 0xc6, 0xbe, 0x28, 0x1f, 0xb4, 0xd4, 0x06, 0x8d, 0x0b, 0x1c, 0xc5, 0x43, 0xe7, 0x99, 0x30, 0x4b, + 0x54, 0x4a, 0xd4, 0x73, 0x1b, 0x45, 0x15, 0x36, 0xd6, 0xc2, 0x5e, 0x9f, 0xf2, 0x42, 0xc8, 0xa6, + 0x64, 0x3f, 0x77, 0x3f, 0x51, 0x4a, 0x51, 0xb0, 0x11, 0xf2, 0x9c, 0x48, 0xb7, 0x94, 0x0c, 0x5e, + 0x47, 0x76, 0xb3, 0x7a, 0x76, 0xd4, 0x96, 0xfa, 0xf6, 0x54, 0x61, 0x95, 0x09, 0x07, 0x9d, 0xa5, + 0xb8, 0x9a, 0xf7, 0xc5, 0xfd, 0xa8, 0x02, 0x02, 0x21, 0x6f, 0x8d, 0x1d, 0xbf, 0xba, 0x44, 0xe4, + 0xc1, 0xbf, 0xa8, 0x3b, 0x23, 0x81, 0x0f, 0x90, 0x66, 0xe1, 0xcd, 0xbd, 0xc7, 0x02, 0x20, 0xfd, + 0xdf, 0xe9, 0xe8, 0xce, 0xa2, 0xfc, 0x1a, 0xde, 0xcc, 0x39, 0x36, 0xf9, 0x60, 0x18, 0x49, 0xd7, + 0x9f, 0xa8, 0xe6, 0xfa, 0x23, 0xef, 0x65, 0xbb, 0x5d, 0x8b, 0xc8, 0xd2, 0x20, 0xee, 0x3b, 0x8a, + 0xd7, 0xb0, 0xf8, 0x70, 0xac, 0xda, 0x8c, 0x85, 0xdb, 0x60, 0xf8, 0x44, 0x25, 0x04, 0x47, 0xf8, + 0x1c, 0x34, 0x38, 0x44, 0x29, 0x40, 0x98, 0xcb, 0xbe, 0x73, 0x1f, 0x13, 0x70, 0xff, 0x83, 0x23, + 0x21, 0x1c, 0x50, 0x81, 0x11, 0x27, 0x7c, 0x66, 0xe5, 0x13, 0x7c, 0xb8, 0x44, 0xfe, 0x76, 0x47, + 0x5e, 0xe6, 0xf8, 0x8f, 0xea, 0x42, 0x5e, 0x22, 0x7c, 0xc9, 0x44, 0xe7, 0xc0, 0x02, 0x16, 0xf5, + 0xb9, 0xb2, 0x53, 0x59, 0xf1, 0x96, 0x95, 0x77, 0xad, 0xef, 0x8f, 0x44, 0x25, 0x7c, 0x4f, 0x42, + 0x53, 0x32, 0x31, 0x8b, 0x86, 0x98, 0x5e, 0x0d, 0xed, 0x75, 0x99, 0x05, 0x3c, 0x63, 0xef, 0x8e, + 0xa3, 0x38, 0x22, 0x63, 0x78, 0xf3, 0xf8, 0xe8, 0x09, 0xf5, 0x4f, 0x99, 0x71, 0x22, 0xef, 0xbb, + 0xef, 0xac, 0xbb, 0x9b, 0xba, 0x60, 0x64, 0xb3, 0xd9, 0x8c, 0xab, 0x1b, 0x44, 0x79, 0x38, 0xc9, + 0x48, 0x45, 0xde, 0x8b, 0x6c, 0xca, 0xee, 0xcf, 0x40, 0x86, 0x6d, 0x67, 0xfb, 0x5e, 0x89, 0xf3, + 0x5a, 0xa0, 0x69, 0x8a, 0x37, 0xb8, 0x7d, 0x87, 0x00, 0xcd, 0x6f, 0xb5, 0x1a, 0x74, 0x1b, 0xe4, + 0x81, 0xbe, 0x1d, 0x27, 0x75, 0x03, 0x57, 0xa3, 0x35, 0xf6, 0x06, 0xd0, 0x1e, 0x95, 0x07, 0xc7, + 0xdc, 0x00, 0x91, 0x88, 0x37, 0xe4, 0x02, 0x47, 0xf0, 0xe5, 0xbf, 0x08, 0x66, 0x7b, 0x01, 0x13, + 0xa2, 0xb9, 0x61, 0x57, 0xd0, 0x15, 0xb7, 0x43, 0x4d, 0x6f, 0xc1, 0x4b, 0x0c, 0xcb, 0x52, 0x12, + 0x3a, 0x87, 0xaf, 0x1d, 0x79, 0x17, 0x64, 0xb3, 0xc9, 0x11, 0x26, 0x28, 0x0f, 0xfc, 0xef, 0xff, + 0x41, 0xfe, 0xb6, 0xc0, 0x04, 0x45, 0x18, 0xc7, 0x4b, 0x5a, 0xb8, 0x62, 0x1b, 0xbc, 0x6d, 0x45, + 0x84, 0xa0, 0xc1, 0x84, 0x0a, 0xa3, 0x27, 0x63, 0xd4, 0x7d, 0xa4, 0xd2, 0x58, 0x03, 0x68, 0xba, + 0x97, 0xba, 0x4a, 0xdd, 0x13, 0x53, 0xa3, 0x0d, 0x60, 0x13, 0x95, 0x2b, 0xda, 0x86, 0x96, 0x95, + 0x45, 0xe8, 0x64, 0xc4, 0x6f, 0x17, 0xe2, 0xfb, 0x45, 0x3f, 0x18, 0x0c, 0x17, 0xc7, 0x1a, 0x46, + 0x65, 0xa1, 0x10, 0xf5, 0x93, 0xb0, 0xb8, 0x58, 0x5c, 0x7a, 0x9b, 0xb2, 0xf9, 0xc1, 0x29, 0xfe, + 0x6f, 0x59, 0x16, 0xe5, 0xaf, 0xc6, 0x88, 0x47, 0x3d, 0x4c, 0x6a, 0xd2, 0x1b, 0xf2, 0x3b, 0x59, + 0x05, 0x3b, 0x3e, 0x92, 0xe1, 0x29, 0x7f, 0x51, 0x18, 0xc6, 0x8c, 0xbf, 0x2d, 0x8e, 0xc6, 0x89, + 0xc0, 0x94, 0x6e, 0x05, 0x23, 0x17, 0x2b, 0x56, 0x44, 0x3e, 0x9e, 0x8b, 0xf4, 0xb6, 0xb0, 0x9b, + 0x50, 0x9d, 0x5c, 0x90, 0x5e, 0x80, 0x7b, 0x88, 0x62, 0x26, 0x38, 0x16, 0xdf, 0xe0, 0x51, 0xaf, + 0x8f, 0xe7, 0x1d, 0xf1, 0x97, 0x43, 0x17, 0xc5, 0x78, 0xf2, 0x80, 0x71, 0x46, 0xce, 0xca, 0x68, + 0x39, 0x14, 0xfc, 0xe5, 0x32, 0xe7, 0x03, 0x84, 0xcc, 0x10, 0x23, 0x71, 0x11, 0x97, 0xc4, 0x90, + 0xd0, 0xd2, 0xdc, 0xe2, 0xc2, 0x99, 0x7c, 0xf6, 0xd5, 0xcb, 0xbc, 0x4b, 0xf2, 0xc1, 0xce, 0xdf, + 0x8c, 0xe5, 0x14, 0x88, 0x18, 0xf3, 0xb4, 0xa5, 0xb6, 0x53, 0xb6, 0x3f, 0x3e, 0x28, 0x42, 0x13, + 0xc5, 0x70, 0x65, 0x73, 0x76, 0x2b, 0x4f, 0x6a, 0x75, 0xf0, 0xf3, 0x2f, 0x75, 0x5d, 0x75, 0xc6, + 0x27, 0x91, 0xd6, 0x72, 0x67, 0x71, 0x19, 0x6c, 0xdd, 0x06, 0x9f, 0x5b, 0x4b, 0x84, 0x90, 0x2e, + 0xb5, 0xe3, 0x04, 0xe7, 0xd9, 0xe6, 0xd5, 0x4d, 0xf3, 0x9b, 0x71, 0xf9, 0x7d, 0x6e, 0xd4, 0x69, + 0x0f, 0x29, 0x06, 0x0d, 0xae, 0x0f, 0xb6, 0x81, 0xfd, 0x06, 0x39, 0xc2, 0x87, 0x15, 0xae, 0x1a, + 0xa5, 0xf4, 0x6b, 0x28, 0x0e, 0xba, 0x89, 0x4b, 0x58, 0xdc, 0xa4, 0x25, 0x53, 0x78, 0x78, 0x91, + 0x5c, 0xa2, 0xaf, 0x58, 0xbf, 0x14, 0xf1, 0x64, 0xa6, 0xee, 0x71, 0xe1, 0x6a, 0x60, 0x25, 0x50, + 0x17, 0xe3, 0xe3, 0x62, 0xbf, 0x1c, 0xc6, 0x30, 0xf4, 0x45, 0x2c, 0xda, 0x5e, 0x23, 0xf1, 0x7e, + 0x63, 0x7f, 0x20, 0x08, 0x93, 0x1a, 0x42, 0x30, 0x3c, 0x72, 0x77, 0x99, 0x58, 0x00, 0xe5, 0xb6, + 0x38, 0x65, 0x8e, 0xd2, 0x30, 0x34, 0x72, 0x2e, 0x14, 0x83, 0x95, 0xb1, 0x65, 0xab, 0xcb, 0xc5, + 0x22, 0x4a, 0xf1, 0xf8, 0xf3, 0x0c, 0x94, 0xd2, 0x34, 0xaa, 0xf6, 0xb9, 0x64, 0x07, 0x14, 0xe1, + 0x61, 0x2d, 0x30, 0x88, 0x22, 0xe6, 0x5e, 0x9d, 0xca, 0x63, 0x9b, 0x3c, 0xf2, 0x65, 0x92, 0xf9, + 0x52, 0x1f, 0x64, 0x70, 0x75, 0x1a, 0x61, 0x8b, 0x5a, 0x36, 0xe3, 0xa2, 0xd5, 0x66, 0xcc, 0xe9, + 0x5d, 0xa1, 0xe3, 0x4b, 0xc4, 0xea, 0x6f, 0xc6, 0xd2, 0xcf, 0x1a, 0x84, 0x26, 0xd1, 0xe2, 0xd4, + 0x6d, 0x62, 0x78, 0xd1, 0x88, 0xba, 0x53, 0x75, 0x36, 0x8a, 0x5c, 0x4f, 0x65, 0x3c, 0x87, 0x4c, + 0x3a, 0xc4, 0x29, 0xd5, 0x37, 0xdb, 0x89, 0x7b, 0xa2, 0x1e, 0x59, 0x25, 0x97, 0x61, 0x26, 0xff, + 0xd0, 0x97, 0x12, 0x9e, 0x19, 0x83, 0x3a, 0x16, 0x61, 0xf8, 0x42, 0x17, 0xea, 0x00, 0x09, 0xaa, + 0xe2, 0x1a, 0x04, 0x17, 0x1d, 0x16, 0x1a, 0xf0, 0xa3, 0x84, 0x00, 0x4d, 0x78, 0x0c, 0x42, 0x94, + 0xaf, 0xe7, 0x85, 0x38, 0xc3, 0x56, 0x46, 0x08, 0x47, 0xa3, 0x1e, 0x6c, 0x88, 0x1e, 0xe2, 0x77, + 0x82, 0xe2, 0xbd, 0x47, 0x42, 0x2c, 0x64, 0xec, 0x85, 0x47, 0xa2, 0x78, 0x62, 0x3a, 0x53, 0x18, + 0x67, 0xd8, 0x6c, 0xf1, 0x33, 0x9c, 0x60, 0x12, 0x57, 0xbb, 0xf8, 0x27, 0xfc, 0xba, 0x36, 0x8c, + 0xd1, 0x54, 0x1f, 0x37, 0x6f, 0x2d, 0x25, 0xff, 0x97, 0x48, 0x50, 0xbb, 0xe3, 0x16, 0x58, 0xf9, + 0xf4, 0xb4, 0x20, 0xe9, 0xbc, 0x19, 0x69, 0x3c, 0x86, 0x11, 0xc0, 0x13, 0x8c, 0xe8, 0xb8, 0xa3, + 0x06, 0x8a, 0xed, 0x7c, 0xdd, 0x65, 0x4b, 0x55, 0x7e, 0xc2, 0x7b, 0x16, 0x66, 0x53, 0x4f, 0x68, + 0x45, 0x34, 0x36, 0xf5, 0x86, 0xcb, 0xce, 0x24, 0xbe, 0xcd, 0xfb, 0xad, 0x54, 0x67, 0xcd, 0x2f, + 0xdc, 0x8b, 0x46, 0x7c, 0xad, 0x04, 0x08, 0xc1, 0x3f, 0x5e, 0x35, 0x29, 0x73, 0xd4, 0xb8, 0x45, + 0xb6, 0x56, 0xef, 0x5d, 0xf8, 0x9c, 0x66, 0xe1, 0x82, 0x24, 0x01, 0x55, 0xe2, 0xc1, 0x97, 0x6c, + 0x0d, 0x54, 0xb9, 0x73, 0xba, 0x36, 0x94, 0xad, 0x3e, 0x64, 0xd2, 0x0b, 0x1e, 0x83, 0xa5, 0x3e, + 0x24, 0x49, 0x24, 0x84, 0xf7, 0xe9, 0x2d, 0xf4, 0x52, 0x71, 0x52, 0x0f, 0x40, 0x42, 0x92, 0x88, + 0xe9, 0x5a, 0xe3, 0xe2, 0x34, 0x4f, 0x09, 0x7b, 0x4c, 0x69, 0x5b, 0x62, 0xc1, 0x40, 0xd2, 0xc0, + 0x88, 0x53, 0x05, 0x92, 0x92, 0x42, 0xfc, 0x7f, 0x78, 0x66, 0x29, 0x7e, 0x81, 0x83, 0x73, 0xdf, + 0x81, 0xb4, 0xfa, 0x62, 0x1b, 0x4e, 0x3c, 0x8a, 0x89, 0x91, 0x9f, 0x3f, 0xa6, 0x1f, 0xd5, 0x3e, + 0x96, 0x4d, 0x51, 0xab, 0x53, 0x2b, 0x12, 0xac, 0x5e, 0xe3, 0xfc, 0x3a, 0x62, 0xd3, 0x98, 0x96, + 0x7d, 0x19, 0x68, 0xef, 0xb8, 0x3a, 0xca, 0x90, 0xcf, 0x75, 0xf5, 0x5c, 0x1b, 0xf4, 0x3d, 0x5e, + 0x8d, 0xb2, 0xf6, 0xbb, 0x80, 0xdf, 0x7d, 0x68, 0x4c, 0xd5, 0x54, 0x90, 0x1b, 0x1a, 0xa2, 0xff, + 0xae, 0x1b, 0xf6, 0xfa, 0xcd, 0x0f, 0xaf, 0xde, 0xf5, 0x9d, 0x72, 0x3c, 0x99, 0x0a, 0x6d, 0xdb, + 0x71, 0x2f, 0x44, 0x2f, 0x5c, 0xca, 0x91, 0xf5, 0x3e, 0xcd, 0xbc, 0x7f, 0xbc, 0x6a, 0x7b, 0x7b, + 0x22, 0x87, 0xd7, 0x4e, 0x5f, 0xf5, 0x8d, 0xef, 0x5a, 0xd0, 0x69, 0x34, 0xf6, 0x45, 0xfd, 0x45, + 0x8c, 0xaf, 0xbe, 0xaa, 0xb5, 0x43, 0x53, 0xac, 0xb0, 0xdc, 0x7f, 0x40, 0x76, 0x47, 0xba, 0x31, + 0x22, 0x1d, 0xbc, 0x40, 0x44, 0xde, 0xbd, 0x7e, 0xf2, 0x75, 0xf1, 0xec, 0xfe, 0x17, 0x50, 0xdb, + 0xd3, 0x1f, 0x17, 0x0f, 0xd1, 0x55, 0xff, 0xd0, 0x1d, 0xfa, 0x3b, 0xb8, 0xc6, 0xf6, 0x85, 0xb8, + 0x23, 0x9f, 0xa0, 0x94, 0x5c, 0x1d, 0x70, 0x4c, 0x4c, 0xb2, 0x18, 0x10, 0x8f, 0x0e, 0x06, 0x87, + 0xa0, 0xb6, 0x6c, 0x52, 0x55, 0x38, 0xb4, 0x89, 0x96, 0x81, 0x7c, 0xa0, 0xd6, 0x42, 0xeb, 0x22, + 0x0f, 0xa6, 0x14, 0xd4, 0xb5, 0xf2, 0xb1, 0xef, 0xec, 0xef, 0x2f, 0x1c, 0x4f, 0xa4, 0xdb, 0x0f, + 0x13, 0x14, 0x6e, 0xb0, 0x1f, 0x2b, 0x73, 0xd9, 0x18, 0x15, 0xaf, 0x8f, 0x85, 0x14, 0x01, 0xb4, + 0x88, 0xae, 0x3c, 0x66, 0x8e, 0x17, 0xbb, 0x9b, 0xb6, 0xeb, 0x00, 0x32, 0x92, 0x33, 0x82, 0x6b, + 0xd2, 0x86, 0x04, 0x75, 0xd9, 0x82, 0xfd, 0x5c, 0xd3, 0x40, 0xd5, 0x59, 0x2f, 0xb9, 0x9a, 0xd2, + 0xdd, 0xd3, 0xfd, 0x2f, 0xa3, 0x6f, 0xbf, 0xfb, 0xf6, 0xe9, 0x09, 0xfe, 0x7d, 0x71, 0xf4, 0xdd, + 0x57, 0x5f, 0xdd, 0xff, 0x72, 0xfc, 0xed, 0xa1, 0xef, 0x76, 0x52, 0x09, 0x0b, 0xcc, 0xef, 0xe5, + 0xfd, 0x2f, 0x8a, 0xe8, 0x96, 0x16, 0x2b, 0x02, 0xfc, 0xe5, 0x74, 0xac, 0x43, 0x66, 0xcd, 0xa0, + 0x57, 0x6d, 0xb2, 0x6b, 0x05, 0x7e, 0xeb, 0xb0, 0x78, 0x95, 0xc6, 0x58, 0x7d, 0xac, 0x9f, 0x64, + 0xc3, 0xf2, 0x54, 0xd8, 0x44, 0x19, 0xa9, 0x69, 0x65, 0xb3, 0xd2, 0xc9, 0x98, 0x02, 0x67, 0xbb, + 0x0f, 0xed, 0xfe, 0xdc, 0x24, 0x2b, 0x33, 0x93, 0x95, 0x24, 0x44, 0xa0, 0x31, 0xd6, 0x04, 0x28, + 0x97, 0xe1, 0x02, 0x04, 0x94, 0xc0, 0xc8, 0x28, 0xe0, 0xfb, 0x50, 0x8e, 0xca, 0xef, 0xbd, 0xf6, + 0x43, 0x75, 0x36, 0xbd, 0x71, 0x3c, 0x19, 0xc5, 0x95, 0x7f, 0x84, 0xfa, 0x37, 0x34, 0xdc, 0xe0, + 0xf0, 0x85, 0xaf, 0xc7, 0xf6, 0xd3, 0x13, 0xb2, 0x75, 0xf4, 0x75, 0x30, 0xb6, 0xfc, 0x3d, 0xfd, + 0x4d, 0x8d, 0x1d, 0xb2, 0x50, 0xf1, 0x03, 0xa7, 0x28, 0x1a, 0xe6, 0x60, 0xf0, 0x88, 0x57, 0x8d, + 0x2a, 0xcb, 0x13, 0x59, 0xd4, 0xce, 0x20, 0x90, 0xa5, 0x41, 0x21, 0x46, 0x6e, 0x23, 0x42, 0x6d, + 0xf0, 0xa9, 0xad, 0x54, 0x8c, 0x87, 0x33, 0x90, 0x9e, 0x23, 0x81, 0x8b, 0x54, 0x16, 0x24, 0x3c, + 0x6b, 0x75, 0x31, 0x6a, 0x04, 0xe7, 0x99, 0x8c, 0x0a, 0x85, 0xea, 0x67, 0x08, 0xd0, 0x14, 0x10, + 0xef, 0xc4, 0xf1, 0xf1, 0x3c, 0x7e, 0x5b, 0xa6, 0xce, 0x16, 0xbd, 0xa7, 0xa7, 0x82, 0x78, 0xf4, + 0xab, 0xe4, 0x40, 0xd3, 0x1e, 0xe4, 0xf6, 0x1c, 0xff, 0x21, 0xb7, 0xe2, 0xfb, 0x10, 0xe6, 0x39, + 0x5b, 0x45, 0x22, 0x58, 0x14, 0x5f, 0x47, 0x51, 0x06, 0x67, 0xc6, 0x83, 0x83, 0x03, 0xcd, 0x9b, + 0x22, 0xf5, 0x45, 0xb5, 0xf6, 0x6b, 0x16, 0x6b, 0xd8, 0x11, 0xe7, 0x8b, 0x19, 0x1c, 0xb9, 0xc5, + 0xa3, 0x10, 0x38, 0xd0, 0x93, 0x6f, 0x9f, 0xf8, 0xab, 0x70, 0x5d, 0x8e, 0x8d, 0xb3, 0x80, 0x71, + 0xed, 0xca, 0x2f, 0xf8, 0xf6, 0xfc, 0x84, 0x56, 0xf9, 0xa7, 0x27, 0xdb, 0x0a, 0x10, 0x79, 0x4b, + 0x08, 0x25, 0x9f, 0x0b, 0x8f, 0x49, 0x03, 0x61, 0x1e, 0xa5, 0x72, 0x83, 0xd6, 0xf8, 0xf4, 0x04, + 0x5e, 0xdb, 0x19, 0x1b, 0xd5, 0xa8, 0xc4, 0x8c, 0xea, 0x5c, 0x21, 0x12, 0xc7, 0x83, 0x51, 0x2e, + 0x27, 0x1b, 0xec, 0xfa, 0x74, 0x3e, 0xc1, 0x85, 0x02, 0x29, 0x58, 0xc8, 0x92, 0x09, 0xe9, 0x1d, + 0xc2, 0xe2, 0xf7, 0x50, 0x17, 0x81, 0x7c, 0x9a, 0xb1, 0x6e, 0x52, 0xf4, 0x17, 0x4c, 0xef, 0x21, + 0x33, 0x9c, 0xd6, 0xdd, 0x11, 0x4b, 0xdc, 0x21, 0x05, 0x60, 0xfa, 0x9a, 0x98, 0x94, 0x65, 0x0a, + 0x67, 0x24, 0x0f, 0xd7, 0xf7, 0x35, 0xf1, 0x6e, 0xb3, 0x75, 0xd1, 0xa8, 0x60, 0x50, 0x00, 0x4d, + 0xbc, 0xff, 0x3a, 0x7e, 0x06, 0x6b, 0xf0, 0x22, 0x2b, 0x47, 0xbd, 0xe3, 0x67, 0x48, 0xf6, 0x83, + 0xff, 0xce, 0xcb, 0x9b, 0x78, 0xd4, 0xfb, 0x5f, 0xd7, 0x07, 0x57, 0x25, 0xca, 0x79, 0x01, 0x00 }; From 22b25038391157b441d306d71223795fe3d5b734 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Thu, 22 Dec 2022 18:13:32 +0100 Subject: [PATCH 08/24] Bugfix & code optimisation. --- wled00/FX.h | 1 + wled00/FX_2Dfcn.cpp | 27 ++++++------- wled00/FX_fcn.cpp | 93 ++++++++++++++++++++++----------------------- wled00/json.cpp | 2 +- wled00/set.cpp | 2 +- wled00/udp.cpp | 7 ++-- 6 files changed, 62 insertions(+), 70 deletions(-) diff --git a/wled00/FX.h b/wled00/FX.h index 60b1473c..882f4c9e 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -504,6 +504,7 @@ typedef struct Segment { static uint16_t getUsedSegmentData(void) { return _usedSegmentData; } static void addUsedSegmentData(int len) { _usedSegmentData += len; } + void set(uint16_t i1, uint16_t i2, uint8_t grp=1, uint8_t spc=0, uint16_t ofs=UINT16_MAX, uint16_t i1Y=0, uint16_t i2Y=1); bool setColor(uint8_t slot, uint32_t c); //returns true if changed void setCCT(uint16_t k); void setOpacity(uint8_t o); diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 42d2dde0..0ac09998 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -43,21 +43,22 @@ void WS2812FX::setUpMatrix() { // isMatrix is set in cfg.cpp or set.cpp if (isMatrix) { - Segment::maxWidth = hPanels * panelW; - Segment::maxHeight = vPanels * panelH; + uint16_t maxWidth = hPanels * panelW; + uint16_t maxHeight = vPanels * panelH; // safety check - if (Segment::maxWidth * Segment::maxHeight > MAX_LEDS || Segment::maxWidth == 1 || Segment::maxHeight == 1) { - Segment::maxWidth = _length; - Segment::maxHeight = 1; + if (maxWidth * maxHeight > MAX_LEDS || maxWidth == 1 || maxHeight == 1) { isMatrix = false; return; } - customMappingSize = Segment::maxWidth * Segment::maxHeight; - customMappingTable = new uint16_t[customMappingSize]; + customMappingTable = new uint16_t[maxWidth * maxHeight]; if (customMappingTable != nullptr) { + Segment::maxWidth = maxWidth; + Segment::maxHeight = maxHeight; + customMappingSize = maxWidth * maxHeight; + uint16_t startL; // index in custom mapping array (logical strip) uint16_t startP; // position of 1st pixel of panel on (virtual) strip uint16_t x, y, offset; @@ -94,18 +95,12 @@ void WS2812FX::setUpMatrix() { } DEBUG_PRINTLN(); #endif - } else { - // memory allocation error - Segment::maxWidth = _length; - Segment::maxHeight = 1; + } else { // memory allocation error isMatrix = false; - return; } - } else { - // not a matrix set up - Segment::maxWidth = _length; - Segment::maxHeight = 1; } +#else + isMatrix = false; // no matter what config says #endif } diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index cc3b122e..d2a8182e 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -376,6 +376,45 @@ void Segment::handleTransition() { } } +void Segment::set(uint16_t i1, uint16_t i2, uint8_t grp, uint8_t spc, uint16_t ofs, uint16_t i1Y, uint16_t i2Y) { + //return if neither bounds nor grouping have changed + bool boundsUnchanged = (start == i1 && stop == i2); + if (Segment::maxHeight>1) { //2D + boundsUnchanged &= (startY == i1Y && stopY == i2Y); + } + if (boundsUnchanged + && (!grp || (grouping == grp && spacing == spc)) + && (ofs == UINT16_MAX || ofs == offset)) return; + + if (stop) fill(BLACK); //turn old segment range off + if (i2 <= i1) { //disable segment + stop = 0; + markForReset(); + return; + } + if (Segment::maxHeight>1) { // 2D + #ifndef WLED_DISABLE_2D + if (i1 < Segment::maxWidth) start = i1; + stop = i2 > Segment::maxWidth ? Segment::maxWidth : i2; + if (i1Y < Segment::maxHeight) startY = i1Y; + stopY = i2Y > Segment::maxHeight ? Segment::maxHeight : MAX(1,i2Y); + #endif + } else { + if (i1 < strip.getLengthTotal()) start = i1; + stop = i2 > strip.getLengthTotal() ? strip.getLengthTotal() : i2; + startY = 0; + stopY = 1; + } + if (grp) { + grouping = grp; + spacing = spc; + } + if (ofs < UINT16_MAX) offset = ofs; + markForReset(); + if (!boundsUnchanged) refreshLightCapabilities(); +} + + bool Segment::setColor(uint8_t slot, uint32_t c) { //returns true if changed if (slot >= NUM_COLORS || c == colors[slot]) return false; if (fadeTransition) startTransition(strip.getTransition()); // start transition prior to change @@ -957,6 +996,11 @@ void WS2812FX::finalizeInit(void) #endif } + if (!isMatrix) { // if 2D then max values defined in setUpMatrix() using panel set-up + Segment::maxWidth = _length; + Segment::maxHeight = 1; + } + //initialize leds array. TBD: realloc if nr of leds change if (Segment::_globalLeds) { purgeSegments(true); @@ -1319,54 +1363,7 @@ Segment& WS2812FX::getSegment(uint8_t id) { void WS2812FX::setSegment(uint8_t n, uint16_t i1, uint16_t i2, uint8_t grouping, uint8_t spacing, uint16_t offset, uint16_t startY, uint16_t stopY) { if (n >= _segments.size()) return; - Segment& seg = _segments[n]; - - //return if neither bounds nor grouping have changed - bool boundsUnchanged = (seg.start == i1 && seg.stop == i2); - if (isMatrix) { - boundsUnchanged &= (seg.startY == startY && seg.stopY == stopY); - } - if (boundsUnchanged - && (!grouping || (seg.grouping == grouping && seg.spacing == spacing)) - && (offset == UINT16_MAX || offset == seg.offset)) return; - - //if (seg.stop) setRange(seg.start, seg.stop -1, BLACK); //turn old segment range off - if (seg.stop) seg.fill(BLACK); //turn old segment range off - if (i2 <= i1) //disable segment - { - // disabled segments should get removed using purgeSegments() - DEBUG_PRINT(F("-- Segment ")); DEBUG_PRINT(n); DEBUG_PRINTLN(F(" marked inactive.")); - seg.stop = 0; - seg.options = 0b0000000000000101; // on & selected - //if (seg.name) { - // delete[] seg.name; - // seg.name = nullptr; - //} - // if main segment is deleted, set first active as main segment - if (n == _mainSegment) setMainSegmentId(0); - seg.markForReset(); - return; - } - if (isMatrix) { - #ifndef WLED_DISABLE_2D - if (i1 < Segment::maxWidth) seg.start = i1; - seg.stop = i2 > Segment::maxWidth ? Segment::maxWidth : i2; - if (startY < Segment::maxHeight) seg.startY = startY; - seg.stopY = stopY > Segment::maxHeight ? Segment::maxHeight : MAX(1,stopY); - #endif - } else { - if (i1 < _length) seg.start = i1; - seg.stop = i2 > _length ? _length : i2; - seg.startY = 0; - seg.stopY = 1; - } - if (grouping) { - seg.grouping = grouping; - seg.spacing = spacing; - } - if (offset < UINT16_MAX) seg.offset = offset; - seg.markForReset(); - if (!boundsUnchanged) seg.refreshLightCapabilities(); + _segments[n].set(i1, i2, grouping, spacing, offset, startY, stopY); } void WS2812FX::restartRuntime() { diff --git a/wled00/json.cpp b/wled00/json.cpp index 192afd4b..fe87e4f6 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -105,7 +105,7 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) of = offsetAbs; } if (stop > start && of > len -1) of = len -1; - strip.setSegment(id, start, stop, grp, spc, of, startY, stopY); + seg.set(start, stop, grp, spc, of, startY, stopY); byte segbri = seg.opacity; if (getVal(elem["bri"], &segbri)) { diff --git a/wled00/set.cpp b/wled00/set.cpp index 0369e2e3..cb66937d 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -744,7 +744,7 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply) if (pos > 0) { spcI = getNumVal(&req, pos); } - strip.setSegment(selectedSeg, startI, stopI, grpI, spcI, UINT16_MAX, startY, stopY); + selseg.set(startI, stopI, grpI, spcI, UINT16_MAX, startY, stopY); pos = req.indexOf(F("RV=")); //Segment reverse if (pos > 0) selseg.reverse = req.charAt(pos+3) != '0'; diff --git a/wled00/udp.cpp b/wled00/udp.cpp index 2d1388f8..06172f6e 100644 --- a/wled00/udp.cpp +++ b/wled00/udp.cpp @@ -363,7 +363,7 @@ void handleNotifications() uint16_t stopY = 1, stop = (udpIn[3+ofs] << 8 | udpIn[4+ofs]); uint16_t offset = (udpIn[7+ofs] << 8 | udpIn[8+ofs]); if (!receiveSegmentOptions) { - strip.setSegment(id, start, stop, selseg.grouping, selseg.spacing, offset, startY, stopY); + selseg.set(start, stop, selseg.grouping, selseg.spacing, offset, startY, stopY); continue; } //for (size_t j = 1; j<4; j++) selseg.setOption(j, (udpIn[9 +ofs] >> j) & 0x01); //only take into account mirrored, on, reversed; ignore selected @@ -396,11 +396,10 @@ void handleNotifications() startY = (udpIn[32+ofs] << 8 | udpIn[33+ofs]); stopY = (udpIn[34+ofs] << 8 | udpIn[35+ofs]); } - //setSegment() also properly resets segments if (receiveSegmentBounds) { - strip.setSegment(id, start, stop, udpIn[5+ofs], udpIn[6+ofs], offset, startY, stopY); + selseg.set(start, stop, udpIn[5+ofs], udpIn[6+ofs], offset, startY, stopY); } else { - strip.setSegment(id, selseg.start, selseg.stop, udpIn[5+ofs], udpIn[6+ofs], selseg.offset, selseg.startY, selseg.stopY); + selseg.set(selseg.start, selseg.stop, udpIn[5+ofs], udpIn[6+ofs], selseg.offset, selseg.startY, selseg.stopY); } } stateChanged = true; From d36460e30b93feafb1519cf9e8ecc26199c61fa3 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Fri, 23 Dec 2022 16:37:13 +0100 Subject: [PATCH 09/24] Minor optimisation. Fix for #2969 --- wled00/FX_fcn.cpp | 24 ++- wled00/data/settings_sync.htm | 2 +- wled00/html_settings.h | 268 +++++++++++++++++----------------- 3 files changed, 146 insertions(+), 148 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index d2a8182e..98339dc9 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -246,7 +246,8 @@ CRGBPalette16 &Segment::loadPalette(CRGBPalette16 &targetPalette, uint8_t pal) { if (timeSinceLastChange <= 500) { targetPalette = prevRandomPalette; // there needs to be 255 palette blends (48) for full blend but that is too resource intensive - // so 128 is a compromise + // so 128 is a compromise (we need to perform full blend of the two palettes as each segment can have random + // palette selected but only 2 static palettes are used) size_t noOfBlends = ((128U * timeSinceLastChange) / 500U); for (size_t i=0; i1) { //2D - boundsUnchanged &= (startY == i1Y && stopY == i2Y); - } + #ifndef WLED_DISABLE_2D + if (Segment::maxHeight>1) boundsUnchanged &= (startY == i1Y && stopY == i2Y); // 2D + #endif if (boundsUnchanged && (!grp || (grouping == grp && spacing == spc)) && (ofs == UINT16_MAX || ofs == offset)) return; @@ -392,19 +393,16 @@ void Segment::set(uint16_t i1, uint16_t i2, uint8_t grp, uint8_t spc, uint16_t o markForReset(); return; } + if (i1 < Segment::maxWidth) start = i1; // Segment::maxWidth equals strip.getLengthTotal() for 1D + stop = i2 > Segment::maxWidth ? Segment::maxWidth : MAX(1,i2); + startY = 0; + stopY = 1; + #ifndef WLED_DISABLE_2D if (Segment::maxHeight>1) { // 2D - #ifndef WLED_DISABLE_2D - if (i1 < Segment::maxWidth) start = i1; - stop = i2 > Segment::maxWidth ? Segment::maxWidth : i2; if (i1Y < Segment::maxHeight) startY = i1Y; stopY = i2Y > Segment::maxHeight ? Segment::maxHeight : MAX(1,i2Y); - #endif - } else { - if (i1 < strip.getLengthTotal()) start = i1; - stop = i2 > strip.getLengthTotal() ? strip.getLengthTotal() : i2; - startY = 0; - stopY = 1; } + #endif if (grp) { grouping = grp; spacing = spc; diff --git a/wled00/data/settings_sync.htm b/wled00/data/settings_sync.htm index b7f4f2ef..1e50cab2 100644 --- a/wled00/data/settings_sync.htm +++ b/wled00/data/settings_sync.htm @@ -80,7 +80,7 @@

WLED Broadcast

UDP Port:
2nd Port:
-

Sync grups

+

Sync groups

diff --git a/wled00/html_settings.h b/wled00/html_settings.h index f4e30191..a84f09be 100644 --- a/wled00/html_settings.h +++ b/wled00/html_settings.h @@ -1130,140 +1130,140 @@ const uint8_t PAGE_settings_sync[] PROGMEM = { 0xfd, 0xc0, 0xcc, 0x85, 0x8b, 0xd2, 0x70, 0xcc, 0x12, 0xd0, 0x96, 0x1f, 0xd9, 0x66, 0x13, 0xfe, 0xd2, 0x17, 0xdb, 0x3c, 0x6a, 0xb7, 0x5b, 0x6d, 0x33, 0x57, 0x8f, 0x07, 0x8f, 0x09, 0xfb, 0x2b, 0xf5, 0x13, 0x86, 0x56, 0x48, 0x9c, 0x83, 0xc8, 0x5b, 0xe6, 0x9a, 0x55, 0x0f, 0xf7, 0x07, 0x26, - 0xf9, 0xff, 0xb9, 0xe2, 0x11, 0x0c, 0x75, 0xac, 0x69, 0x92, 0xc6, 0x42, 0xc9, 0xbf, 0x24, 0x35, - 0x60, 0x89, 0x32, 0x35, 0xfe, 0x5d, 0xde, 0x46, 0xf9, 0x09, 0xb0, 0xd4, 0xd8, 0x70, 0xa2, 0x60, - 0xc1, 0x21, 0xc6, 0x32, 0xf5, 0x30, 0xa3, 0x1e, 0xee, 0x44, 0xdd, 0x91, 0x58, 0x1b, 0x11, 0x23, - 0x9b, 0x0c, 0x69, 0x32, 0xf5, 0xa3, 0x13, 0x8b, 0xd0, 0x54, 0x72, 0x9c, 0x05, 0x79, 0x25, 0xc8, - 0xdd, 0xc0, 0x1f, 0xf8, 0xd7, 0x2c, 0x9e, 0x0e, 0x8a, 0xa7, 0x56, 0xf1, 0x74, 0x58, 0x3c, 0xb5, - 0x8d, 0xe2, 0xf1, 0xa8, 0x78, 0xfa, 0x50, 0x3c, 0x1d, 0xeb, 0xa7, 0x86, 0x62, 0xaf, 0xb7, 0x18, - 0x41, 0xd6, 0x3b, 0x29, 0x16, 0xe4, 0x0a, 0xd7, 0x27, 0x50, 0x88, 0x3b, 0xe6, 0x2f, 0xd9, 0xc9, - 0x9a, 0xb9, 0xfb, 0xc3, 0x93, 0x53, 0x26, 0x59, 0x49, 0x71, 0x50, 0x54, 0x7e, 0xf0, 0xb8, 0x1b, - 0x49, 0xab, 0xd8, 0xa4, 0xf5, 0x96, 0x62, 0xb5, 0x5c, 0x87, 0x05, 0xc9, 0xe1, 0x8e, 0x9b, 0xb4, - 0xe7, 0x72, 0xb5, 0x77, 0x24, 0x39, 0x2a, 0x36, 0x39, 0xda, 0x55, 0xae, 0x0f, 0x05, 0xc9, 0x87, - 0x1d, 0x37, 0x39, 0x9e, 0xcb, 0x75, 0x9c, 0x93, 0x2c, 0x1a, 0x6b, 0xc8, 0x5c, 0xe6, 0x3f, 0xb1, - 0x93, 0x5d, 0x98, 0x0d, 0x9b, 0x05, 0xb3, 0xe1, 0x8e, 0xf6, 0x1a, 0x1e, 0xe4, 0x12, 0x0f, 0x0f, - 0x76, 0x3c, 0xe4, 0xb0, 0xb0, 0xd7, 0xb0, 0xb5, 0xe3, 0x26, 0x87, 0x73, 0xb9, 0x76, 0xb4, 0xd7, - 0xb0, 0x5d, 0x6c, 0xd2, 0xde, 0x55, 0xae, 0xc2, 0x5e, 0xc3, 0xa3, 0x1d, 0x37, 0xf9, 0x30, 0x97, - 0x6b, 0x47, 0x7b, 0x0d, 0x8f, 0x8b, 0x4d, 0x96, 0xcd, 0xd5, 0x50, 0xd1, 0x0d, 0x78, 0x0a, 0xb8, - 0x53, 0xd8, 0x2c, 0xe2, 0xcf, 0x09, 0x8d, 0xd7, 0xf1, 0xcb, 0xf8, 0x40, 0x4a, 0xe8, 0x26, 0xfe, - 0x74, 0x26, 0x23, 0x26, 0x44, 0xad, 0xd3, 0xc8, 0x88, 0x8c, 0xdd, 0xa8, 0xcf, 0x4d, 0xe7, 0x9c, - 0x07, 0x3c, 0x99, 0x13, 0xe6, 0x74, 0x14, 0x30, 0x75, 0x9d, 0xbe, 0x32, 0xe2, 0xdf, 0x4d, 0xe7, - 0x62, 0x32, 0x61, 0xae, 0x14, 0x73, 0x6a, 0xc4, 0xcd, 0x4d, 0x3b, 0x8e, 0x6e, 0xa1, 0x63, 0x84, - 0xca, 0x67, 0x8a, 0xf5, 0x3a, 0xe1, 0x31, 0x16, 0x13, 0xa2, 0x46, 0x36, 0xd3, 0x5c, 0x02, 0x78, - 0x8e, 0x79, 0x1a, 0x79, 0x02, 0xf9, 0x1b, 0x88, 0x40, 0x44, 0x37, 0x3e, 0xba, 0x1a, 0x11, 0x58, - 0x1a, 0x7b, 0x00, 0xdc, 0xae, 0xc4, 0x0e, 0x31, 0x9a, 0xb2, 0x93, 0x2d, 0x1c, 0x7b, 0xa6, 0xb3, - 0x81, 0x55, 0x96, 0xfc, 0xe2, 0x04, 0x54, 0x4a, 0xa0, 0xf0, 0xee, 0x0f, 0xb7, 0xf1, 0xeb, 0x2e, - 0xf2, 0x3b, 0x0b, 0xd8, 0x0b, 0x5d, 0xe6, 0xba, 0x8d, 0xfe, 0x6c, 0x91, 0x7e, 0x00, 0x3d, 0x85, - 0x1f, 0x0b, 0x72, 0x95, 0xb2, 0xec, 0x38, 0x3f, 0xc6, 0xec, 0x6a, 0x91, 0xd9, 0x35, 0x75, 0x13, - 0xfe, 0x63, 0xf4, 0xd7, 0x19, 0x3d, 0x26, 0xeb, 0x18, 0xaa, 0x02, 0x68, 0xb5, 0xa0, 0x2d, 0x4e, - 0x68, 0x24, 0x42, 0x5f, 0x88, 0x25, 0x0e, 0x59, 0x9e, 0x1d, 0xae, 0xcc, 0xb3, 0x56, 0x96, 0x67, - 0x5b, 0xf0, 0x60, 0xac, 0xcd, 0xb2, 0xca, 0x63, 0xc0, 0xe9, 0xc7, 0x9c, 0xcb, 0x62, 0x0a, 0x7a, - 0x6c, 0x02, 0x0d, 0x56, 0xf0, 0x9a, 0x29, 0x40, 0xd4, 0x3b, 0x0d, 0x1f, 0x4b, 0x8e, 0x82, 0x91, - 0x08, 0x03, 0x53, 0xa5, 0xe8, 0x7e, 0x24, 0x24, 0x8d, 0x5c, 0x46, 0xb0, 0x8d, 0x52, 0x49, 0xfa, - 0x22, 0x52, 0xa9, 0xd2, 0xcf, 0x27, 0x02, 0x98, 0x58, 0x7b, 0xe6, 0x2c, 0x82, 0x6f, 0xbe, 0xe8, - 0x43, 0x5f, 0xd3, 0x47, 0x46, 0xe4, 0xcc, 0x17, 0x73, 0x72, 0xc8, 0xc3, 0x2e, 0x7f, 0x62, 0x09, - 0x32, 0xdd, 0xa2, 0xba, 0x9b, 0x2e, 0xde, 0x87, 0x80, 0x94, 0x65, 0x21, 0x87, 0x8c, 0x06, 0xd2, - 0x0f, 0x99, 0x92, 0x2f, 0x0b, 0x70, 0x82, 0xfa, 0x4d, 0xb2, 0x89, 0x6d, 0xf2, 0x0d, 0x33, 0x8f, - 0xbd, 0x87, 0x0a, 0x39, 0xa4, 0x3e, 0x34, 0x76, 0x79, 0x08, 0x45, 0xc1, 0xeb, 0x16, 0xa9, 0xae, - 0x6f, 0xcd, 0x42, 0xd5, 0x50, 0x83, 0x38, 0x37, 0x4c, 0x3e, 0xf3, 0xe4, 0x91, 0xf4, 0xae, 0x7f, - 0x27, 0x8a, 0x4e, 0xe9, 0x16, 0x26, 0xef, 0x80, 0x1c, 0x78, 0x09, 0x16, 0x60, 0x24, 0x69, 0xe2, - 0x5e, 0x5f, 0x15, 0x8a, 0xca, 0x0a, 0xe0, 0x1b, 0xd8, 0x26, 0xa8, 0x0b, 0x03, 0x3c, 0xa8, 0x0e, - 0x5f, 0xa2, 0xdb, 0x08, 0x13, 0xbb, 0x11, 0x40, 0x84, 0x66, 0xbd, 0xd5, 0x24, 0x15, 0x71, 0x76, - 0x7e, 0x53, 0xed, 0x34, 0xf4, 0x0a, 0xa7, 0xb4, 0x12, 0x9b, 0x12, 0xd3, 0x39, 0x4b, 0xe4, 0x3e, - 0x88, 0x52, 0x2c, 0x2a, 0xf3, 0x03, 0xaf, 0xd1, 0x92, 0x40, 0xef, 0x68, 0xe6, 0x4f, 0x80, 0x57, - 0xa9, 0x90, 0x3c, 0x24, 0x58, 0xa2, 0xcf, 0xf9, 0x37, 0xf4, 0xbc, 0x3e, 0xa6, 0xaa, 0x9a, 0x11, - 0x6e, 0xa1, 0x4d, 0x73, 0x56, 0x54, 0x9b, 0x17, 0x83, 0x5d, 0xca, 0xc2, 0xc5, 0x53, 0x6d, 0x70, - 0x5f, 0x55, 0x00, 0x5f, 0xa7, 0x60, 0x44, 0x2c, 0x72, 0xb7, 0x58, 0xe2, 0x22, 0x0f, 0xad, 0x91, - 0xa4, 0xd8, 0x61, 0x44, 0xe0, 0x06, 0xd0, 0xf3, 0x95, 0xe5, 0xbb, 0xdf, 0x18, 0x4e, 0x47, 0xad, - 0x8f, 0x1f, 0x3f, 0x96, 0xc4, 0x30, 0xde, 0x86, 0x90, 0x8a, 0x18, 0x72, 0x8e, 0x12, 0x10, 0x0e, - 0xbc, 0x3b, 0x94, 0xcc, 0x12, 0x36, 0xb1, 0x8b, 0x5b, 0xa5, 0xa9, 0x2f, 0x67, 0xe9, 0xb8, 0xee, - 0xf2, 0xb0, 0xf1, 0x85, 0x79, 0x9f, 0x5f, 0xf4, 0x2f, 0x16, 0xe2, 0x50, 0x5b, 0xe2, 0x1d, 0xdb, - 0x9f, 0xe3, 0x80, 0x46, 0x8f, 0xa6, 0xa3, 0xc6, 0x3b, 0x0d, 0xea, 0xbc, 0xc3, 0xad, 0x46, 0x8f, - 0x7e, 0x8c, 0x0c, 0xf7, 0xf9, 0x64, 0x5f, 0xc0, 0x5e, 0x0c, 0x63, 0x44, 0xc3, 0xc4, 0x1c, 0x17, - 0xd6, 0xa4, 0x8c, 0x8b, 0x91, 0x3e, 0x3f, 0x7a, 0x9e, 0x50, 0x2a, 0xa0, 0x9e, 0x87, 0x28, 0x5b, - 0xd2, 0x40, 0xef, 0xac, 0xac, 0x01, 0x63, 0xc9, 0x44, 0xed, 0xa6, 0x55, 0x52, 0x00, 0x72, 0x0c, - 0xa1, 0x8d, 0x7c, 0xe3, 0xbe, 0xa8, 0xf1, 0xb2, 0x5f, 0x39, 0x46, 0xcf, 0x17, 0x18, 0xce, 0xde, - 0x3a, 0x0f, 0x85, 0xfa, 0x67, 0x04, 0xbd, 0x22, 0xa0, 0xc8, 0xf0, 0xb2, 0xbb, 0x6e, 0x11, 0x94, - 0x3c, 0x46, 0xb6, 0xaa, 0xb7, 0x61, 0x59, 0x2b, 0x4f, 0x93, 0xeb, 0x16, 0x40, 0x2c, 0x28, 0x07, - 0xc2, 0xbd, 0x8c, 0x75, 0x8b, 0xa0, 0x8e, 0xe9, 0xf9, 0x61, 0x08, 0xad, 0xf1, 0x1e, 0x29, 0x56, - 0xaf, 0x0d, 0x30, 0x90, 0xac, 0x58, 0xf4, 0xdb, 0x9a, 0x30, 0xa1, 0xc4, 0x58, 0x76, 0x88, 0x35, - 0xd7, 0x8c, 0x0c, 0x23, 0x7a, 0xdf, 0x0b, 0x5f, 0x1a, 0x60, 0x94, 0x92, 0x6b, 0xe8, 0x68, 0xf7, - 0xa3, 0x09, 0x47, 0xff, 0x50, 0xe5, 0xcb, 0x1d, 0xa0, 0x19, 0xb8, 0x47, 0xd9, 0xa7, 0xef, 0xb6, - 0xc4, 0x9c, 0x65, 0x2d, 0x9a, 0x94, 0x84, 0x3a, 0xd5, 0x7f, 0xe6, 0x89, 0x8b, 0x80, 0xf7, 0x42, - 0xc6, 0x45, 0x91, 0xb3, 0x25, 0xc6, 0x3e, 0xe7, 0xb9, 0x38, 0xb3, 0x71, 0x01, 0xb1, 0x64, 0x4a, - 0xc3, 0x90, 0x12, 0x97, 0x27, 0x58, 0x28, 0x80, 0x3e, 0xb6, 0x30, 0x1a, 0x5e, 0x66, 0x8c, 0x72, - 0xf0, 0x26, 0xd8, 0xcf, 0xf2, 0xc9, 0x04, 0xba, 0xdc, 0xd2, 0xe9, 0x7e, 0xbb, 0x5d, 0x79, 0xba, - 0xfd, 0x83, 0x76, 0x3b, 0x3b, 0xa0, 0x7a, 0x32, 0xe6, 0x2e, 0xbb, 0x22, 0x47, 0xe8, 0xb2, 0xe1, - 0x57, 0xee, 0xc3, 0x89, 0xcf, 0x20, 0xcf, 0x62, 0xfa, 0xd1, 0x09, 0x4d, 0x21, 0x1a, 0x02, 0xda, - 0x0d, 0x57, 0x8b, 0xe6, 0x78, 0xa4, 0xae, 0x90, 0x9d, 0x0e, 0x0b, 0xf3, 0xa6, 0xd1, 0xc5, 0x6a, - 0xee, 0xe4, 0xa7, 0x09, 0x45, 0x2f, 0xbf, 0xc3, 0x3c, 0x36, 0xf1, 0x93, 0xf0, 0x99, 0x26, 0x0c, - 0xaa, 0x1a, 0x3f, 0xf0, 0x88, 0xc7, 0x99, 0xc0, 0x72, 0x00, 0x8c, 0xe6, 0x06, 0xa9, 0xc7, 0xb2, - 0x6a, 0x45, 0xa4, 0x31, 0x22, 0x6a, 0x5d, 0x63, 0x1a, 0x0b, 0x17, 0xc0, 0x6d, 0x8e, 0xa7, 0x7a, - 0x73, 0xe7, 0x22, 0x4c, 0x03, 0x2a, 0x73, 0x4a, 0x7d, 0xd1, 0xbf, 0x45, 0x97, 0x67, 0x59, 0x7a, - 0x35, 0x34, 0x8d, 0x1f, 0x3d, 0x65, 0x17, 0x49, 0x6a, 0xbe, 0x44, 0x8c, 0x97, 0xb1, 0x05, 0x61, - 0x5f, 0x29, 0x30, 0x60, 0xd1, 0x54, 0xce, 0x20, 0x96, 0x0e, 0x0a, 0x3e, 0x82, 0x13, 0x96, 0x09, - 0xa2, 0x45, 0x10, 0x58, 0x34, 0xb8, 0x34, 0x08, 0x20, 0x7f, 0x33, 0x3c, 0xb6, 0x90, 0xcb, 0x56, - 0x3a, 0x7b, 0x83, 0xfb, 0xb9, 0x09, 0x72, 0x7c, 0xc9, 0x21, 0x76, 0x11, 0x5e, 0x55, 0x19, 0x08, - 0xd8, 0x56, 0x14, 0x2b, 0xd9, 0x95, 0x47, 0xc9, 0x80, 0x4a, 0x49, 0x2b, 0x8c, 0xf0, 0xfe, 0xa7, - 0x8f, 0xc7, 0xc7, 0xc7, 0xa7, 0xa4, 0x33, 0x76, 0x8c, 0x6e, 0xf0, 0x1a, 0x3d, 0xd6, 0xc8, 0xf5, - 0xd7, 0xbb, 0x3b, 0x82, 0xf5, 0x35, 0x16, 0x78, 0x78, 0xad, 0x4c, 0x50, 0x68, 0x97, 0x47, 0x11, - 0xe2, 0x16, 0x1c, 0x02, 0xce, 0xcf, 0x92, 0x88, 0x06, 0x64, 0xc6, 0x85, 0x14, 0x0a, 0x75, 0xb5, - 0x2d, 0x43, 0xfa, 0x4a, 0xfc, 0x10, 0xc0, 0x56, 0xaa, 0x33, 0x82, 0x60, 0x31, 0x54, 0x63, 0x90, - 0x44, 0x22, 0x55, 0xa9, 0x4e, 0xd4, 0xb5, 0x19, 0x00, 0xff, 0x78, 0x41, 0x52, 0x8c, 0x21, 0x32, - 0x66, 0x02, 0x33, 0x83, 0x00, 0x4c, 0x80, 0x6a, 0x1b, 0x6b, 0x06, 0x92, 0x42, 0x25, 0xc1, 0x23, - 0x86, 0x54, 0xc0, 0x0b, 0x5e, 0x04, 0x4b, 0xb4, 0x1a, 0x29, 0xc0, 0x32, 0x41, 0x87, 0x57, 0xde, - 0x60, 0x54, 0xc0, 0xfb, 0x51, 0x1c, 0x09, 0xfb, 0x04, 0xaf, 0xb5, 0x42, 0x50, 0x70, 0x1a, 0x06, - 0xcf, 0x1e, 0xb9, 0x18, 0x0d, 0x50, 0x6a, 0xe0, 0x12, 0xaa, 0x63, 0x21, 0x67, 0x14, 0x0f, 0xeb, - 0x1b, 0x3c, 0x5e, 0x75, 0x65, 0xdd, 0xa6, 0x94, 0x51, 0x76, 0x6f, 0x35, 0x58, 0xd8, 0xe5, 0x1f, - 0xf0, 0x6e, 0xc5, 0x70, 0x85, 0x77, 0x97, 0x3c, 0x5b, 0xef, 0xeb, 0x5c, 0xf1, 0x37, 0x29, 0x7c, - 0xd1, 0x19, 0xbb, 0x57, 0x6f, 0x9c, 0x71, 0xe5, 0xbd, 0x53, 0xf7, 0x47, 0x0a, 0x8c, 0x63, 0x6b, - 0xf1, 0x0a, 0x2a, 0x83, 0x2e, 0xe5, 0xd0, 0xe4, 0x2c, 0x95, 0x33, 0xd0, 0xec, 0x23, 0x8b, 0x4a, - 0x78, 0xd3, 0xfd, 0x65, 0x59, 0x90, 0x96, 0x99, 0xd7, 0xd1, 0xc6, 0x79, 0xc0, 0x68, 0xa2, 0xd4, - 0xaf, 0x08, 0x41, 0x41, 0x2c, 0x50, 0xe5, 0xb4, 0xa7, 0xe1, 0xb0, 0x4e, 0x54, 0xb5, 0xb7, 0x2b, - 0xf8, 0x8f, 0x51, 0x31, 0x2b, 0x80, 0x7f, 0x84, 0x37, 0x7d, 0x0b, 0xc0, 0x9f, 0x05, 0x45, 0xcb, - 0x41, 0xe7, 0x2e, 0x5b, 0x15, 0xc7, 0xfe, 0x49, 0xa3, 0xaa, 0x00, 0xda, 0x64, 0x53, 0xdc, 0x56, - 0x6d, 0xea, 0x18, 0x59, 0x33, 0x80, 0x6f, 0xdb, 0xca, 0xe4, 0xaf, 0x5a, 0x8b, 0xdd, 0x04, 0x14, - 0x97, 0xac, 0x74, 0x83, 0xcc, 0xbe, 0xd7, 0xa3, 0x2d, 0x7e, 0x90, 0x33, 0x1c, 0xdc, 0x0e, 0xd7, - 0xe6, 0x3d, 0x63, 0xf5, 0x1d, 0x64, 0x56, 0xa9, 0xa3, 0x26, 0xb2, 0x83, 0xba, 0x80, 0x42, 0x50, - 0xe9, 0xfb, 0x34, 0x80, 0xd0, 0x4c, 0x30, 0x4e, 0xb1, 0xec, 0x87, 0xc2, 0x11, 0x82, 0x0d, 0x4a, - 0x48, 0x08, 0xc2, 0x14, 0x3b, 0xa6, 0x2c, 0x2c, 0xf1, 0x72, 0x5e, 0xf9, 0xd0, 0x0d, 0xc3, 0x25, - 0x79, 0x2c, 0x2a, 0x4e, 0x31, 0x6c, 0x02, 0x95, 0xbf, 0x47, 0x26, 0x1c, 0x89, 0x39, 0x4c, 0x24, - 0x79, 0xd8, 0xbf, 0xcb, 0x51, 0x03, 0x3a, 0x8c, 0x64, 0x09, 0x94, 0x8d, 0xb7, 0x81, 0x70, 0xfd, - 0xf5, 0x7e, 0x74, 0x31, 0x5c, 0x52, 0xc2, 0xa1, 0xa5, 0x45, 0x1f, 0x64, 0x7b, 0x94, 0xf4, 0x97, - 0x6f, 0x3d, 0xd7, 0xe1, 0xd7, 0xc1, 0xd9, 0x68, 0x59, 0x8f, 0x47, 0x87, 0x9a, 0xc5, 0x79, 0xe0, - 0xe3, 0x11, 0xfb, 0xbd, 0x0d, 0xa1, 0x78, 0xfd, 0xf5, 0xbc, 0xdf, 0xd3, 0x4a, 0x2c, 0x4b, 0x90, - 0x05, 0xcf, 0x1d, 0x8f, 0x7d, 0x77, 0x13, 0x87, 0xde, 0x1b, 0x23, 0xaa, 0xfa, 0xe5, 0x32, 0xe1, - 0xe0, 0xd9, 0x5b, 0xa9, 0x2f, 0x57, 0xe7, 0xa5, 0x41, 0x3a, 0x86, 0x76, 0x73, 0x56, 0xbe, 0x45, - 0xd8, 0xe2, 0x7a, 0xdd, 0xeb, 0x79, 0x00, 0x6f, 0xed, 0x84, 0x7f, 0x2c, 0x80, 0xc3, 0xbf, 0xa4, - 0x5c, 0x11, 0xbf, 0xca, 0x1f, 0xf2, 0xf0, 0xcd, 0x12, 0x05, 0x86, 0xef, 0xc2, 0xdd, 0x43, 0x39, - 0x8a, 0x61, 0xe8, 0x9f, 0x0c, 0xe2, 0xc5, 0x5b, 0x8e, 0xad, 0xf8, 0x8c, 0x7b, 0x2b, 0xed, 0xfc, - 0xc1, 0x53, 0xc8, 0xf1, 0x08, 0x6b, 0x90, 0x68, 0xd0, 0xb1, 0xa1, 0x2e, 0xf4, 0xa6, 0x8c, 0xf4, - 0x07, 0x2a, 0xf5, 0xe0, 0x48, 0x80, 0x85, 0x22, 0xd1, 0xe1, 0x06, 0xbb, 0xa9, 0xb1, 0x7f, 0x9d, - 0x8d, 0xa1, 0x26, 0xfd, 0x17, 0x66, 0x2c, 0x55, 0x75, 0xe8, 0xa4, 0x47, 0x66, 0xb0, 0x37, 0x28, - 0xb7, 0x6e, 0xe4, 0x1d, 0xf0, 0x80, 0x43, 0x26, 0x46, 0x89, 0x34, 0x93, 0xa5, 0x70, 0xbe, 0xfa, - 0xb2, 0x11, 0xd5, 0xa1, 0x27, 0x73, 0x08, 0xc6, 0xdc, 0x6b, 0xe9, 0xa2, 0xff, 0xaa, 0xbf, 0x9a, - 0xce, 0xb2, 0x96, 0x8a, 0x5f, 0xac, 0x79, 0xb7, 0xf5, 0x4f, 0x57, 0x03, 0xed, 0x27, 0x80, 0x0d, - 0x51, 0x0d, 0x5c, 0x44, 0xdf, 0x23, 0x6c, 0x74, 0xad, 0x2b, 0x75, 0xe1, 0x76, 0x1b, 0x35, 0x6e, - 0x27, 0x93, 0x2d, 0xf7, 0x6c, 0x57, 0x50, 0x39, 0x93, 0x85, 0xcb, 0x44, 0xb2, 0xfd, 0x0e, 0xf0, - 0xea, 0x1c, 0x48, 0xd4, 0x0d, 0x22, 0x8a, 0x85, 0x8a, 0xeb, 0xe6, 0xf6, 0x38, 0x59, 0xb8, 0x0b, - 0xcc, 0x16, 0x5b, 0x6f, 0xbe, 0xf2, 0xcc, 0x0b, 0xb0, 0xa5, 0xfa, 0x0b, 0xab, 0x65, 0x87, 0xd4, - 0x4b, 0xfa, 0x6f, 0xbe, 0x69, 0x0a, 0x7f, 0x88, 0xfc, 0x60, 0x7d, 0xf5, 0x97, 0x53, 0x1b, 0x1b, - 0xc8, 0x5b, 0xdb, 0xc9, 0xe7, 0xd4, 0x39, 0x88, 0x0f, 0xd4, 0x15, 0x22, 0xba, 0x5a, 0x9c, 0x8a, - 0x59, 0xe0, 0x43, 0x2d, 0x92, 0xc1, 0x02, 0x8f, 0x16, 0xdc, 0x17, 0x54, 0x3d, 0xc1, 0xaf, 0x9e, - 0x72, 0x06, 0xb5, 0x97, 0xa0, 0x4f, 0xd9, 0x15, 0x14, 0x7e, 0xa1, 0x2f, 0x70, 0xd9, 0xa8, 0x3c, - 0xcf, 0x54, 0x3e, 0xc7, 0xba, 0x36, 0x07, 0xfb, 0x68, 0x5a, 0xcd, 0x15, 0x0f, 0xed, 0x82, 0x4c, - 0xd1, 0x83, 0x44, 0x0c, 0xf1, 0x91, 0x0b, 0xe7, 0xc7, 0xd8, 0x37, 0xea, 0x66, 0x57, 0x07, 0x03, - 0xf0, 0x55, 0x11, 0x89, 0xdf, 0x3d, 0x61, 0xa5, 0x33, 0x4f, 0xdd, 0x23, 0x96, 0x40, 0x92, 0x51, - 0x61, 0xdf, 0xa5, 0xa9, 0x47, 0x12, 0xa8, 0xad, 0xcb, 0xfd, 0x74, 0xb7, 0xf7, 0xa6, 0x9f, 0x6e, - 0x36, 0xdb, 0x88, 0x9d, 0xf8, 0xc7, 0xb2, 0xd6, 0xf6, 0xca, 0x2d, 0x0b, 0xd0, 0x1d, 0x7f, 0xd7, - 0xaf, 0x39, 0x3c, 0xb2, 0x8e, 0x4d, 0x07, 0x7f, 0x2d, 0x6b, 0x7d, 0x1f, 0xac, 0x62, 0x05, 0x7f, - 0xd7, 0x33, 0x6a, 0x7f, 0x38, 0xc2, 0x35, 0xf0, 0xbb, 0x81, 0xd1, 0xc7, 0x83, 0x26, 0xb4, 0xc9, - 0xf8, 0xbb, 0x9e, 0x51, 0xd3, 0x52, 0xbb, 0xa9, 0x3f, 0x1b, 0x58, 0x35, 0xb5, 0x50, 0xcd, 0xb2, - 0x54, 0x4b, 0xed, 0x36, 0x80, 0xd7, 0x2f, 0x8c, 0xc5, 0x58, 0x5d, 0x6b, 0x55, 0x21, 0xb2, 0x63, - 0x7a, 0xee, 0x87, 0x71, 0xc2, 0x9f, 0xea, 0x64, 0xc4, 0xa1, 0xc5, 0x1c, 0x73, 0x9a, 0x78, 0xba, - 0xd0, 0x47, 0xb0, 0xcc, 0x80, 0x91, 0xcc, 0x20, 0x28, 0x95, 0x3d, 0x8a, 0x8b, 0x50, 0x4c, 0x56, - 0x1b, 0xbf, 0x04, 0xff, 0xc8, 0x47, 0x5d, 0x63, 0xe1, 0x83, 0x31, 0x7e, 0xb8, 0x86, 0x3f, 0xf8, - 0x71, 0x1b, 0xbf, 0x74, 0xe3, 0x7f, 0x11, 0xfb, 0x1f, 0xa2, 0x19, 0x06, 0x2b, 0x32, 0x26, 0x00, + 0xf9, 0xff, 0xb9, 0xe2, 0x11, 0x0c, 0x75, 0xac, 0x69, 0xc2, 0xd3, 0x58, 0xa8, 0x03, 0x2c, 0x89, + 0x0d, 0x60, 0xa2, 0x6c, 0x8d, 0x7f, 0x97, 0xf7, 0x51, 0x8e, 0x02, 0x3c, 0x35, 0x38, 0x9c, 0x28, + 0x5c, 0x70, 0x88, 0xb1, 0x4c, 0x3d, 0xcc, 0xa8, 0x87, 0x3b, 0x51, 0x77, 0x24, 0x16, 0x47, 0xc4, + 0xc8, 0x26, 0x43, 0x9a, 0x4c, 0xfd, 0xe8, 0xc4, 0x22, 0x34, 0x95, 0x1c, 0x67, 0x41, 0x60, 0x09, + 0x82, 0x37, 0xf0, 0x07, 0xfe, 0x35, 0x8b, 0xa7, 0x83, 0xe2, 0xa9, 0x55, 0x3c, 0x1d, 0x16, 0x4f, + 0x6d, 0xa3, 0x78, 0x3c, 0x2a, 0x9e, 0x3e, 0x14, 0x4f, 0xc7, 0xfa, 0xa9, 0xa1, 0xd8, 0xeb, 0x2d, + 0x46, 0x90, 0xf6, 0x4e, 0x8a, 0x05, 0xb9, 0xc6, 0xf5, 0x09, 0x14, 0xe4, 0x8e, 0xf9, 0x4b, 0x76, + 0xb2, 0x66, 0xee, 0xff, 0xf0, 0xe4, 0x94, 0x49, 0x56, 0x52, 0x1c, 0x14, 0xa5, 0x1f, 0x3c, 0xee, + 0x46, 0xd2, 0x2a, 0x36, 0x69, 0xbd, 0xa5, 0x58, 0x2d, 0xd7, 0x61, 0x41, 0x72, 0xb8, 0xe3, 0x26, + 0xed, 0xb9, 0x5c, 0xed, 0x1d, 0x49, 0x8e, 0x8a, 0x4d, 0x8e, 0x76, 0x95, 0xeb, 0x43, 0x41, 0xf2, + 0x61, 0xc7, 0x4d, 0x8e, 0xe7, 0x72, 0x1d, 0xe7, 0x24, 0x8b, 0xc6, 0x1a, 0x32, 0x97, 0xf9, 0x4f, + 0xec, 0x64, 0x17, 0x66, 0xc3, 0x66, 0xc1, 0x6c, 0xb8, 0xa3, 0xbd, 0x86, 0x07, 0xb9, 0xc4, 0xc3, + 0x83, 0x1d, 0x0f, 0x39, 0x2c, 0xec, 0x35, 0x6c, 0xed, 0xb8, 0xc9, 0xe1, 0x5c, 0xae, 0x1d, 0xed, + 0x35, 0x6c, 0x17, 0x9b, 0xb4, 0x77, 0x95, 0xab, 0xb0, 0xd7, 0xf0, 0x68, 0xc7, 0x4d, 0x3e, 0xcc, + 0xe5, 0xda, 0xd1, 0x5e, 0xc3, 0xe3, 0x62, 0x93, 0x65, 0x73, 0x35, 0x54, 0x74, 0x03, 0xa0, 0x02, + 0xf0, 0x14, 0x36, 0x8b, 0xf8, 0x73, 0x42, 0xe3, 0x75, 0xfc, 0x32, 0x3e, 0x90, 0x13, 0xba, 0x89, + 0x3f, 0x9d, 0xc9, 0x88, 0x09, 0x51, 0xeb, 0x34, 0x32, 0x22, 0x63, 0x37, 0xea, 0x73, 0xd3, 0x39, + 0xe7, 0x01, 0x4f, 0xe6, 0x84, 0x39, 0x1d, 0x05, 0x50, 0x5d, 0xa7, 0xaf, 0x8c, 0xf8, 0x77, 0xd3, + 0xb9, 0x98, 0x4c, 0x98, 0x2b, 0xc5, 0x9c, 0x1a, 0x81, 0x73, 0xd3, 0x8e, 0xa3, 0x5b, 0x68, 0x19, + 0xa1, 0xf4, 0x99, 0x62, 0xc1, 0x4e, 0x78, 0x8c, 0xd5, 0x84, 0xa8, 0x91, 0xcd, 0x34, 0x97, 0x00, + 0x9e, 0x63, 0x9e, 0x46, 0x9e, 0x40, 0xfe, 0x06, 0x22, 0x10, 0xd1, 0x9d, 0x8f, 0x2e, 0x47, 0x04, + 0xd6, 0xc6, 0x1e, 0x20, 0xb7, 0x2b, 0xb1, 0x45, 0x8c, 0xa6, 0xec, 0x64, 0x0b, 0xc7, 0x9e, 0xe9, + 0x6c, 0x60, 0x95, 0x65, 0xbf, 0x38, 0x01, 0x95, 0x12, 0xa8, 0xbc, 0xfb, 0xc3, 0x6d, 0xfc, 0xba, + 0x8b, 0xfc, 0xce, 0x02, 0xf6, 0x42, 0x97, 0xb9, 0x6e, 0xa3, 0x3f, 0x5b, 0xa4, 0x1f, 0x40, 0x53, + 0xe1, 0xc7, 0x82, 0x5c, 0xa5, 0x2c, 0x3b, 0xce, 0x8f, 0x31, 0xbb, 0x5a, 0x64, 0x76, 0x4d, 0xdd, + 0x84, 0xff, 0x18, 0xfd, 0x75, 0x46, 0x8f, 0xd9, 0x3a, 0x86, 0xb2, 0x00, 0x7a, 0x2d, 0xe8, 0x8b, + 0x13, 0x1a, 0x89, 0xd0, 0x17, 0x62, 0x89, 0x43, 0x96, 0x68, 0x87, 0x2b, 0x13, 0xad, 0x95, 0x25, + 0xda, 0x16, 0x3c, 0x18, 0x6b, 0xd3, 0xac, 0xf2, 0x18, 0x70, 0xfa, 0x31, 0xe7, 0xb2, 0x98, 0x82, + 0x26, 0x9b, 0x40, 0x87, 0x15, 0xbc, 0x66, 0x0a, 0x10, 0xf5, 0x4e, 0xc3, 0xc7, 0x9a, 0xa3, 0x60, + 0x24, 0xc2, 0xc0, 0x54, 0x39, 0xba, 0x1f, 0x09, 0x49, 0x23, 0x97, 0x11, 0xec, 0xa3, 0x54, 0x92, + 0xbe, 0x88, 0x54, 0xaa, 0xf4, 0xf3, 0x89, 0x00, 0x26, 0xd6, 0x9e, 0x39, 0x8b, 0xe0, 0x9b, 0x2f, + 0xfa, 0xd0, 0xd7, 0xf4, 0x91, 0x11, 0x39, 0xf3, 0xc5, 0x9c, 0x1c, 0xf2, 0xb0, 0xcb, 0x9f, 0x58, + 0x82, 0x4c, 0xb7, 0xa8, 0xee, 0xa6, 0x8b, 0x17, 0x22, 0x20, 0x65, 0x59, 0xc8, 0x21, 0xa3, 0x81, + 0xf4, 0x43, 0xa6, 0xe4, 0xcb, 0x02, 0x9c, 0xa0, 0x7e, 0x93, 0x6c, 0x62, 0x9b, 0x7c, 0xc3, 0xcc, + 0x63, 0xef, 0xa1, 0x44, 0x0e, 0xa9, 0x0f, 0x9d, 0x5d, 0x1e, 0x42, 0x51, 0xf0, 0xba, 0x45, 0xaa, + 0xeb, 0x5b, 0xb3, 0x50, 0x35, 0xd4, 0x20, 0xce, 0x0d, 0x93, 0xcf, 0x3c, 0x79, 0x24, 0xbd, 0xeb, + 0xdf, 0x89, 0xa2, 0x53, 0xba, 0x85, 0xc9, 0x3b, 0x20, 0x07, 0x5e, 0x82, 0x05, 0x18, 0x49, 0x9a, + 0xb8, 0xd7, 0x57, 0x95, 0xa2, 0xb2, 0x02, 0xf8, 0x06, 0xf6, 0x09, 0xea, 0xc6, 0x00, 0x0f, 0xaa, + 0xc3, 0x97, 0xe8, 0x3e, 0xc2, 0xc4, 0x76, 0x04, 0x10, 0xa1, 0x59, 0x6f, 0x35, 0x49, 0x45, 0x9c, + 0x9d, 0xdf, 0x54, 0x3b, 0x0d, 0xbd, 0xc2, 0x29, 0xad, 0xc4, 0xae, 0xc4, 0x74, 0xce, 0x12, 0xb9, + 0x0f, 0xa2, 0x14, 0x8b, 0xca, 0xfc, 0xc0, 0x6b, 0xb4, 0x24, 0xd0, 0x3c, 0x9a, 0xf9, 0x13, 0xe0, + 0x55, 0x2a, 0x24, 0x0f, 0x09, 0xd6, 0xe8, 0x73, 0xfe, 0x0d, 0x3d, 0xaf, 0x8f, 0xa9, 0xca, 0x66, + 0x84, 0x5b, 0xe8, 0xd3, 0x9c, 0x15, 0xe5, 0xe6, 0xc5, 0x60, 0x97, 0xba, 0x70, 0xf1, 0x54, 0x1b, + 0xdc, 0x57, 0x55, 0xc0, 0xd7, 0x29, 0x18, 0x11, 0xab, 0xdc, 0x2d, 0x96, 0xb8, 0xc8, 0x43, 0x6b, + 0x24, 0x29, 0xb6, 0x18, 0x11, 0xb8, 0x01, 0x34, 0x7d, 0x65, 0xf9, 0xee, 0x37, 0x86, 0xd3, 0x51, + 0xeb, 0xe3, 0xc7, 0x8f, 0x25, 0x31, 0x8c, 0xb7, 0x21, 0xa4, 0x22, 0x86, 0x9c, 0xa3, 0x04, 0x84, + 0x03, 0xef, 0x0e, 0x25, 0xb3, 0x84, 0x4d, 0xec, 0xe2, 0x5a, 0x69, 0xea, 0xcb, 0x59, 0x3a, 0xae, + 0xbb, 0x3c, 0x6c, 0x7c, 0x61, 0xde, 0xe7, 0x17, 0xfd, 0x8b, 0x95, 0x38, 0xd4, 0x96, 0x78, 0xc9, + 0xf6, 0xe7, 0x38, 0xa0, 0xd1, 0xa3, 0xe9, 0xa8, 0xf1, 0x4e, 0x83, 0x3a, 0xef, 0x70, 0xab, 0xd1, + 0xa3, 0x1f, 0x23, 0xc3, 0x7d, 0x3e, 0xd9, 0x17, 0xb0, 0x17, 0xc3, 0x18, 0xd1, 0x30, 0x31, 0xc7, + 0x85, 0x35, 0x29, 0xe3, 0x62, 0xa4, 0xcf, 0x8f, 0x9e, 0x27, 0x94, 0x0a, 0xa8, 0xe7, 0x21, 0xca, + 0x96, 0x34, 0xd0, 0x3b, 0x2b, 0x6b, 0xc0, 0x58, 0x32, 0x51, 0xbb, 0x69, 0x95, 0x14, 0x80, 0x1c, + 0x43, 0xe8, 0x23, 0xdf, 0xb8, 0x2f, 0x6a, 0xbc, 0xec, 0x57, 0x8e, 0xd1, 0xf3, 0x05, 0x86, 0xb3, + 0xb7, 0xce, 0x43, 0xa1, 0xfe, 0x19, 0x41, 0xb3, 0x08, 0x28, 0x32, 0xbc, 0xec, 0xae, 0x5b, 0x04, + 0x25, 0x8f, 0x91, 0xad, 0xea, 0x6d, 0x58, 0xd6, 0xca, 0xd3, 0xe4, 0xba, 0x05, 0x10, 0x0b, 0xca, + 0x81, 0x70, 0x2f, 0x63, 0xdd, 0x22, 0xa8, 0x63, 0x7a, 0x7e, 0x18, 0x42, 0x6f, 0xbc, 0x47, 0x8a, + 0xd5, 0x6b, 0x03, 0x0c, 0x24, 0x2b, 0x16, 0xfd, 0xb6, 0x26, 0x4c, 0x28, 0x31, 0x96, 0x1d, 0x62, + 0xcd, 0x3d, 0x23, 0xc3, 0x88, 0xde, 0xf7, 0xc2, 0x97, 0x06, 0x18, 0xa5, 0xe4, 0x1a, 0x3a, 0xda, + 0xfd, 0x68, 0xc2, 0xd1, 0x3f, 0x54, 0xf9, 0x72, 0x07, 0x68, 0x06, 0xee, 0x51, 0xf6, 0xe9, 0xbb, + 0x2d, 0x31, 0x67, 0x59, 0x8b, 0x26, 0x25, 0xa1, 0x4e, 0xf5, 0x9f, 0x79, 0xe2, 0x22, 0xe0, 0xbd, + 0x90, 0x71, 0x51, 0xe4, 0x6c, 0x89, 0xb1, 0xcf, 0x79, 0x2e, 0xce, 0x6c, 0x5c, 0x40, 0x2c, 0x99, + 0xd2, 0x30, 0xa4, 0xc4, 0xe5, 0x09, 0x16, 0x0a, 0xa0, 0x8f, 0x2d, 0x8c, 0x86, 0x97, 0x19, 0xa3, + 0x1c, 0xbc, 0x09, 0x36, 0xb4, 0x7c, 0x32, 0x81, 0x36, 0xb7, 0x74, 0xba, 0xdf, 0x6e, 0x57, 0x9e, + 0x6e, 0xff, 0xa0, 0xdd, 0xce, 0x0e, 0xa8, 0x9e, 0x8c, 0xb9, 0xcb, 0xae, 0xc8, 0x11, 0xba, 0x6c, + 0xf8, 0x95, 0xfb, 0x70, 0xe2, 0x33, 0xc8, 0xb3, 0x98, 0x7e, 0x74, 0x42, 0x53, 0x88, 0x86, 0x80, + 0x76, 0xc3, 0xd5, 0xa2, 0x39, 0x1e, 0xa9, 0x3b, 0x64, 0xa7, 0xc3, 0xc2, 0xbc, 0x69, 0x74, 0xb1, + 0x9a, 0x3b, 0xf9, 0x69, 0x42, 0xd1, 0xcb, 0xef, 0x30, 0x8f, 0x4d, 0xfc, 0x24, 0x7c, 0xa6, 0x09, + 0x83, 0xaa, 0xc6, 0x0f, 0x3c, 0xe2, 0x71, 0x26, 0xb0, 0x1c, 0x00, 0xa3, 0xb9, 0x41, 0xea, 0xb1, + 0xac, 0x5a, 0x11, 0x69, 0x8c, 0x88, 0x5a, 0xd7, 0x98, 0xc6, 0xc2, 0x05, 0x70, 0x9b, 0xe3, 0xa9, + 0xde, 0xdc, 0xb9, 0x08, 0xd3, 0x80, 0xca, 0x9c, 0x52, 0xdf, 0xf4, 0x6f, 0xd1, 0xe5, 0x59, 0x96, + 0x5e, 0x0d, 0x4d, 0xe3, 0x47, 0x4f, 0xd9, 0x4d, 0x92, 0x9a, 0x2f, 0x11, 0xe3, 0x6d, 0x6c, 0x41, + 0xd8, 0x57, 0x0a, 0x0c, 0x58, 0x34, 0x95, 0x33, 0x88, 0xa5, 0x83, 0x82, 0x8f, 0xe0, 0x84, 0x65, + 0x82, 0x68, 0x11, 0x04, 0x16, 0x0d, 0x2e, 0x0d, 0x02, 0xc8, 0xdf, 0x0c, 0x8f, 0x2d, 0xe4, 0xb2, + 0x95, 0xce, 0xde, 0xe0, 0x7e, 0x6e, 0x82, 0x1c, 0x5f, 0x72, 0x88, 0x5d, 0x84, 0x57, 0x55, 0x06, + 0x02, 0xb6, 0x15, 0xc5, 0x4a, 0x76, 0xe7, 0x51, 0x32, 0xa0, 0x52, 0xd2, 0x0a, 0x23, 0xbc, 0xff, + 0xe9, 0xe3, 0xf1, 0xf1, 0xf1, 0x29, 0xe9, 0x8c, 0x1d, 0xa3, 0x1b, 0xbc, 0x46, 0x8f, 0x35, 0x72, + 0xfd, 0xf5, 0xee, 0x8e, 0x60, 0x7d, 0x8d, 0x05, 0x1e, 0xde, 0x2b, 0x13, 0x14, 0xda, 0xe5, 0x51, + 0x84, 0xb8, 0x05, 0x87, 0x80, 0xf3, 0xb3, 0x24, 0xa2, 0x01, 0x99, 0x71, 0x21, 0x85, 0x42, 0x5d, + 0x6d, 0xcb, 0x90, 0xbe, 0x12, 0x3f, 0x04, 0xb0, 0x95, 0xea, 0x8c, 0x20, 0x58, 0x0c, 0xd5, 0x18, + 0x24, 0x91, 0x48, 0x55, 0xaa, 0x13, 0x75, 0x6f, 0x06, 0xc0, 0x3f, 0x5e, 0x90, 0x14, 0x63, 0x88, + 0x8c, 0x99, 0xc0, 0xcc, 0x20, 0x00, 0x13, 0xa0, 0xda, 0xc6, 0x9a, 0x81, 0xa4, 0x50, 0x49, 0xf0, + 0x88, 0x21, 0x15, 0xf0, 0x82, 0x17, 0xc1, 0x12, 0xad, 0x46, 0x0a, 0xb0, 0x4c, 0xd0, 0xe1, 0x95, + 0x37, 0x18, 0x15, 0xf0, 0x7e, 0x14, 0x47, 0xc2, 0x3e, 0xc1, 0x6b, 0xad, 0x10, 0x14, 0x9c, 0x86, + 0xc1, 0xb3, 0x47, 0x2e, 0x46, 0x03, 0x94, 0x1a, 0xb8, 0x84, 0xea, 0x58, 0xc8, 0x19, 0xc5, 0xc3, + 0xfa, 0x06, 0x8f, 0x57, 0x5d, 0x59, 0xb7, 0x29, 0x65, 0x94, 0xdd, 0x5b, 0x0d, 0x16, 0x76, 0xf9, + 0x07, 0xbc, 0x5b, 0x31, 0x5c, 0xe1, 0xdd, 0x25, 0xcf, 0xd6, 0xfb, 0x3a, 0x57, 0xfc, 0x4d, 0x0a, + 0x5f, 0x74, 0xc6, 0xee, 0xd5, 0x1b, 0x67, 0x5c, 0x79, 0xf1, 0xd4, 0xfd, 0x91, 0x02, 0xe3, 0xd8, + 0x5a, 0xbc, 0x83, 0xca, 0xa0, 0x4b, 0x39, 0x34, 0x39, 0x4b, 0xe5, 0x0c, 0x34, 0xfb, 0xc8, 0xa2, + 0x12, 0xde, 0x74, 0x7f, 0x59, 0x16, 0xa4, 0x65, 0xe6, 0x75, 0xb4, 0x71, 0x1e, 0x30, 0x9a, 0x28, + 0xf5, 0x2b, 0x42, 0x50, 0x10, 0x0b, 0x54, 0x39, 0xed, 0x69, 0x38, 0xac, 0x13, 0x55, 0xed, 0xed, + 0x0a, 0xfe, 0x63, 0x54, 0xcc, 0x0a, 0xe0, 0x1f, 0xe1, 0x55, 0xdf, 0x02, 0xf0, 0x67, 0x41, 0xd1, + 0x72, 0xd0, 0xb9, 0xcb, 0x56, 0xc5, 0xb1, 0x7f, 0xd2, 0xa8, 0x2a, 0x80, 0x36, 0xd9, 0x14, 0xb7, + 0x55, 0x9b, 0x3a, 0x46, 0xd6, 0x0c, 0xe0, 0xdb, 0xb6, 0x32, 0xf9, 0xab, 0xd6, 0x62, 0x37, 0x01, + 0xc5, 0x25, 0x2b, 0xdd, 0x20, 0xb3, 0xef, 0xf5, 0x68, 0x8b, 0x1f, 0xe4, 0x0c, 0x07, 0xb7, 0xc3, + 0xb5, 0x79, 0xcf, 0x58, 0x7d, 0x09, 0x99, 0x55, 0xea, 0xa8, 0x89, 0xec, 0xa0, 0x2e, 0xa0, 0x10, + 0x54, 0xfa, 0x3e, 0x0d, 0x20, 0x34, 0x13, 0x8c, 0x53, 0x2c, 0xfb, 0xa1, 0x70, 0x84, 0x60, 0x83, + 0x12, 0x12, 0x82, 0x30, 0xc5, 0x8e, 0x29, 0x0b, 0x4b, 0xbc, 0x9d, 0x57, 0x3e, 0x74, 0xc3, 0x70, + 0x49, 0x1e, 0x8b, 0x8a, 0x53, 0x0c, 0x9b, 0x40, 0xe5, 0xef, 0x91, 0x09, 0x47, 0x62, 0x0e, 0x13, + 0x49, 0x1e, 0xf6, 0xef, 0x72, 0xd4, 0x80, 0x0e, 0x23, 0x59, 0x02, 0x65, 0xe3, 0x6d, 0x20, 0x5c, + 0x7f, 0xbd, 0x1f, 0x5d, 0x0c, 0x97, 0x94, 0x70, 0x68, 0x69, 0xd1, 0x07, 0xd9, 0x1e, 0x25, 0xfd, + 0xe5, 0x5b, 0xcf, 0x75, 0xf8, 0x75, 0x70, 0x36, 0x5a, 0xd6, 0xe3, 0xd1, 0xa1, 0x66, 0x71, 0x1e, + 0xf8, 0x78, 0xc4, 0x7e, 0x6f, 0x43, 0x28, 0x5e, 0x7f, 0x3d, 0xef, 0xf7, 0xb4, 0x12, 0xcb, 0x12, + 0x64, 0xc1, 0x73, 0xc7, 0x63, 0xdf, 0xdd, 0xc4, 0xa1, 0xf7, 0xc6, 0x88, 0xaa, 0x7e, 0xb9, 0xc4, + 0xdb, 0xde, 0xed, 0xd4, 0x97, 0xab, 0xf3, 0xd2, 0x20, 0x1d, 0x43, 0xbb, 0x39, 0x2b, 0xdf, 0x22, + 0x6c, 0x71, 0xbd, 0xee, 0xf5, 0x3c, 0x80, 0xb7, 0x76, 0xc2, 0x3f, 0x16, 0xc0, 0xe1, 0x5f, 0x52, + 0xae, 0x88, 0x5f, 0xe5, 0x0f, 0x79, 0xf8, 0x66, 0x89, 0x02, 0xc3, 0x77, 0xe1, 0xee, 0xa1, 0x1c, + 0xc5, 0x30, 0xf4, 0x4f, 0x06, 0xf1, 0xe2, 0x2d, 0xc7, 0x56, 0x7c, 0xc6, 0xbd, 0x95, 0x76, 0xfe, + 0xe0, 0x29, 0xe4, 0x78, 0x84, 0x35, 0x48, 0x34, 0xe8, 0xd8, 0x50, 0x17, 0x7a, 0x53, 0x46, 0xfa, + 0x03, 0x95, 0x7a, 0x70, 0x24, 0xc0, 0x42, 0x91, 0xe8, 0x70, 0x83, 0xdd, 0xd4, 0xd8, 0xbf, 0xce, + 0xc6, 0x50, 0x93, 0xfe, 0x0b, 0x33, 0x96, 0xaa, 0x3a, 0x74, 0xd2, 0x23, 0x33, 0xd8, 0x1b, 0x94, + 0x5b, 0x37, 0xf2, 0x0e, 0x78, 0xc0, 0x21, 0x13, 0xa3, 0x44, 0x9a, 0xc9, 0x52, 0x38, 0x5f, 0x7d, + 0xd9, 0x88, 0xea, 0xd0, 0x93, 0x39, 0x04, 0x63, 0xee, 0xb5, 0x74, 0xd1, 0x7f, 0xd5, 0x5f, 0x4d, + 0x67, 0x59, 0x4b, 0xc5, 0x2f, 0xd6, 0xbc, 0xdb, 0xfa, 0xa7, 0xab, 0x81, 0xf6, 0x13, 0xc0, 0x86, + 0xa8, 0x06, 0x2e, 0xa2, 0xef, 0x11, 0x36, 0xba, 0xd6, 0x95, 0xba, 0x70, 0xbb, 0x8d, 0x1a, 0xb7, + 0x93, 0xc9, 0x96, 0x7b, 0xb6, 0x2b, 0xa8, 0x9c, 0xc9, 0xc2, 0x65, 0x22, 0xd9, 0x7e, 0x07, 0x78, + 0x75, 0x0e, 0x24, 0xea, 0x06, 0x11, 0xc5, 0x42, 0xc5, 0x75, 0x73, 0x7b, 0x9c, 0x2c, 0xdc, 0x05, + 0x66, 0x8b, 0xad, 0x37, 0x9f, 0x79, 0xe6, 0x05, 0xd8, 0x52, 0xfd, 0x85, 0xd5, 0xb2, 0x43, 0xea, + 0x25, 0xfd, 0x37, 0xdf, 0x34, 0x85, 0x3f, 0x44, 0x7e, 0xb0, 0xbe, 0xfa, 0xcb, 0xa9, 0x8d, 0x0d, + 0xe4, 0xad, 0xed, 0xe4, 0x73, 0xea, 0x1c, 0xc4, 0x07, 0xea, 0x0a, 0x11, 0x5d, 0x2d, 0x4e, 0xc5, + 0x2c, 0xf0, 0xa1, 0x16, 0xc9, 0x60, 0x81, 0x47, 0x0b, 0xee, 0x0b, 0xaa, 0x9e, 0xe0, 0x67, 0x4f, + 0x39, 0x83, 0xda, 0x4b, 0xd0, 0xa7, 0xec, 0x0a, 0x0a, 0x3f, 0xd1, 0x17, 0xb8, 0x6c, 0x54, 0x9e, + 0x67, 0x2a, 0x9f, 0x63, 0x5d, 0x9b, 0x83, 0x7d, 0x34, 0xad, 0xe6, 0x8a, 0x87, 0x76, 0x41, 0xa6, + 0xe8, 0x41, 0x22, 0x86, 0xf8, 0xc8, 0x85, 0xf3, 0x63, 0xec, 0x1b, 0x75, 0xb3, 0xab, 0x83, 0x01, + 0xf8, 0xaa, 0x88, 0xc4, 0x0f, 0x9f, 0xb0, 0xd2, 0x99, 0xa7, 0xee, 0x11, 0x4b, 0x20, 0xc9, 0xa8, + 0xb0, 0xef, 0xd2, 0xd4, 0x23, 0x09, 0xd4, 0xd6, 0xe5, 0x7e, 0xba, 0xdb, 0x7b, 0xd3, 0x4f, 0x37, + 0x9b, 0x6d, 0xc4, 0x4e, 0xfc, 0x63, 0x59, 0x6b, 0x7b, 0xe5, 0x96, 0x05, 0xe8, 0x8e, 0xbf, 0xeb, + 0xd7, 0x1c, 0x1e, 0x59, 0xc7, 0xa6, 0x83, 0xbf, 0x96, 0xb5, 0xbe, 0x0f, 0x56, 0xb1, 0x82, 0xbf, + 0xeb, 0x19, 0xb5, 0x3f, 0x1c, 0xe1, 0x1a, 0xf8, 0xdd, 0xc0, 0xe8, 0xe3, 0x41, 0x13, 0xda, 0x64, + 0xfc, 0x5d, 0xcf, 0xa8, 0x69, 0xa9, 0xdd, 0xd4, 0x9f, 0x0d, 0xac, 0x9a, 0x5a, 0xa8, 0x66, 0x59, + 0xaa, 0xa5, 0x76, 0x1b, 0xc0, 0xeb, 0x17, 0xc6, 0x62, 0xac, 0xae, 0xb5, 0xaa, 0x10, 0xd9, 0x31, + 0x3d, 0xf7, 0xc3, 0x38, 0xe1, 0x4f, 0x75, 0x32, 0xe2, 0xd0, 0x62, 0x8e, 0x39, 0x4d, 0x3c, 0x5d, + 0xe8, 0x23, 0x58, 0x66, 0xc0, 0x48, 0x66, 0x10, 0x94, 0xca, 0x1e, 0xc5, 0x45, 0x28, 0x26, 0xab, + 0x8d, 0x9f, 0x82, 0x7f, 0xe4, 0xab, 0xae, 0xb1, 0xf0, 0xc5, 0x18, 0xbf, 0x5c, 0xc3, 0x1f, 0xfc, + 0xba, 0x8d, 0x9f, 0xba, 0xf1, 0xff, 0x88, 0xfd, 0x0f, 0xeb, 0x52, 0xcb, 0xf8, 0x33, 0x26, 0x00, 0x00 }; From 474e86306f3fcc51baa6f183181e61fe42b6c99e Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sat, 24 Dec 2022 22:00:35 +0100 Subject: [PATCH 10/24] Bugfix: incorrect maxWidth after switching from 2D --- wled00/FX_2Dfcn.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 0ac09998..276c1dc3 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -41,6 +41,11 @@ void WS2812FX::setUpMatrix() { customMappingTable = nullptr; customMappingSize = 0; + // important if called from set.cpp, irrelevant if called from cfg.cpp + // fix limits if not a matrix set-up (no finalizeInit() called from set.cpp) + Segment::maxWidth = _length; + Segment::maxHeight = 1; + // isMatrix is set in cfg.cpp or set.cpp if (isMatrix) { uint16_t maxWidth = hPanels * panelW; From 7e48875fd458f1c447f8fd016df5f32d32bb254b Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sun, 25 Dec 2022 11:02:50 +0100 Subject: [PATCH 11/24] Minor optimisation. --- usermods/sht/usermod_sht.h | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index 2244e3ad..c9dec6ba 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -26,9 +26,8 @@ class ShtUsermod : public Usermod const byte shtI2cAddress = 0x44; // i2c address of the sensor. 0x44 is the default for all SHT sensors. Change this, if needed unsigned long shtLastTimeUpdated = 0; // Remembers when we read data the last time bool shtDataRequested = false; // Reading data is done async. This remembers if we asked the sensor to read data - float shtCurrentTempC = 0; // Last read temperature in Celsius - float shtCurrentTempF = 0; // Last read temperature in Fahrenheit - float shtCurrentHumidity = 0; // Last read humidity in RH% + float shtCurrentTempC = 0.0f; // Last read temperature in Celsius + float shtCurrentHumidity = 0.0f; // Last read humidity in RH% void initShtTempHumiditySensor(); @@ -60,7 +59,7 @@ class ShtUsermod : public Usermod float getTemperature(); float getTemperatureC() { return shtCurrentTempC; } - float getTemperatureF() { return shtCurrentTempF; } + float getTemperatureF() { return (shtCurrentTempC * 1.8f) + 32.0f; } float getHumidity() { return shtCurrentHumidity; } const char* getUnitString(); @@ -68,10 +67,10 @@ class ShtUsermod : public Usermod }; // Strings to reduce flash memory usage (used more than twice) -const char ShtUsermod::_name[] PROGMEM = "SHT-Sensor"; -const char ShtUsermod::_enabled[] PROGMEM = "Enabled"; -const char ShtUsermod::_shtType[] PROGMEM = "SHT-Type"; -const char ShtUsermod::_unitOfTemp[] PROGMEM = "Unit"; +const char ShtUsermod::_name[] PROGMEM = "SHT-Sensor"; +const char ShtUsermod::_enabled[] PROGMEM = "Enabled"; +const char ShtUsermod::_shtType[] PROGMEM = "SHT-Type"; +const char ShtUsermod::_unitOfTemp[] PROGMEM = "Unit"; const char ShtUsermod::_haMqttDiscovery[] PROGMEM = "Add-To-HA-MQTT-Discovery"; /** @@ -94,7 +93,6 @@ void ShtUsermod::initShtTempHumiditySensor() shtTempHumidSensor->begin(shtI2cAddress, i2c_sda, i2c_scl); if (shtTempHumidSensor->readStatus() == 0xFFFF) { DEBUG_PRINTF("[%s] SHT init failed!\n", _name); - cleanupShtTempHumiditySensor(); cleanup(); return; } @@ -111,12 +109,8 @@ void ShtUsermod::initShtTempHumiditySensor() */ void ShtUsermod::cleanupShtTempHumiditySensor() { - if (isShtReady()) { - shtTempHumidSensor->reset(); - } - + if (isShtReady()) shtTempHumidSensor->reset(); delete shtTempHumidSensor; - shtInitDone = false; } @@ -130,9 +124,7 @@ void ShtUsermod::cleanupShtTempHumiditySensor() */ void ShtUsermod::cleanup() { - if (isShtReady()) { - cleanupShtTempHumiditySensor(); - } + cleanupShtTempHumiditySensor(); if (pinAllocDone) { PinManagerPinType pins[2] = { { i2c_sda, true }, { i2c_scl, true } }; @@ -226,7 +218,7 @@ void ShtUsermod::publishHomeAssistantAutodiscovery() { * @return void */ void ShtUsermod::appendDeviceToMqttDiscoveryMessage(JsonDocument& root) { - JsonObject device = root.createNestedObject("dev"); + JsonObject device = root.createNestedObject(F("dev")); device[F("ids")] = escapedMac.c_str(); device[F("name")] = serverDescription; device[F("sw")] = versionString; @@ -294,13 +286,11 @@ void ShtUsermod::loop() if (shtTempHumidSensor->dataReady()) { if (shtTempHumidSensor->readData(false)) { shtCurrentTempC = shtTempHumidSensor->getTemperature(); - shtCurrentTempF = shtTempHumidSensor->getFahrenheit(); shtCurrentHumidity = shtTempHumidSensor->getHumidity(); publishTemperatureAndHumidityViaMqtt(); shtReadDataSuccess = true; - } - else { + } else { shtReadDataSuccess = false; } @@ -458,12 +448,10 @@ void ShtUsermod::addToJsonInfo(JsonObject& root) if (shtLastTimeUpdated == 0) { jsonTemp.add(F(" Not read yet")); jsonHumidity.add(F(" Not read yet")); - } - else { + } else { jsonTemp.add(F(" Error")); jsonHumidity.add(F(" Error")); } - return; } @@ -471,7 +459,7 @@ void ShtUsermod::addToJsonInfo(JsonObject& root) jsonHumidity.add(F(" RH")); jsonTemp.add(getTemperature()); - jsonTemp.add(unitOfTemp ? F(" °F") : F(" °C")); + jsonTemp.add(unitOfTemp ? "°F") : "°C"); } /** From c739a7ea2f810e66397961c614f2d4ab346e8c2b Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sun, 25 Dec 2022 11:05:25 +0100 Subject: [PATCH 12/24] Erroneous ) --- usermods/sht/usermod_sht.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index c9dec6ba..721cb7f0 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -459,7 +459,7 @@ void ShtUsermod::addToJsonInfo(JsonObject& root) jsonHumidity.add(F(" RH")); jsonTemp.add(getTemperature()); - jsonTemp.add(unitOfTemp ? "°F") : "°C"); + jsonTemp.add(unitOfTemp ? "°F" : "°C"); } /** From 6f67132f4b29b5ccfb39dbce5d4b020b502ad32c Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Mon, 26 Dec 2022 10:20:45 +0100 Subject: [PATCH 13/24] PROGMEM string optimisation. --- usermods/mpu6050_imu/usermod_mpu6050_imu.h | 2 +- wled00/e131.cpp | 8 ++++---- wled00/wled.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/usermods/mpu6050_imu/usermod_mpu6050_imu.h b/usermods/mpu6050_imu/usermod_mpu6050_imu.h index 4ce51c43..283c986e 100644 --- a/usermods/mpu6050_imu/usermod_mpu6050_imu.h +++ b/usermods/mpu6050_imu/usermod_mpu6050_imu.h @@ -138,7 +138,7 @@ class MPU6050Driver : public Usermod { // (if it's going to break, usually the code will be 1) DEBUG_PRINT(F("DMP Initialization failed (code ")); DEBUG_PRINT(devStatus); - DEBUG_PRINTLN(F(")")); + DEBUG_PRINTLN(")"); } } diff --git a/wled00/e131.cpp b/wled00/e131.cpp index cce5233a..0c459823 100644 --- a/wled00/e131.cpp +++ b/wled00/e131.cpp @@ -96,11 +96,11 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP, byte protocol){ if (e131SkipOutOfSequence) if (seq < e131LastSequenceNumber[previousUniverses] && seq > 20 && e131LastSequenceNumber[previousUniverses] < 250){ - DEBUG_PRINT("skipping E1.31 frame (last seq="); + DEBUG_PRINT(F("skipping E1.31 frame (last seq=")); DEBUG_PRINT(e131LastSequenceNumber[previousUniverses]); - DEBUG_PRINT(", current seq="); + DEBUG_PRINT(F(", current seq=")); DEBUG_PRINT(seq); - DEBUG_PRINT(", universe="); + DEBUG_PRINT(F(", universe=")); DEBUG_PRINT(uni); DEBUG_PRINTLN(")"); return; @@ -444,7 +444,7 @@ void sendArtnetPollReply(ArtPollReply *reply, IPAddress ipAddress, uint16_t port reply->reply_sub_sw = (uint8_t)((portAddress >> 4) & 0x000F); reply->reply_sw_out[0] = (uint8_t)(portAddress & 0x000F); - sprintf((char *)reply->reply_node_report, "#0001 [%04u] OK - WLED v" TOSTRING(WLED_VERSION), pollReplyCount); + snprintf_P((char *)reply->reply_node_report, sizeof(reply->reply_node_report)-1, PSTR("#0001 [%04u] OK - WLED v" TOSTRING(WLED_VERSION)), pollReplyCount); if (pollReplyCount < 9999) { pollReplyCount++; diff --git a/wled00/wled.cpp b/wled00/wled.cpp index e41176f4..a5110106 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -569,7 +569,7 @@ bool WLED::initEthernet() } else { DEBUG_PRINT(F("initE: Failing due to invalid eth_clk_mode (")); DEBUG_PRINT(es.eth_clk_mode); - DEBUG_PRINTLN(F(")")); + DEBUG_PRINTLN(")"); return false; } From 6d1ff7c3f367ba5932fb4e118899a9afb5e0849a Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Mon, 26 Dec 2022 10:25:26 +0100 Subject: [PATCH 14/24] Railway FX - slower minimum speed - allow color 1 & 2 in UI --- wled00/FX.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 6a9ed447..bcbb07f7 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -2351,7 +2351,7 @@ static const char _data_FX_MODE_METEOR_SMOOTH[] PROGMEM = "Meteor Smooth@!,Trail //Railway Crossing / Christmas Fairy lights uint16_t mode_railway() { - uint16_t dur = 40 + (255 - SEGMENT.speed) * 10; + uint16_t dur = (256 - SEGMENT.speed) * 40; uint16_t rampdur = (dur * SEGMENT.intensity) >> 8; if (SEGENV.step > dur) { @@ -2368,16 +2368,16 @@ uint16_t mode_railway() if (SEGENV.aux0) pos = 255 - pos; for (int i = 0; i < SEGLEN; i += 2) { - SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(255 - pos, false, false, 255)); + SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(255 - pos, false, false, 255)); // do not use color 1 or 2, always use palette if (i < SEGLEN -1) { - SEGMENT.setPixelColor(i + 1, SEGMENT.color_from_palette(pos, false, false, 255)); + SEGMENT.setPixelColor(i + 1, SEGMENT.color_from_palette(pos, false, false, 255)); // do not use color 1 or 2, always use palette } } SEGENV.step += FRAMETIME; return FRAMETIME; } -static const char _data_FX_MODE_RAILWAY[] PROGMEM = "Railway@!,Smoothness;;!"; +static const char _data_FX_MODE_RAILWAY[] PROGMEM = "Railway@!,Smoothness;1,2;!"; //Water ripple From be08c01be681141126f4087037a9b1de375729ae Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Wed, 28 Dec 2022 01:01:31 +0100 Subject: [PATCH 15/24] Fix for #2979 --- wled00/FX_fcn.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 98339dc9..5d6ac4ff 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -739,7 +739,7 @@ void Segment::refreshLightCapabilities() { if (bus->getStart() + bus->getLength() <= start) continue; uint8_t type = bus->getType(); - if (type == TYPE_ANALOG_1CH || (!cctFromRgb && type == TYPE_ANALOG_2CH)) capabilities &= 0xFE; // does not support RGB + if (type == TYPE_ONOFF || type == TYPE_ANALOG_1CH || (!cctFromRgb && type == TYPE_ANALOG_2CH)) capabilities &= 0xFE; // does not support RGB if (bus->isRgbw()) capabilities |= 0x02; // segment supports white channel if (!cctFromRgb) { switch (type) { @@ -748,7 +748,7 @@ void Segment::refreshLightCapabilities() { capabilities |= 0x04; //segment supports white CCT } } - if (correctWB && type != TYPE_ANALOG_1CH) capabilities |= 0x04; //white balance correction (uses CCT slider) + if (correctWB && !(type == TYPE_ANALOG_1CH || type == TYPE_ONOFF)) capabilities |= 0x04; //white balance correction (uses CCT slider) uint8_t aWM = Bus::getAutoWhiteMode()<255 ? Bus::getAutoWhiteMode() : bus->getAWMode(); bool whiteSlider = (aWM == RGBW_MODE_DUAL || aWM == RGBW_MODE_MANUAL_ONLY); // white slider allowed if (bus->isRgbw() && (whiteSlider || !(capabilities & 0x01))) capabilities |= 0x08; // allow white channel adjustments (AWM allows or is not RGB) From 00d0ddb4b582591ef26d83b6f97fc59d2d3b8ff3 Mon Sep 17 00:00:00 2001 From: Maximilian Mewes Date: Wed, 28 Dec 2022 01:50:04 +0100 Subject: [PATCH 16/24] fixed pinowner comments (hex is not correct and the order is wrong) --- wled00/pin_manager.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/wled00/pin_manager.h b/wled00/pin_manager.h index af473ca2..b5ddb15b 100644 --- a/wled00/pin_manager.h +++ b/wled00/pin_manager.h @@ -53,13 +53,13 @@ enum struct PinOwner : uint8_t { // #define USERMOD_ID_RTC // 0x0F // Usermod "usermod_rtc.h" -- Uses "standard" HW_I2C pins // #define USERMOD_ID_ELEKSTUBE_IPS // 0x10 // Usermod "usermod_elekstube_ips.h" -- Uses quite a few pins ... see Hardware.h and User_Setup.h // #define USERMOD_ID_SN_PHOTORESISTOR // 0x11 // Usermod "usermod_sn_photoresistor.h" -- Uses hard-coded pin (PHOTORESISTOR_PIN == A0), but could be easily updated to use pinManager + UM_BH1750 = USERMOD_ID_BH1750, // 0x14 // Usermod "usermod_bme280.h -- Uses "standard" HW_I2C pins UM_RGBRotaryEncoder = USERMOD_RGB_ROTARY_ENCODER, // 0x16 // Usermod "rgb-rotary-encoder.h" UM_QuinLEDAnPenta = USERMOD_ID_QUINLED_AN_PENTA, // 0x17 // Usermod "quinled-an-penta.h" - UM_BME280 = USERMOD_ID_BME280, // 0x18 // Usermod "usermod_bme280.h -- Uses "standard" HW_I2C pins - UM_BH1750 = USERMOD_ID_BH1750, // 0x19 // Usermod "usermod_bme280.h -- Uses "standard" HW_I2C pins - UM_Audioreactive = USERMOD_ID_AUDIOREACTIVE, // 0x1E // Usermod "audio_reactive.h" - UM_SdCard = USERMOD_ID_SD_CARD, // 0x24 // Usermod "usermod_sd_card.h" - UM_PWM_OUTPUTS = USERMOD_ID_PWM_OUTPUTS // 0x21 // Usermod "usermod_pwm_outputs.h" + UM_BME280 = USERMOD_ID_BME280, // 0x1E // Usermod "usermod_bme280.h -- Uses "standard" HW_I2C pins + UM_Audioreactive = USERMOD_ID_AUDIOREACTIVE, // 0x20 // Usermod "audio_reactive.h" + UM_SdCard = USERMOD_ID_SD_CARD, // 0x25 // Usermod "usermod_sd_card.h" + UM_PWM_OUTPUTS = USERMOD_ID_PWM_OUTPUTS // 0x26 // Usermod "usermod_pwm_outputs.h" }; static_assert(0u == static_cast(PinOwner::None), "PinOwner::None must be zero, so default array initialization works as expected"); From 73440e2287bc2a201e705dcf356ff03748e64052 Mon Sep 17 00:00:00 2001 From: Maximilian Mewes <45098772+itCarl@users.noreply.github.com> Date: Wed, 28 Dec 2022 22:40:13 +0100 Subject: [PATCH 17/24] Update Usermod Battery (#2975) * auto-off feature and usermod rename * low-power-indicator, voltage fine tuning, clean-up * corrected small mistakes * Bugfixes, added usermod logo, update readme * minor changes, implemented change requests, optimizationz --- .../battery_connection_schematic_01.png | Bin .../battery_connection_schematic_02.png | Bin .../Battery/assets/battery_info_screen.png | Bin 0 -> 125098 bytes .../Battery/assets/battery_usermod_logo.png | Bin 0 -> 23192 bytes usermods/Battery/battery_defaults.h | 67 ++ usermods/Battery/readme.md | 104 +++ usermods/Battery/usermod_v2_Battery.h | 730 ++++++++++++++++++ .../assets/battery_info_screen.png | Bin 69179 -> 0 bytes usermods/battery_status_basic/readme.md | 68 -- .../usermod_v2_battery_status_basic.h | 398 ---------- wled00/const.h | 2 +- wled00/pin_manager.h | 1 + wled00/usermods_list.cpp | 8 +- 13 files changed, 907 insertions(+), 471 deletions(-) rename usermods/{battery_status_basic => Battery}/assets/battery_connection_schematic_01.png (100%) rename usermods/{battery_status_basic => Battery}/assets/battery_connection_schematic_02.png (100%) create mode 100644 usermods/Battery/assets/battery_info_screen.png create mode 100644 usermods/Battery/assets/battery_usermod_logo.png create mode 100644 usermods/Battery/battery_defaults.h create mode 100644 usermods/Battery/readme.md create mode 100644 usermods/Battery/usermod_v2_Battery.h delete mode 100644 usermods/battery_status_basic/assets/battery_info_screen.png delete mode 100644 usermods/battery_status_basic/readme.md delete mode 100644 usermods/battery_status_basic/usermod_v2_battery_status_basic.h diff --git a/usermods/battery_status_basic/assets/battery_connection_schematic_01.png b/usermods/Battery/assets/battery_connection_schematic_01.png similarity index 100% rename from usermods/battery_status_basic/assets/battery_connection_schematic_01.png rename to usermods/Battery/assets/battery_connection_schematic_01.png diff --git a/usermods/battery_status_basic/assets/battery_connection_schematic_02.png b/usermods/Battery/assets/battery_connection_schematic_02.png similarity index 100% rename from usermods/battery_status_basic/assets/battery_connection_schematic_02.png rename to usermods/Battery/assets/battery_connection_schematic_02.png diff --git a/usermods/Battery/assets/battery_info_screen.png b/usermods/Battery/assets/battery_info_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa60a031f9f606dbcb120cc1f49d237dca395cf GIT binary patch literal 125098 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 literal 0 HcmV?d00001 diff --git a/usermods/Battery/assets/battery_usermod_logo.png b/usermods/Battery/assets/battery_usermod_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b1134eb3b466a46aea428ebe1dac9ba1ddbb1467 GIT binary patch literal 23192 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 literal 0 HcmV?d00001 diff --git a/usermods/Battery/battery_defaults.h b/usermods/Battery/battery_defaults.h new file mode 100644 index 00000000..f1abe56c --- /dev/null +++ b/usermods/Battery/battery_defaults.h @@ -0,0 +1,67 @@ +// pin defaults +// for the esp32 it is best to use the ADC1: GPIO32 - GPIO39 +// https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html +#ifndef USERMOD_BATTERY_MEASUREMENT_PIN + #ifdef ARDUINO_ARCH_ESP32 + #define USERMOD_BATTERY_MEASUREMENT_PIN 35 + #else //ESP8266 boards + #define USERMOD_BATTERY_MEASUREMENT_PIN A0 + #endif +#endif + +// the frequency to check the battery, 30 sec +#ifndef USERMOD_BATTERY_MEASUREMENT_INTERVAL + #define USERMOD_BATTERY_MEASUREMENT_INTERVAL 30000 +#endif + +// default for 18650 battery +// https://batterybro.com/blogs/18650-wholesale-battery-reviews/18852515-when-to-recycle-18650-batteries-and-how-to-start-a-collection-center-in-your-vape-shop +// Discharge voltage: 2.5 volt + .1 for personal safety +#ifndef USERMOD_BATTERY_MIN_VOLTAGE + #define USERMOD_BATTERY_MIN_VOLTAGE 2.6f +#endif + +#ifndef USERMOD_BATTERY_MAX_VOLTAGE + #define USERMOD_BATTERY_MAX_VOLTAGE 4.2f +#endif + +// a common capacity for single 18650 battery cells is between 2500 and 3600 mAh +#ifndef USERMOD_BATTERY_TOTAL_CAPACITY + #define USERMOD_BATTERY_TOTAL_CAPACITY 3100 +#endif + +// offset or calibration value to fine tune the calculated voltage +#ifndef USERMOD_BATTERY_CALIBRATION + #define USERMOD_BATTERY_CALIBRATION 0 +#endif + +// calculate remaining time / the time that is left before the battery runs out of power +// #ifndef USERMOD_BATTERY_CALCULATE_TIME_LEFT_ENABLED +// #define USERMOD_BATTERY_CALCULATE_TIME_LEFT_ENABLED false +// #endif + +// auto-off feature +#ifndef USERMOD_BATTERY_AUTO_OFF_ENABLED + #define USERMOD_BATTERY_AUTO_OFF_ENABLED true +#endif + +#ifndef USERMOD_BATTERY_AUTO_OFF_THRESHOLD + #define USERMOD_BATTERY_AUTO_OFF_THRESHOLD 10 +#endif + +// low power indication feature +#ifndef USERMOD_BATTERY_LOW_POWER_INDICATOR_ENABLED + #define USERMOD_BATTERY_LOW_POWER_INDICATOR_ENABLED true +#endif + +#ifndef USERMOD_BATTERY_LOW_POWER_INDICATOR_PRESET + #define USERMOD_BATTERY_LOW_POWER_INDICATOR_PRESET 0 +#endif + +#ifndef USERMOD_BATTERY_LOW_POWER_INDICATOR_THRESHOLD + #define USERMOD_BATTERY_LOW_POWER_INDICATOR_THRESHOLD 20 +#endif + +#ifndef USERMOD_BATTERY_LOW_POWER_INDICATOR_DURATION + #define USERMOD_BATTERY_LOW_POWER_INDICATOR_DURATION 5 +#endif \ No newline at end of file diff --git a/usermods/Battery/readme.md b/usermods/Battery/readme.md new file mode 100644 index 00000000..d77eeccd --- /dev/null +++ b/usermods/Battery/readme.md @@ -0,0 +1,104 @@ +

+ +

+ +# Welcome to the battery usermod! 🔋 + +Enables battery level monitoring of your project. + +For this to work, the positive side of the (18650) battery must be connected to pin `A0` of the d1 mini/esp8266 with a 100k Ohm resistor (see [Useful Links](#useful-links)). + +If you have an ESP32 board, connect the positive side of the battery to ADC1 (GPIO32 - GPIO39) + +

+ +

+ +## ⚙️ Features + +- 💯 Displays current battery voltage +- 🚥 Displays battery level +- 🚫 Auto-off with configurable Threshold +- 🚨 Low power indicator with many configuration posibilities + +## 🎈 Installation + +define `USERMOD_BATTERY` in `wled00/my_config.h` + +### Example wiring + +

+ +

+ +### Define Your Options + +| Name | Unit | Description | +| ----------------------------------------------- | ----------- |-------------------------------------------------------------------------------------- | +| `USERMOD_BATTERY` | | define this (in `my_config.h`) to have this usermod included wled00\usermods_list.cpp | +| `USERMOD_BATTERY_MEASUREMENT_PIN` | | defaults to A0 on ESP8266 and GPIO32 on ESP32 | +| `USERMOD_BATTERY_MEASUREMENT_INTERVAL` | ms | battery check interval. defaults to 30 seconds | +| `USERMOD_BATTERY_MIN_VOLTAGE` | v | minimum battery voltage. default is 2.6 (18650 battery standard) | +| `USERMOD_BATTERY_MAX_VOLTAGE` | v | maximum battery voltage. default is 4.2 (18650 battery standard) | +| `USERMOD_BATTERY_TOTAL_CAPACITY` | mAh | the capacity of all cells in parralel sumed up | +| `USERMOD_BATTERY_CALIBRATION` | | offset / calibration number, fine tune the measured voltage by the microcontroller | +| Auto-Off | --- | --- | +| `USERMOD_BATTERY_AUTO_OFF_ENABLED` | true/false | enables auto-off | +| `USERMOD_BATTERY_AUTO_OFF_THRESHOLD` | % (0-100) | when this threshold is reached master power turns off | +| Low-Power-Indicator | --- | --- | +| `USERMOD_BATTERY_LOW_POWER_INDICATOR_ENABLED` | true/false | enables low power indication | +| `USERMOD_BATTERY_LOW_POWER_INDICATOR_PRESET` | preset id | when low power is detected then use this preset to indicate low power | +| `USERMOD_BATTERY_LOW_POWER_INDICATOR_THRESHOLD` | % (0-100) | when this threshold is reached low power gets indicated | +| `USERMOD_BATTERY_LOW_POWER_INDICATOR_DURATION` | seconds | for this long the configured preset is played | + +All parameters can be configured at runtime via the Usermods settings page. + +## ⚠️ Important + +- Make sure you know your battery specifications! All batteries are **NOT** the same! +- Example: + +| Your battery specification table | | Options you can define | +| :-------------------------------- |:--------------- | :---------------------------- | +| Capacity | 3500mAh 12,5 Wh | | +| Minimum capacity | 3350mAh 11,9 Wh | | +| Rated voltage | 3.6V - 3.7V | | +| **Charging end voltage** | **4,2V ± 0,05** | `USERMOD_BATTERY_MAX_VOLTAGE` | +| **Discharge voltage** | **2,5V** | `USERMOD_BATTERY_MIN_VOLTAGE` | +| Max. discharge current (constant) | 10A (10000mA) | | +| max. charging current | 1.7A (1700mA) | | +| ... | ... | ... | +| .. | .. | .. | + +Specification from: [Molicel INR18650-M35A, 3500mAh 10A Lithium-ion battery, 3.6V - 3.7V](https://www.akkuteile.de/lithium-ionen-akkus/18650/molicel/molicel-inr18650-m35a-3500mah-10a-lithium-ionen-akku-3-6v-3-7v_100833) + +## 🌐 Useful Links + +- https://lazyzero.de/elektronik/esp8266/wemos_d1_mini_a0/start +- https://arduinodiy.wordpress.com/2016/12/25/monitoring-lipo-battery-voltage-with-wemos-d1-minibattery-shield-and-thingspeak/ + +## 📝 Change Log + +2022-12-25 + +- added "auto-off" feature +- added "low-power-indication" feature +- added "calibration/offset" field to configuration page +- added getter and setter, so that user usermods could interact with this one +- update readme (added new options, made it markdownlint compliant) + +2021-09-02 + +- added "Battery voltage" to info +- added circuit diagram to readme +- added MQTT support, sending battery voltage +- minor fixes + +2021-08-15 + +- changed `USERMOD_BATTERY_MIN_VOLTAGE` to 2.6 volt as default for 18650 batteries +- Updated readme, added specification table + +2021-08-10 + +- Created diff --git a/usermods/Battery/usermod_v2_Battery.h b/usermods/Battery/usermod_v2_Battery.h new file mode 100644 index 00000000..c46a8791 --- /dev/null +++ b/usermods/Battery/usermod_v2_Battery.h @@ -0,0 +1,730 @@ +#pragma once + +#include "wled.h" +#include "battery_defaults.h" + +/* + * Usermod by Maximilian Mewes + * Mail: mewes.maximilian@gmx.de + * GitHub: itCarl + * Date: 25.12.2022 + * If you have any questions, please feel free to contact me. + */ +class UsermodBattery : public Usermod +{ + private: + // battery pin can be defined in my_config.h + int8_t batteryPin = USERMOD_BATTERY_MEASUREMENT_PIN; + // how often to read the battery voltage + unsigned long readingInterval = USERMOD_BATTERY_MEASUREMENT_INTERVAL; + unsigned long nextReadTime = 0; + unsigned long lastReadTime = 0; + // battery min. voltage + float minBatteryVoltage = USERMOD_BATTERY_MIN_VOLTAGE; + // battery max. voltage + float maxBatteryVoltage = USERMOD_BATTERY_MAX_VOLTAGE; + // all battery cells summed up + unsigned int totalBatteryCapacity = USERMOD_BATTERY_TOTAL_CAPACITY; + // raw analog reading + float rawValue = 0.0f; + // calculated voltage + float voltage = maxBatteryVoltage; + // mapped battery level based on voltage + int8_t batteryLevel = 100; + // offset or calibration value to fine tune the calculated voltage + float calibration = USERMOD_BATTERY_CALIBRATION; + + // time left estimation feature + // bool calculateTimeLeftEnabled = USERMOD_BATTERY_CALCULATE_TIME_LEFT_ENABLED; + // float estimatedTimeLeft = 0.0; + + // auto shutdown/shutoff/master off feature + bool autoOffEnabled = USERMOD_BATTERY_AUTO_OFF_ENABLED; + int8_t autoOffThreshold = USERMOD_BATTERY_AUTO_OFF_THRESHOLD; + + // low power indicator feature + bool lowPowerIndicatorEnabled = USERMOD_BATTERY_LOW_POWER_INDICATOR_ENABLED; + int8_t lowPowerIndicatorPreset = USERMOD_BATTERY_LOW_POWER_INDICATOR_PRESET; + int8_t lowPowerIndicatorThreshold = USERMOD_BATTERY_LOW_POWER_INDICATOR_THRESHOLD; + int8_t lowPowerIndicatorReactivationThreshold = lowPowerIndicatorThreshold+10; + int8_t lowPowerIndicatorDuration = USERMOD_BATTERY_LOW_POWER_INDICATOR_DURATION; + bool lowPowerIndicationDone = false; + unsigned long lowPowerActivationTime = 0; // used temporary during active time + int8_t lastPreset = 0; + + bool initDone = false; + bool initializing = true; + + // strings to reduce flash memory usage (used more than twice) + static const char _name[]; + static const char _readInterval[]; + static const char _enabled[]; + static const char _threshold[]; + static const char _preset[]; + static const char _duration[]; + static const char _init[]; + + + // custom map function + // https://forum.arduino.cc/t/floating-point-using-map-function/348113/2 + double mapf(double x, double in_min, double in_max, double out_min, double out_max) + { + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; + } + + float dot2round(float x) + { + float nx = (int)(x * 100 + .5); + return (float)(nx / 100); + } + + /* + * Turn off all leds + */ + void turnOff() + { + bri = 0; + stateUpdated(CALL_MODE_DIRECT_CHANGE); + } + + /* + * Indicate low power by activating a configured preset for a given time and then switching back to the preset that was selected previously + */ + void lowPowerIndicator() + { + if (!lowPowerIndicatorEnabled) return; + if (lowPowerIndicationDone && lowPowerIndicatorReactivationThreshold <= batteryLevel) lowPowerIndicationDone = false; + if (lowPowerIndicatorThreshold <= batteryLevel) return; + if (lowPowerIndicationDone) return; + if (lowPowerActivationTime <= 1) { + lowPowerActivationTime = millis(); + lastPreset = currentPreset; + applyPreset(lowPowerIndicatorPreset); + } + + if (lowPowerActivationTime+(lowPowerIndicatorDuration*1000) <= millis()) { + lowPowerIndicationDone = true; + lowPowerActivationTime = 0; + applyPreset(lastPreset); + } + } + + public: + //Functions called by WLED + + /* + * setup() is called once at boot. WiFi is not yet connected at this point. + * You can use it to initialize variables, sensors or similar. + */ + void setup() + { + #ifdef ARDUINO_ARCH_ESP32 + bool success = false; + DEBUG_PRINTLN(F("Allocating battery pin...")); + if (batteryPin >= 0 && digitalPinToAnalogChannel(batteryPin) >= 0) + if (pinManager.allocatePin(batteryPin, false, PinOwner::UM_Battery)) { + DEBUG_PRINTLN(F("Battery pin allocation succeeded.")); + success = true; + } + + if (!success) { + DEBUG_PRINTLN(F("Battery pin allocation failed.")); + batteryPin = -1; // allocation failed + } + #else //ESP8266 boards have only one analog input pin A0 + + pinMode(batteryPin, INPUT); + #endif + + nextReadTime = millis() + readingInterval; + lastReadTime = millis(); + + initDone = true; + } + + + /* + * connected() is called every time the WiFi is (re)connected + * Use it to initialize network interfaces + */ + void connected() + { + //Serial.println("Connected to WiFi!"); + } + + + /* + * loop() is called continuously. Here you can check for events, read sensors, etc. + * + */ + void loop() + { + if(strip.isUpdating()) return; + + lowPowerIndicator(); + + // check the battery level every USERMOD_BATTERY_MEASUREMENT_INTERVAL (ms) + if (millis() < nextReadTime) return; + + nextReadTime = millis() + readingInterval; + lastReadTime = millis(); + initializing = false; + + // read battery raw input + rawValue = analogRead(batteryPin); + + // calculate the voltage + voltage = ((rawValue / getAdcPrecision()) * maxBatteryVoltage) + calibration; + // check if voltage is within specified voltage range + voltage = voltagemaxBatteryVoltage?-1.0f:voltage; + + // translate battery voltage into percentage + /* + the standard "map" function doesn't work + https://www.arduino.cc/reference/en/language/functions/math/map/ notes and warnings at the bottom + */ + batteryLevel = mapf(voltage, minBatteryVoltage, maxBatteryVoltage, 0, 100); + + // if (calculateTimeLeftEnabled) { + // float currentBatteryCapacity = totalBatteryCapacity; + // estimatedTimeLeft = (currentBatteryCapacity/strip.currentMilliamps)*60; + // } + + // Auto off -- Master power off + if (autoOffEnabled && (autoOffThreshold >= batteryLevel)) + turnOff(); + + // SmartHome stuff + // still don't know much about MQTT and/or HA + if (WLED_MQTT_CONNECTED) { + char buf[64]; // buffer for snprintf() + snprintf_P(buf, 63, PSTR("/voltage"), mqttDeviceTopic); + mqtt->publish(buf, 0, false, String(voltage).c_str()); + } + + } + + /* + * addToJsonInfo() can be used to add custom entries to the /json/info part of the JSON API. + * Creating an "u" object allows you to add custom key/value pairs to the Info section of the WLED web UI. + * Below it is shown how this could be used for e.g. a light sensor + */ + void addToJsonInfo(JsonObject& root) + { + JsonObject user = root["u"]; + if (user.isNull()) user = root.createNestedObject("u"); + + // info modal display names + JsonArray infoPercentage = user.createNestedArray(F("Battery level")); + JsonArray infoVoltage = user.createNestedArray(F("Battery voltage")); + // if (calculateTimeLeftEnabled) + // { + // JsonArray infoEstimatedTimeLeft = user.createNestedArray(F("Estimated time left")); + // if (initializing) { + // infoEstimatedTimeLeft.add(FPSTR(_init)); + // } else { + // infoEstimatedTimeLeft.add(estimatedTimeLeft); + // infoEstimatedTimeLeft.add(F(" min")); + // } + // } + JsonArray infoNextUpdate = user.createNestedArray(F("Next update")); + + infoNextUpdate.add((nextReadTime - millis()) / 1000); + infoNextUpdate.add(F(" sec")); + + if (initializing) { + infoPercentage.add(FPSTR(_init)); + infoVoltage.add(FPSTR(_init)); + return; + } + + if (batteryLevel < 0) { + infoPercentage.add(F("invalid")); + } else { + infoPercentage.add(batteryLevel); + } + infoPercentage.add(F(" %")); + + if (voltage < 0) { + infoVoltage.add(F("invalid")); + } else { + infoVoltage.add(dot2round(voltage)); + } + infoVoltage.add(F(" V")); + } + + + /* + * addToJsonState() can be used to add custom entries to the /json/state part of the JSON API (state object). + * Values in the state object may be modified by connected clients + */ + /* + void addToJsonState(JsonObject& root) + { + + } + */ + + + /* + * readFromJsonState() can be used to receive data clients send to the /json/state part of the JSON API (state object). + * Values in the state object may be modified by connected clients + */ + /* + void readFromJsonState(JsonObject& root) + { + } + */ + + + /* + * addToConfig() can be used to add custom persistent settings to the cfg.json file in the "um" (usermod) object. + * It will be called by WLED when settings are actually saved (for example, LED settings are saved) + * If you want to force saving the current state, use serializeConfig() in your loop(). + * + * CAUTION: serializeConfig() will initiate a filesystem write operation. + * It might cause the LEDs to stutter and will cause flash wear if called too often. + * Use it sparingly and always in the loop, never in network callbacks! + * + * addToConfig() will make your settings editable through the Usermod Settings page automatically. + * + * Usermod Settings Overview: + * - Numeric values are treated as floats in the browser. + * - If the numeric value entered into the browser contains a decimal point, it will be parsed as a C float + * before being returned to the Usermod. The float data type has only 6-7 decimal digits of precision, and + * doubles are not supported, numbers will be rounded to the nearest float value when being parsed. + * The range accepted by the input field is +/- 1.175494351e-38 to +/- 3.402823466e+38. + * - If the numeric value entered into the browser doesn't contain a decimal point, it will be parsed as a + * C int32_t (range: -2147483648 to 2147483647) before being returned to the usermod. + * Overflows or underflows are truncated to the max/min value for an int32_t, and again truncated to the type + * used in the Usermod when reading the value from ArduinoJson. + * - Pin values can be treated differently from an integer value by using the key name "pin" + * - "pin" can contain a single or array of integer values + * - On the Usermod Settings page there is simple checking for pin conflicts and warnings for special pins + * - Red color indicates a conflict. Yellow color indicates a pin with a warning (e.g. an input-only pin) + * - Tip: use int8_t to store the pin value in the Usermod, so a -1 value (pin not set) can be used + * + * See usermod_v2_auto_save.h for an example that saves Flash space by reusing ArduinoJson key name strings + * + * If you need a dedicated settings page with custom layout for your Usermod, that takes a lot more work. + * You will have to add the setting to the HTML, xml.cpp and set.cpp manually. + * See the WLED Soundreactive fork (code and wiki) for reference. https://github.com/atuline/WLED + * + * I highly recommend checking out the basics of ArduinoJson serialization and deserialization in order to use custom settings! + */ + void addToConfig(JsonObject& root) + { + JsonObject battery = root.createNestedObject(FPSTR(_name)); // usermodname + #ifdef ARDUINO_ARCH_ESP32 + battery["pin"] = batteryPin; + #endif + + // battery[F("time-left")] = calculateTimeLeftEnabled; + battery[F("min-voltage")] = minBatteryVoltage; + battery[F("max-voltage")] = maxBatteryVoltage; + battery[F("capacity")] = totalBatteryCapacity; + battery[F("calibration")] = calibration; + battery[FPSTR(_readInterval)] = readingInterval; + + JsonObject ao = battery.createNestedObject(F("auto-off")); // auto off section + ao[FPSTR(_enabled)] = autoOffEnabled; + ao[FPSTR(_threshold)] = autoOffThreshold; + + JsonObject lp = battery.createNestedObject(F("indicator")); // low power section + lp[FPSTR(_enabled)] = lowPowerIndicatorEnabled; + lp[FPSTR(_preset)] = lowPowerIndicatorPreset; // dropdown trickery (String)lowPowerIndicatorPreset; + lp[FPSTR(_threshold)] = lowPowerIndicatorThreshold; + lp[FPSTR(_duration)] = lowPowerIndicatorDuration; + + DEBUG_PRINTLN(F("Battery config saved.")); + } + + void appendConfigData() + { + oappend(SET_F("addInfo('Battery:min-voltage', 1, 'v');")); + oappend(SET_F("addInfo('Battery:max-voltage', 1, 'v');")); + oappend(SET_F("addInfo('Battery:capacity', 1, 'mAh');")); + oappend(SET_F("addInfo('Battery:interval', 1, 'ms');")); + oappend(SET_F("addInfo('Battery:auto-off:threshold', 1, '%');")); + oappend(SET_F("addInfo('Battery:indicator:threshold', 1, '%');")); + oappend(SET_F("addInfo('Battery:indicator:duration', 1, 's');")); + + // cannot quite get this mf to work. its exeeding some buffer limit i think + // what i wanted is a list of all presets to select one from + // oappend(SET_F("bd=addDropdown('Battery:low-power-indicator', 'preset');")); + // the loop generates: oappend(SET_F("addOption(bd, 'preset name', preset id);")); + // for(int8_t i=1; i < 42; i++) { + // oappend(SET_F("addOption(bd, 'Preset#")); + // oappendi(i); + // oappend(SET_F("',")); + // oappendi(i); + // oappend(SET_F(");")); + // } + } + + + /* + * readFromConfig() can be used to read back the custom settings you added with addToConfig(). + * This is called by WLED when settings are loaded (currently this only happens immediately after boot, or after saving on the Usermod Settings page) + * + * readFromConfig() is called BEFORE setup(). This means you can use your persistent values in setup() (e.g. pin assignments, buffer sizes), + * but also that if you want to write persistent values to a dynamic buffer, you'd need to allocate it here instead of in setup. + * If you don't know what that is, don't fret. It most likely doesn't affect your use case :) + * + * Return true in case the config values returned from Usermod Settings were complete, or false if you'd like WLED to save your defaults to disk (so any missing values are editable in Usermod Settings) + * + * getJsonValue() returns false if the value is missing, or copies the value into the variable provided and returns true if the value is present + * The configComplete variable is true only if the "exampleUsermod" object and all values are present. If any values are missing, WLED will know to call addToConfig() to save them + * + * This function is guaranteed to be called on boot, but could also be called every time settings are updated + */ + bool readFromConfig(JsonObject& root) + { + #ifdef ARDUINO_ARCH_ESP32 + int8_t newBatteryPin = batteryPin; + #endif + + JsonObject battery = root[FPSTR(_name)]; + if (battery.isNull()) + { + DEBUG_PRINT(FPSTR(_name)); + DEBUG_PRINTLN(F(": No config found. (Using defaults.)")); + return false; + } + + #ifdef ARDUINO_ARCH_ESP32 + newBatteryPin = battery[F("pin"] | newBatteryPin; + #endif + // calculateTimeLeftEnabled = battery[F("time-left")] | calculateTimeLeftEnabled; + setMinBatteryVoltage(battery[F("min-Voltage")] | minBatteryVoltage); + setMaxBatteryVoltage(battery[F("max-Voltage")] | maxBatteryVoltage); + setTotalBatteryCapacity(battery[F("capacity")] | totalBatteryCapacity); + setCalibration(battery[F("calibration")] | calibration); + setReadingInterval(battery[FPSTR(_readInterval)] | readingInterval); + + JsonObject ao = battery[F("auto-off")]; + setAutoOffEnabled(ao[FPSTR(_enabled)] | autoOffEnabled); + setAutoOffThreshold(ao[FPSTR(_threshold)] | autoOffThreshold); + + JsonObject lp = battery[F("indicator")]; + setLowPowerIndicatorEnabled(lp[FPSTR(_enabled)] | lowPowerIndicatorEnabled); + setLowPowerIndicatorPreset(lp[FPSTR(_preset)] | lowPowerIndicatorPreset); // dropdown trickery (int)lp["preset"] + setLowPowerIndicatorThreshold(lp[FPSTR(_threshold)] | lowPowerIndicatorThreshold); + lowPowerIndicatorReactivationThreshold = lowPowerIndicatorThreshold+10; + setLowPowerIndicatorDuration(lp[FPSTR(_duration)] | lowPowerIndicatorDuration); + + DEBUG_PRINT(FPSTR(_name)); + + #ifdef ARDUINO_ARCH_ESP32 + if (!initDone) + { + // first run: reading from cfg.json + newBatteryPin = batteryPin; + DEBUG_PRINTLN(F(" config loaded.")); + } + else + { + DEBUG_PRINTLN(F(" config (re)loaded.")); + + // changing paramters from settings page + if (newBatteryPin != batteryPin) + { + // deallocate pin + pinManager.deallocatePin(batteryPin); + batteryPin = newBatteryPin; + // initialise + setup(); + } + } + #endif + + return !battery[FPSTR(_readInterval)].isNull(); + } + + /* + * Generate a preset sample for low power indication + */ + void generateExamplePreset() + { + // StaticJsonDocument<300> j; + // JsonObject preset = j.createNestedObject(); + // preset["mainseg"] = 0; + // JsonArray seg = preset.createNestedArray("seg"); + // JsonObject seg0 = seg.createNestedObject(); + // seg0["id"] = 0; + // seg0["start"] = 0; + // seg0["stop"] = 60; + // seg0["grp"] = 0; + // seg0["spc"] = 0; + // seg0["on"] = true; + // seg0["bri"] = 255; + + // JsonArray col0 = seg0.createNestedArray("col"); + // JsonArray col00 = col0.createNestedArray(); + // col00.add(255); + // col00.add(0); + // col00.add(0); + + // seg0["fx"] = 1; + // seg0["sx"] = 128; + // seg0["ix"] = 128; + + // savePreset(199, "Low power Indicator", preset); + } + + + /* + * + * Getter and Setter. Just in case some other usermod wants to interact with this in the future + * + */ + + /* + * getId() allows you to optionally give your V2 usermod an unique ID (please define it in const.h!). + * This could be used in the future for the system to determine whether your usermod is installed. + */ + uint16_t getId() + { + return USERMOD_ID_BATTERY; + } + + + unsigned long getReadingInterval() + { + return readingInterval; + } + + /* + * minimum repetition is 3000ms (3s) + */ + void setReadingInterval(unsigned long newReadingInterval) + { + readingInterval = max((unsigned long)3000, newReadingInterval); + } + + + /* + * Get lowest configured battery voltage + */ + float getMinBatteryVoltage() + { + return minBatteryVoltage; + } + + /* + * Set lowest battery voltage + * can't be below 0 volt + */ + void setMinBatteryVoltage(float voltage) + { + minBatteryVoltage = max(0.0f, voltage); + } + + /* + * Get highest configured battery voltage + */ + float getMaxBatteryVoltage() + { + return maxBatteryVoltage; + } + + /* + * Set highest battery voltage + * can't be below minBatteryVoltage + */ + void setMaxBatteryVoltage(float voltage) + { + maxBatteryVoltage = max(getMinBatteryVoltage()+1.0f, voltage); + } + + + /* + * Get the capacity of all cells in parralel sumed up + * unit: mAh + */ + unsigned int getTotalBatteryCapacity() + { + return totalBatteryCapacity; + } + + void setTotalBatteryCapacity(unsigned int capacity) + { + totalBatteryCapacity = capacity; + } + + /* + * Get the choosen adc precision + * esp8266 = 10bit resolution = 1024.0f + * esp32 = 12bit resolution = 4095.0f + */ + float getAdcPrecision() + { + #ifdef ARDUINO_ARCH_ESP32 + // esp32 + return 4095.0f; + #else + // esp8266 + return 1024.0f; + #endif + } + + /* + * Get the calculated voltage + * formula: (adc pin value / adc precision * max voltage) + calibration + */ + float getVoltage() + { + return voltage; + } + + /* + * Get the mapped battery level (0 - 100) based on voltage + * important: voltage can drop when a load is applied, so its only an estimate + */ + int8_t getBatteryLevel() + { + return batteryLevel; + } + + /* + * Get the configured calibration value + * a offset value to fine-tune the calculated voltage. + */ + float getCalibration() + { + return calibration; + } + + /* + * Set the voltage calibration offset value + * a offset value to fine-tune the calculated voltage. + */ + void setCalibration(float offset) + { + calibration = offset; + } + + + /* + * Get auto-off feature enabled status + * is auto-off enabled, true/false + */ + bool getAutoOffEnabled() + { + return autoOffEnabled; + } + + /* + * Set auto-off feature status + */ + void setAutoOffEnabled(bool enabled) + { + autoOffEnabled = enabled; + } + + /* + * Get auto-off threshold in percent (0-100) + */ + int8_t getAutoOffThreshold() + { + return autoOffThreshold; + } + + /* + * Set auto-off threshold in percent (0-100) + */ + void setAutoOffThreshold(int8_t threshold) + { + autoOffThreshold = min((int8_t)100, max((int8_t)0, threshold)); + // when low power indicator is enabled the auto-off threshold cannot be above indicator threshold + autoOffThreshold = lowPowerIndicatorEnabled /*&& autoOffEnabled*/ ? min(lowPowerIndicatorThreshold-1, (int)autoOffThreshold) : autoOffThreshold; + } + + + /* + * Get low-power-indicator feature enabled status + * is the low-power-indicator enabled, true/false + */ + bool getLowPowerIndicatorEnabled() + { + return lowPowerIndicatorEnabled; + } + + /* + * Set low-power-indicator feature status + */ + void setLowPowerIndicatorEnabled(bool enabled) + { + lowPowerIndicatorEnabled = enabled; + } + + /* + * Get low-power-indicator preset to activate when low power is detected + */ + int8_t getLowPowerIndicatorPreset() + { + return lowPowerIndicatorPreset; + } + + /* + * Set low-power-indicator preset to activate when low power is detected + */ + void setLowPowerIndicatorPreset(int8_t presetId) + { + // String tmp = ""; For what ever reason this doesn't work :( + // lowPowerIndicatorPreset = getPresetName(presetId, tmp) ? presetId : lowPowerIndicatorPreset; + lowPowerIndicatorPreset = presetId; + } + + /* + * Get low-power-indicator threshold in percent (0-100) + */ + int8_t getLowPowerIndicatorThreshold() + { + return lowPowerIndicatorThreshold; + } + + /* + * Set low-power-indicator threshold in percent (0-100) + */ + void setLowPowerIndicatorThreshold(int8_t threshold) + { + lowPowerIndicatorThreshold = threshold; + // when auto-off is enabled the indicator threshold cannot be below auto-off threshold + lowPowerIndicatorThreshold = autoOffEnabled /*&& lowPowerIndicatorEnabled*/ ? max(autoOffThreshold+1, (int)lowPowerIndicatorThreshold) : max(5, (int)lowPowerIndicatorThreshold); + } + + /* + * Get low-power-indicator duration in seconds + */ + int8_t getLowPowerIndicatorDuration() + { + return lowPowerIndicatorDuration; + } + + /* + * Set low-power-indicator duration in seconds + */ + void setLowPowerIndicatorDuration(int8_t duration) + { + lowPowerIndicatorDuration = duration; + } + + + /* + * Get low-power-indicator status when the indication is done thsi returns true + */ + bool getLowPowerIndicatorDone() + { + return lowPowerIndicationDone; + } +}; + +// strings to reduce flash memory usage (used more than twice) +const char UsermodBattery::_name[] PROGMEM = "Battery"; +const char UsermodBattery::_readInterval[] PROGMEM = "interval"; +const char UsermodBattery::_enabled[] PROGMEM = "enabled"; +const char UsermodBattery::_threshold[] PROGMEM = "threshold"; +const char UsermodBattery::_preset[] PROGMEM = "preset"; +const char UsermodBattery::_duration[] PROGMEM = "duration"; +const char UsermodBattery::_init[] PROGMEM = "init"; \ No newline at end of file diff --git a/usermods/battery_status_basic/assets/battery_info_screen.png b/usermods/battery_status_basic/assets/battery_info_screen.png deleted file mode 100644 index 50eb53465b325bbf97b614648cbbf4c64e43dfd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69179 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 diff --git a/usermods/battery_status_basic/readme.md b/usermods/battery_status_basic/readme.md deleted file mode 100644 index bada8d5f..00000000 --- a/usermods/battery_status_basic/readme.md +++ /dev/null @@ -1,68 +0,0 @@ -# :battery: Battery status/level Usermod :battery: -Enables battery level monitoring of your project. - -You can see the battery level and voltage in the `info modal`. - -For this to work, the positive side of the (18650) battery must be connected to pin `A0` of the d1 mini/esp8266 with a 100k Ohm resistor (see [Useful Links](#useful-links)). - -If you have an ESP32 board, connect the positive side of the battery to ADC1 (GPIO32 - GPIO39) - -

- -

- -## Installation - -define `USERMOD_BATTERY_STATUS_BASIC` in `my_config.h` - -### Basic wiring diagram -

- -

- -### Define Your Options - -* `USERMOD_BATTERY_STATUS_BASIC` - define this (in `my_config.h`) to have this usermod included wled00\usermods_list.cpp -* `USERMOD_BATTERY_MEASUREMENT_PIN` - defaults to A0 on ESP8266 and GPIO32 on ESP32 -* `USERMOD_BATTERY_MEASUREMENT_INTERVAL` - battery check interval. defaults to 30 seconds -* `USERMOD_BATTERY_MIN_VOLTAGE` - minimum battery voltage. default is 2.6 (18650 battery standard) -* `USERMOD_BATTERY_MAX_VOLTAGE` - maximum battery voltage. default is 4.2 (18650 battery standard) - -All parameters can be configured at runtime via the Usermods settings page. - -## Important :warning: -* Make sure you know your battery specifications! All batteries are **NOT** the same! -* Example: - -| Your battery specification table | | Options you can define | -| :-------------------------------- |:--------------- | :---------------------------- | -| Capacity | 3500mAh 12,5 Wh | | -| Minimum capacity | 3350mAh 11,9 Wh | | -| Rated voltage | 3.6V - 3.7V | | -| **Charging end voltage** | **4,2V ± 0,05** | `USERMOD_BATTERY_MAX_VOLTAGE` | -| **Discharge voltage** | **2,5V** | `USERMOD_BATTERY_MIN_VOLTAGE` | -| Max. discharge current (constant) | 10A (10000mA) | | -| max. charging current | 1.7A (1700mA) | | -| ... | ... | ... | -| .. | .. | .. | - -Specification from: [Molicel INR18650-M35A, 3500mAh 10A Lithium-ion battery, 3.6V - 3.7V](https://www.akkuteile.de/lithium-ionen-akkus/18650/molicel/molicel-inr18650-m35a-3500mah-10a-lithium-ionen-akku-3-6v-3-7v_100833) - -## Useful Links -* https://lazyzero.de/elektronik/esp8266/wemos_d1_mini_a0/start -* https://arduinodiy.wordpress.com/2016/12/25/monitoring-lipo-battery-voltage-with-wemos-d1-minibattery-shield-and-thingspeak/ - -## Change Log -2021-09-02 -* added "Battery voltage" to info -* added circuit diagram to readme -* added MQTT support, sending battery voltage -* minor fixes - -2021-08-15 -* changed `USERMOD_BATTERY_MIN_VOLTAGE` to 2.6 volt as default for 18650 batteries -* Updated readme, added specification table - -2021-08-10 -* Created - diff --git a/usermods/battery_status_basic/usermod_v2_battery_status_basic.h b/usermods/battery_status_basic/usermod_v2_battery_status_basic.h deleted file mode 100644 index cb3c0867..00000000 --- a/usermods/battery_status_basic/usermod_v2_battery_status_basic.h +++ /dev/null @@ -1,398 +0,0 @@ -#pragma once - -#include "wled.h" - - - - -// pin defaults -// for the esp32 it is best to use the ADC1: GPIO32 - GPIO39 -// https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html -#ifndef USERMOD_BATTERY_MEASUREMENT_PIN - #ifdef ARDUINO_ARCH_ESP32 - #define USERMOD_BATTERY_MEASUREMENT_PIN 32 - #else //ESP8266 boards - #define USERMOD_BATTERY_MEASUREMENT_PIN A0 - #endif -#endif - -// esp32 has a 12bit adc resolution -// esp8266 only 10bit -#ifndef USERMOD_BATTERY_ADC_PRECISION - #ifdef ARDUINO_ARCH_ESP32 - // 12 bits - #define USERMOD_BATTERY_ADC_PRECISION 4095.0f - #else - // 10 bits - #define USERMOD_BATTERY_ADC_PRECISION 1024.0f - #endif -#endif - - -// the frequency to check the battery, 30 sec -#ifndef USERMOD_BATTERY_MEASUREMENT_INTERVAL - #define USERMOD_BATTERY_MEASUREMENT_INTERVAL 30000 -#endif - - -// default for 18650 battery -// https://batterybro.com/blogs/18650-wholesale-battery-reviews/18852515-when-to-recycle-18650-batteries-and-how-to-start-a-collection-center-in-your-vape-shop -// Discharge voltage: 2.5 volt + .1 for personal safety -#ifndef USERMOD_BATTERY_MIN_VOLTAGE - #define USERMOD_BATTERY_MIN_VOLTAGE 2.6f -#endif - -#ifndef USERMOD_BATTERY_MAX_VOLTAGE - #define USERMOD_BATTERY_MAX_VOLTAGE 4.2f -#endif - -class UsermodBatteryBasic : public Usermod -{ - private: - // battery pin can be defined in my_config.h - int8_t batteryPin = USERMOD_BATTERY_MEASUREMENT_PIN; - // how often to read the battery voltage - unsigned long readingInterval = USERMOD_BATTERY_MEASUREMENT_INTERVAL; - unsigned long nextReadTime = 0; - unsigned long lastReadTime = 0; - // battery min. voltage - float minBatteryVoltage = USERMOD_BATTERY_MIN_VOLTAGE; - // battery max. voltage - float maxBatteryVoltage = USERMOD_BATTERY_MAX_VOLTAGE; - // 0 - 1024 for esp8266 (10-bit resolution) - // 0 - 4095 for esp32 (Default is 12-bit resolution) - float adcPrecision = USERMOD_BATTERY_ADC_PRECISION; - // raw analog reading - float rawValue = 0.0; - // calculated voltage - float voltage = 0.0; - // mapped battery level based on voltage - long batteryLevel = 0; - bool initDone = false; - bool initializing = true; - - - // strings to reduce flash memory usage (used more than twice) - static const char _name[]; - static const char _readInterval[]; - - - // custom map function - // https://forum.arduino.cc/t/floating-point-using-map-function/348113/2 - double mapf(double x, double in_min, double in_max, double out_min, double out_max) - { - return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; - } - - float truncate(float val, byte dec) - { - float x = val * pow(10, dec); - float y = round(x); - float z = x - y; - if ((int)z == 5) - { - y++; - } - x = y / pow(10, dec); - return x; - } - - - - public: - //Functions called by WLED - - /* - * setup() is called once at boot. WiFi is not yet connected at this point. - * You can use it to initialize variables, sensors or similar. - */ - void setup() - { - #ifdef ARDUINO_ARCH_ESP32 - DEBUG_PRINTLN(F("Allocating battery pin...")); - if (batteryPin >= 0 && pinManager.allocatePin(batteryPin, false)) - { - DEBUG_PRINTLN(F("Battery pin allocation succeeded.")); - } else { - if (batteryPin >= 0) DEBUG_PRINTLN(F("Battery pin allocation failed.")); - batteryPin = -1; // allocation failed - } - #else //ESP8266 boards have only one analog input pin A0 - - pinMode(batteryPin, INPUT); - #endif - - nextReadTime = millis() + readingInterval; - lastReadTime = millis(); - - initDone = true; - } - - - /* - * connected() is called every time the WiFi is (re)connected - * Use it to initialize network interfaces - */ - void connected() - { - //Serial.println("Connected to WiFi!"); - } - - - /* - * loop() is called continuously. Here you can check for events, read sensors, etc. - * - */ - void loop() - { - if(strip.isUpdating()) return; - - // check the battery level every USERMOD_BATTERY_MEASUREMENT_INTERVAL (ms) - if (millis() < nextReadTime) return; - - - nextReadTime = millis() + readingInterval; - lastReadTime = millis(); - initializing = false; - - // read battery raw input - rawValue = analogRead(batteryPin); - - // calculate the voltage - voltage = (rawValue / adcPrecision) * maxBatteryVoltage ; - // check if voltage is within specified voltage range - voltage = voltagemaxBatteryVoltage?-1.0f:voltage; - - // translate battery voltage into percentage - /* - the standard "map" function doesn't work - https://www.arduino.cc/reference/en/language/functions/math/map/ notes and warnings at the bottom - */ - batteryLevel = mapf(voltage, minBatteryVoltage, maxBatteryVoltage, 0, 100); - - - // SmartHome stuff - if (WLED_MQTT_CONNECTED) { - char subuf[64]; - strcpy(subuf, mqttDeviceTopic); - strcat_P(subuf, PSTR("/voltage")); - mqtt->publish(subuf, 0, false, String(voltage).c_str()); - } - - } - - - /* - * addToJsonInfo() can be used to add custom entries to the /json/info part of the JSON API. - * Creating an "u" object allows you to add custom key/value pairs to the Info section of the WLED web UI. - * Below it is shown how this could be used for e.g. a light sensor - */ - void addToJsonInfo(JsonObject& root) - { - - JsonObject user = root["u"]; - if (user.isNull()) user = root.createNestedObject("u"); - - // info modal display names - JsonArray batteryPercentage = user.createNestedArray("Battery level"); - JsonArray batteryVoltage = user.createNestedArray("Battery voltage"); - - if (initializing) { - batteryPercentage.add((nextReadTime - millis()) / 1000); - batteryPercentage.add(" sec"); - batteryVoltage.add((nextReadTime - millis()) / 1000); - batteryVoltage.add(" sec"); - return; - } - - if(batteryLevel < 0) { - batteryPercentage.add(F("invalid")); - } else { - batteryPercentage.add(batteryLevel); - } - batteryPercentage.add(F(" %")); - - if(voltage < 0) { - batteryVoltage.add(F("invalid")); - } else { - batteryVoltage.add(truncate(voltage, 2)); - } - batteryVoltage.add(F(" V")); - } - - - /* - * addToJsonState() can be used to add custom entries to the /json/state part of the JSON API (state object). - * Values in the state object may be modified by connected clients - */ - /* - void addToJsonState(JsonObject& root) - { - - } - */ - - - /* - * readFromJsonState() can be used to receive data clients send to the /json/state part of the JSON API (state object). - * Values in the state object may be modified by connected clients - */ - /* - void readFromJsonState(JsonObject& root) - { - } - */ - - - /* - * addToConfig() can be used to add custom persistent settings to the cfg.json file in the "um" (usermod) object. - * It will be called by WLED when settings are actually saved (for example, LED settings are saved) - * If you want to force saving the current state, use serializeConfig() in your loop(). - * - * CAUTION: serializeConfig() will initiate a filesystem write operation. - * It might cause the LEDs to stutter and will cause flash wear if called too often. - * Use it sparingly and always in the loop, never in network callbacks! - * - * addToConfig() will make your settings editable through the Usermod Settings page automatically. - * - * Usermod Settings Overview: - * - Numeric values are treated as floats in the browser. - * - If the numeric value entered into the browser contains a decimal point, it will be parsed as a C float - * before being returned to the Usermod. The float data type has only 6-7 decimal digits of precision, and - * doubles are not supported, numbers will be rounded to the nearest float value when being parsed. - * The range accepted by the input field is +/- 1.175494351e-38 to +/- 3.402823466e+38. - * - If the numeric value entered into the browser doesn't contain a decimal point, it will be parsed as a - * C int32_t (range: -2147483648 to 2147483647) before being returned to the usermod. - * Overflows or underflows are truncated to the max/min value for an int32_t, and again truncated to the type - * used in the Usermod when reading the value from ArduinoJson. - * - Pin values can be treated differently from an integer value by using the key name "pin" - * - "pin" can contain a single or array of integer values - * - On the Usermod Settings page there is simple checking for pin conflicts and warnings for special pins - * - Red color indicates a conflict. Yellow color indicates a pin with a warning (e.g. an input-only pin) - * - Tip: use int8_t to store the pin value in the Usermod, so a -1 value (pin not set) can be used - * - * See usermod_v2_auto_save.h for an example that saves Flash space by reusing ArduinoJson key name strings - * - * If you need a dedicated settings page with custom layout for your Usermod, that takes a lot more work. - * You will have to add the setting to the HTML, xml.cpp and set.cpp manually. - * See the WLED Soundreactive fork (code and wiki) for reference. https://github.com/atuline/WLED - * - * I highly recommend checking out the basics of ArduinoJson serialization and deserialization in order to use custom settings! - */ - void addToConfig(JsonObject& root) - { - // created JSON object: - /* - { - "Battery-Level": { - "pin": "A0", <--- only when using esp32 boards - "minBatteryVoltage": 2.6, - "maxBatteryVoltage": 4.2, - "read-interval-ms": 30000 - } - } - */ - JsonObject battery = root.createNestedObject(FPSTR(_name)); // usermodname - #ifdef ARDUINO_ARCH_ESP32 - battery["pin"] = batteryPin; // usermodparam - #endif - battery["minBatteryVoltage"] = minBatteryVoltage; // usermodparam - battery["maxBatteryVoltage"] = maxBatteryVoltage; // usermodparam - battery[FPSTR(_readInterval)] = readingInterval; - - DEBUG_PRINTLN(F("Battery config saved.")); - } - - - /* - * readFromConfig() can be used to read back the custom settings you added with addToConfig(). - * This is called by WLED when settings are loaded (currently this only happens immediately after boot, or after saving on the Usermod Settings page) - * - * readFromConfig() is called BEFORE setup(). This means you can use your persistent values in setup() (e.g. pin assignments, buffer sizes), - * but also that if you want to write persistent values to a dynamic buffer, you'd need to allocate it here instead of in setup. - * If you don't know what that is, don't fret. It most likely doesn't affect your use case :) - * - * Return true in case the config values returned from Usermod Settings were complete, or false if you'd like WLED to save your defaults to disk (so any missing values are editable in Usermod Settings) - * - * getJsonValue() returns false if the value is missing, or copies the value into the variable provided and returns true if the value is present - * The configComplete variable is true only if the "exampleUsermod" object and all values are present. If any values are missing, WLED will know to call addToConfig() to save them - * - * This function is guaranteed to be called on boot, but could also be called every time settings are updated - */ - bool readFromConfig(JsonObject& root) - { - // looking for JSON object: - /* - { - "BatteryLevel": { - "pin": "A0", <--- only when using esp32 boards - "minBatteryVoltage": 2.6, - "maxBatteryVoltage": 4.2, - "read-interval-ms": 30000 - } - } - */ - #ifdef ARDUINO_ARCH_ESP32 - int8_t newBatteryPin = batteryPin; - #endif - - JsonObject battery = root[FPSTR(_name)]; - if (battery.isNull()) - { - DEBUG_PRINT(FPSTR(_name)); - DEBUG_PRINTLN(F(": No config found. (Using defaults.)")); - return false; - } - - #ifdef ARDUINO_ARCH_ESP32 - newBatteryPin = battery["pin"] | newBatteryPin; - #endif - minBatteryVoltage = battery["minBatteryVoltage"] | minBatteryVoltage; - //minBatteryVoltage = min(12.0f, (int)readingInterval); - maxBatteryVoltage = battery["maxBatteryVoltage"] | maxBatteryVoltage; - //maxBatteryVoltage = min(14.4f, max(3.3f,(int)readingInterval)); - readingInterval = battery["read-interval-ms"] | readingInterval; - readingInterval = max(3000, (int)readingInterval); // minimum repetition is >5000ms (5s) - - DEBUG_PRINT(FPSTR(_name)); - - #ifdef ARDUINO_ARCH_ESP32 - if (!initDone) - { - // first run: reading from cfg.json - newBatteryPin = batteryPin; - DEBUG_PRINTLN(F(" config loaded.")); - } - else - { - DEBUG_PRINTLN(F(" config (re)loaded.")); - - // changing paramters from settings page - if (newBatteryPin != batteryPin) - { - // deallocate pin - pinManager.deallocatePin(batteryPin); - batteryPin = newBatteryPin; - // initialise - setup(); - } - } - #endif - - return !battery[FPSTR(_readInterval)].isNull(); - } - - - /* - * getId() allows you to optionally give your V2 usermod an unique ID (please define it in const.h!). - * This could be used in the future for the system to determine whether your usermod is installed. - */ - uint16_t getId() - { - return USERMOD_ID_BATTERY_STATUS_BASIC; - } -}; - -// strings to reduce flash memory usage (used more than twice) -const char UsermodBatteryBasic::_name[] PROGMEM = "Battery-level"; -const char UsermodBatteryBasic::_readInterval[] PROGMEM = "read-interval-ms"; \ No newline at end of file diff --git a/wled00/const.h b/wled00/const.h index 3ae40de7..3d138ce6 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -79,7 +79,7 @@ #define USERMOD_ID_RTC 15 //Usermod "usermod_rtc.h" #define USERMOD_ID_ELEKSTUBE_IPS 16 //Usermod "usermod_elekstube_ips.h" #define USERMOD_ID_SN_PHOTORESISTOR 17 //Usermod "usermod_sn_photoresistor.h" -#define USERMOD_ID_BATTERY_STATUS_BASIC 18 //Usermod "usermod_v2_battery_status_basic.h" +#define USERMOD_ID_BATTERY 18 //Usermod "usermod_v2_battery.h" #define USERMOD_ID_PWM_FAN 19 //Usermod "usermod_PWM_fan.h" #define USERMOD_ID_BH1750 20 //Usermod "usermod_bh1750.h" #define USERMOD_ID_SEVEN_SEGMENT_DISPLAY 21 //Usermod "usermod_v2_seven_segment_display.h" diff --git a/wled00/pin_manager.h b/wled00/pin_manager.h index b5ddb15b..25e77784 100644 --- a/wled00/pin_manager.h +++ b/wled00/pin_manager.h @@ -50,6 +50,7 @@ enum struct PinOwner : uint8_t { // #define USERMOD_ID_VL53L0X // 0x0C // Usermod "usermod_vl53l0x_gestures.h" -- Uses "standard" HW_I2C pins UM_MultiRelay = USERMOD_ID_MULTI_RELAY, // 0x0D // Usermod "usermod_multi_relay.h" UM_AnimatedStaircase = USERMOD_ID_ANIMATED_STAIRCASE, // 0x0E // Usermod "Animated_Staircase.h" + UM_Battery = USERMOD_ID_BATTERY, // // #define USERMOD_ID_RTC // 0x0F // Usermod "usermod_rtc.h" -- Uses "standard" HW_I2C pins // #define USERMOD_ID_ELEKSTUBE_IPS // 0x10 // Usermod "usermod_elekstube_ips.h" -- Uses quite a few pins ... see Hardware.h and User_Setup.h // #define USERMOD_ID_SN_PHOTORESISTOR // 0x11 // Usermod "usermod_sn_photoresistor.h" -- Uses hard-coded pin (PHOTORESISTOR_PIN == A0), but could be easily updated to use pinManager diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 5472ab03..4e459988 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -11,8 +11,8 @@ */ //#include "../usermods/EXAMPLE_v2/usermod_v2_example.h" -#ifdef USERMOD_BATTERY_STATUS_BASIC - #include "../usermods/battery_status_basic/usermod_v2_battery_status_basic.h" +#ifdef USERMOD_BATTERY + #include "../usermods/battery/usermod_v2_battery.h" #endif #ifdef USERMOD_DALLASTEMPERATURE @@ -193,8 +193,8 @@ void registerUsermods() * \/ \/ \/ */ //usermods.add(new MyExampleUsermod()); - #ifdef USERMOD_BATTERY_STATUS_BASIC - usermods.add(new UsermodBatteryBasic()); + #ifdef USERMOD_BATTERY + usermods.add(new UsermodBattery()); #endif #ifdef USERMOD_DALLASTEMPERATURE From 04dbfcd0e68eca8227939dbf7b65dd339de991c5 Mon Sep 17 00:00:00 2001 From: Leif Date: Fri, 30 Dec 2022 00:04:22 +0100 Subject: [PATCH 18/24] added #DDMM & #HHMM to scrolling text --- wled00/FX.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index bcbb07f7..181a8d35 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -5858,7 +5858,7 @@ uint16_t mode_2Dscrollingtext(void) { char text[33] = {'\0'}; if (SEGMENT.name) for (size_t i=0,j=0; i31 && SEGMENT.name[i]<128) text[j++] = SEGMENT.name[i]; - if (!strlen(text) || !strncmp_P(text,PSTR("#DATE"),5) || !strncmp_P(text,PSTR("#TIME"),5)) { // fallback if empty segment name: display date and time + if (!strlen(text) || !strncmp_P(text,PSTR("#DATE"),5) || !strncmp_P(text,PSTR("#DDMM"),5) || !strncmp_P(text,PSTR("#TIME"),5) || !strncmp_P(text,PSTR("#HHMM"),5)) { // fallback if empty segment name: display date and time char sec[5]; byte AmPmHour = hour(localTime); boolean isitAM = true; @@ -5869,7 +5869,9 @@ uint16_t mode_2Dscrollingtext(void) { if (useAMPM) sprintf_P(sec, PSTR(" %2s"), (isitAM ? "AM" : "PM")); else sprintf_P(sec, PSTR(":%02d"), second(localTime)); if (!strncmp_P(text,PSTR("#DATE"),5)) sprintf_P(text, PSTR("%d.%d.%d"), day(localTime), month(localTime), year(localTime)); + else if (!strncmp_P(text,PSTR("#DDMM"),5)) sprintf_P(text, PSTR("%d.%d"), day(localTime), month(localTime)); else if (!strncmp_P(text,PSTR("#TIME"),5)) sprintf_P(text, PSTR("%2d:%02d%s"), AmPmHour, minute(localTime), sec); + else if (!strncmp_P(text,PSTR("#HHMM"),5)) sprintf_P(text, PSTR("%2d:%02d"), AmPmHour, minute(localTime)); else sprintf_P(text, PSTR("%s %d, %d %2d:%02d%s"), monthShortStr(month(localTime)), day(localTime), year(localTime), AmPmHour, minute(localTime), sec); } const int numberOfLetters = strlen(text); From 1e157e95b64f014e37dbb7312d7b72be6fd4cb46 Mon Sep 17 00:00:00 2001 From: Mark Breen Date: Fri, 30 Dec 2022 11:29:02 +0000 Subject: [PATCH 19/24] minor spelling fix (#2991) --- usermods/Temperature/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/Temperature/readme.md b/usermods/Temperature/readme.md index 1515d000..c917461a 100644 --- a/usermods/Temperature/readme.md +++ b/usermods/Temperature/readme.md @@ -14,7 +14,7 @@ Copy the example `platformio_override.ini` to the root directory. This file sho ### Define Your Options * `USERMOD_DALLASTEMPERATURE` - enables this user mod wled00/usermods_list.cpp -* `USERMOD_DALLASTEMPERATURE_FIRST_MEASUREMENT_AT` - umber of milliseconds after boot to take first measurement, defaults to 20000 ms +* `USERMOD_DALLASTEMPERATURE_FIRST_MEASUREMENT_AT` - number of milliseconds after boot to take first measurement, defaults to 20000 ms All parameters can be configured at runtime via the Usermods settings page, including pin, temperature in degrees Celsius or Farenheit and measurement interval. From a16a6211e2e18614cc305044f243dc5115069375 Mon Sep 17 00:00:00 2001 From: Leif Date: Sat, 31 Dec 2022 03:30:26 +0100 Subject: [PATCH 20/24] added #MMDD view to the scrolling text effect --- wled00/FX.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 181a8d35..08d57303 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -5858,7 +5858,7 @@ uint16_t mode_2Dscrollingtext(void) { char text[33] = {'\0'}; if (SEGMENT.name) for (size_t i=0,j=0; i31 && SEGMENT.name[i]<128) text[j++] = SEGMENT.name[i]; - if (!strlen(text) || !strncmp_P(text,PSTR("#DATE"),5) || !strncmp_P(text,PSTR("#DDMM"),5) || !strncmp_P(text,PSTR("#TIME"),5) || !strncmp_P(text,PSTR("#HHMM"),5)) { // fallback if empty segment name: display date and time + if (!strlen(text) || !strncmp_P(text,PSTR("#DATE"),5) || !strncmp_P(text,PSTR("#DDMM"),5) || !strncmp_P(text,PSTR("#MMDD"),5) || !strncmp_P(text,PSTR("#TIME"),5) || !strncmp_P(text,PSTR("#HHMM"),5)) { // fallback if empty segment name: display date and time char sec[5]; byte AmPmHour = hour(localTime); boolean isitAM = true; @@ -5870,6 +5870,7 @@ uint16_t mode_2Dscrollingtext(void) { else sprintf_P(sec, PSTR(":%02d"), second(localTime)); if (!strncmp_P(text,PSTR("#DATE"),5)) sprintf_P(text, PSTR("%d.%d.%d"), day(localTime), month(localTime), year(localTime)); else if (!strncmp_P(text,PSTR("#DDMM"),5)) sprintf_P(text, PSTR("%d.%d"), day(localTime), month(localTime)); + else if (!strncmp_P(text,PSTR("#MMDD"),5)) sprintf_P(text, PSTR("%d/%d"), month(localTime), day(localTime)); else if (!strncmp_P(text,PSTR("#TIME"),5)) sprintf_P(text, PSTR("%2d:%02d%s"), AmPmHour, minute(localTime), sec); else if (!strncmp_P(text,PSTR("#HHMM"),5)) sprintf_P(text, PSTR("%2d:%02d"), AmPmHour, minute(localTime)); else sprintf_P(text, PSTR("%s %d, %d %2d:%02d%s"), monthShortStr(month(localTime)), day(localTime), year(localTime), AmPmHour, minute(localTime), sec); From 95869eeb7029ba41b7e092adde9c0af5ffd449e2 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sat, 31 Dec 2022 17:06:18 +0100 Subject: [PATCH 21/24] Allow more virtual buses. --- wled00/FX_fcn.cpp | 4 +- wled00/bus_manager.h | 47 +- wled00/cfg.cpp | 4 +- wled00/const.h | 19 + wled00/data/settings_leds.htm | 46 +- wled00/html_settings.h | 930 +++++++++++++++++----------------- wled00/set.cpp | 2 +- wled00/wled.cpp | 2 +- wled00/wled.h | 4 +- wled00/xml.cpp | 1 + 10 files changed, 551 insertions(+), 508 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 5d6ac4ff..7310cdee 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -964,13 +964,13 @@ void WS2812FX::finalizeInit(void) const uint8_t defNumBusses = ((sizeof defDataPins) / (sizeof defDataPins[0])); const uint8_t defNumCounts = ((sizeof defCounts) / (sizeof defCounts[0])); uint16_t prevLen = 0; - for (uint8_t i = 0; i < defNumBusses && i < WLED_MAX_BUSSES; i++) { + for (uint8_t i = 0; i < defNumBusses && i < WLED_MAX_BUSSES+WLED_MIN_VIRTUAL_BUSSES; i++) { uint8_t defPin[] = {defDataPins[i]}; uint16_t start = prevLen; uint16_t count = defCounts[(i < defNumCounts) ? i : defNumCounts -1]; prevLen += count; BusConfig defCfg = BusConfig(DEFAULT_LED_TYPE, defPin, start, count, DEFAULT_LED_COLOR_ORDER, false, 0, RGBW_MODE_MANUAL_ONLY); - busses.add(defCfg); + if (busses.add(defCfg) == -1) break; } } diff --git a/wled00/bus_manager.h b/wled00/bus_manager.h index 5f604321..74f073e9 100644 --- a/wled00/bus_manager.h +++ b/wled00/bus_manager.h @@ -684,9 +684,24 @@ class BusManager { if (type == 44 || type == 45) return len*4; //RGBW return len*3; //RGB } - + +/* + int add(BusConfig &bc); + void removeAll(); //do not call this method from system context (network callback) + void setStatusPixel(uint32_t c); + void setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1); + void setBrightness(uint8_t b); + void setSegmentCCT(int16_t cct, bool allowWBCorrection = false); + uint32_t getPixelColor(uint16_t pix); + bool canAllShow(); + Bus* getBus(uint8_t busNr); + void show(); + uint16_t getTotalLength(); //semi-duplicate of strip.getLengthTotal() (though that just returns strip._length, calculated in finalizeInit()) +*/ + // the following functions are inlined by compiler since they are defined within class definition + // they should be placed in cpp file instead int add(BusConfig &bc) { - if (numBusses >= WLED_MAX_BUSSES) return -1; + if (getNumBusses() - getNumVirtualBusses() >= WLED_MAX_BUSSES) return -1; if (bc.type >= TYPE_NET_DDP_RGB && bc.type < 96) { busses[numBusses] = new BusNetwork(bc); } else if (IS_DIGITAL(bc.type)) { @@ -714,11 +729,11 @@ class BusManager { } } - void setStatusPixel(uint32_t c) { + void setStatusPixel(uint32_t c) { for (uint8_t i = 0; i < numBusses; i++) { - busses[i]->setStatusPixel(c); - } - } + busses[i]->setStatusPixel(c); + } + } void IRAM_ATTR setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1) { for (uint8_t i = 0; i < numBusses; i++) { @@ -766,10 +781,6 @@ class BusManager { return busses[busNr]; } - inline uint8_t getNumBusses() { - return numBusses; - } - //semi-duplicate of strip.getLengthTotal() (though that just returns strip._length, calculated in finalizeInit()) uint16_t getTotalLength() { uint16_t len = 0; @@ -777,17 +788,27 @@ class BusManager { return len; } - void updateColorOrderMap(const ColorOrderMap &com) { + inline void updateColorOrderMap(const ColorOrderMap &com) { memcpy(&colorOrderMap, &com, sizeof(ColorOrderMap)); } - const ColorOrderMap& getColorOrderMap() const { + inline const ColorOrderMap& getColorOrderMap() const { return colorOrderMap; } + inline uint8_t getNumBusses() { + return numBusses; + } + private: uint8_t numBusses = 0; - Bus* busses[WLED_MAX_BUSSES]; + Bus* busses[WLED_MAX_BUSSES+WLED_MIN_VIRTUAL_BUSSES]; ColorOrderMap colorOrderMap; + + inline uint8_t getNumVirtualBusses() { + int j = 0; + for (int i=0; igetType() >= TYPE_NET_DDP_RGB && busses[i]->getType() < 96) j++; + return j; + } }; #endif diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index d40b44f2..62362477 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -137,7 +137,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { uint32_t mem = 0; bool busesChanged = false; for (JsonObject elm : ins) { - if (s >= WLED_MAX_BUSSES) break; + if (s >= WLED_MAX_BUSSES+WLED_MIN_VIRTUAL_BUSSES) break; uint8_t pins[5] = {255, 255, 255, 255, 255}; JsonArray pinArr = elm["pin"]; if (pinArr.size() == 0) continue; @@ -161,7 +161,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) { if (fromFS) { BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode); mem += BusManager::memUsage(bc); - if (mem <= MAX_LED_MEMORY && busses.getNumBusses() <= WLED_MAX_BUSSES) busses.add(bc); // finalization will be done in WLED::beginStrip() + if (mem <= MAX_LED_MEMORY) if (busses.add(bc) == -1) break; // finalization will be done in WLED::beginStrip() } else { if (busConfigs[s] != nullptr) delete busConfigs[s]; busConfigs[s] = new BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode); diff --git a/wled00/const.h b/wled00/const.h index 3d138ce6..6e80a697 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -25,25 +25,44 @@ #ifndef WLED_MAX_BUSSES #ifdef ESP8266 #define WLED_MAX_BUSSES 3 + #define WLED_MIN_VIRTUAL_BUSSES 2 #else #if defined(CONFIG_IDF_TARGET_ESP32C3) // 2 RMT, 6 LEDC, only has 1 I2S but NPB does not support it ATM #define WLED_MAX_BUSSES 3 // will allow 2 digital & 1 analog (or the other way around) + #define WLED_MIN_VIRTUAL_BUSSES 3 #elif defined(CONFIG_IDF_TARGET_ESP32S2) // 4 RMT, 8 LEDC, only has 1 I2S bus, supported in NPB #if defined(USERMOD_AUDIOREACTIVE) // requested by @softhack007 https://github.com/blazoncek/WLED/issues/33 #define WLED_MAX_BUSSES 6 // will allow 4 digital & 2 analog + #define WLED_MIN_VIRTUAL_BUSSES 4 #else #define WLED_MAX_BUSSES 7 // will allow 5 digital & 2 analog + #define WLED_MIN_VIRTUAL_BUSSES 3 #endif #elif defined(CONFIG_IDF_TARGET_ESP32S3) // 4 RMT, 8 LEDC, has 2 I2S but NPB does not support them ATM #define WLED_MAX_BUSSES 6 // will allow 4 digital & 2 analog + #define WLED_MIN_VIRTUAL_BUSSES 4 #else #if defined(USERMOD_AUDIOREACTIVE) // requested by @softhack007 https://github.com/blazoncek/WLED/issues/33 #define WLED_MAX_BUSSES 8 + #define WLED_MIN_VIRTUAL_BUSSES 2 #else #define WLED_MAX_BUSSES 10 + #define WLED_MIN_VIRTUAL_BUSSES 0 #endif #endif #endif +#else + #ifdef ESP8266 + #if WLED_MAX_BUSES > 5 + #error Maximum number of buses is 5. + #endif + #define WLED_MIN_VIRTUAL_BUSSES (5-WLED_MAX_BUSES) + #else + #if WLED_MAX_BUSES > 10 + #error Maximum number of buses is 10. + #endif + #define WLED_MIN_VIRTUAL_BUSSES (10-WLED_MAX_BUSES) + #endif #endif #ifndef WLED_MAX_BUTTONS diff --git a/wled00/data/settings_leds.htm b/wled00/data/settings_leds.htm index befcc9a6..20b8de8d 100644 --- a/wled00/data/settings_leds.htm +++ b/wled00/data/settings_leds.htm @@ -6,7 +6,7 @@ LED Settings