diff --git a/README.md b/README.md index b5d79f23..f2526e8b 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ESPurna ("spark" in Catalan) is a custom firmware for ESP8285/ESP8266 based smart switches, lights and sensors. It uses the Arduino Core for ESP8266 framework and a number of 3rd party libraries. -[![version](https://img.shields.io/badge/version-1.12.7a-brightgreen.svg)](CHANGELOG.md) +[![version](https://img.shields.io/badge/version-1.13.0c-brightgreen.svg)](CHANGELOG.md) [![branch](https://img.shields.io/badge/branch-dev-orange.svg)](https://github.org/xoseperez/espurna/tree/dev/) [![travis](https://travis-ci.org/xoseperez/espurna.svg?branch=dev)](https://travis-ci.org/xoseperez/espurna) [![codacy](https://img.shields.io/codacy/grade/c9496e25cf07434cba786b462cb15f49/dev.svg)](https://www.codacy.com/app/xoseperez/espurna/dashboard) diff --git a/code/esp8266.flash.1m0.ld b/code/eagle.flash.1m0m1s.ld similarity index 75% rename from code/esp8266.flash.1m0.ld rename to code/eagle.flash.1m0m1s.ld index dbb44e94..36477dc8 100644 --- a/code/esp8266.flash.1m0.ld +++ b/code/eagle.flash.1m0m1s.ld @@ -1,4 +1,4 @@ -/* Flash Split for 1M chips, no SPIFFS */ +/* Flash Split for 1M chips */ /* sketch 999KB */ /* eeprom 20KB */ @@ -12,7 +12,7 @@ MEMORY PROVIDE ( _SPIFFS_start = 0x402FB000 ); PROVIDE ( _SPIFFS_end = 0x402FB000 ); -PROVIDE ( _SPIFFS_page = 0 ); -PROVIDE ( _SPIFFS_block = 0 ); +PROVIDE ( _SPIFFS_page = 0x0 ); +PROVIDE ( _SPIFFS_block = 0x0 ); -INCLUDE "esp8266.flash.common.ld" +INCLUDE "../ld/eagle.app.v6.common.ld" diff --git a/code/eagle.flash.1m0m2s.ld b/code/eagle.flash.1m0m2s.ld new file mode 100644 index 00000000..bf07dccd --- /dev/null +++ b/code/eagle.flash.1m0m2s.ld @@ -0,0 +1,19 @@ +/* Flash Split for 1M chips, no SPIFFS */ +/* sketch 995KB */ +/* eeprom 8KB */ +/* reserved 16KB */ + +MEMORY +{ + dport0_0_seg : org = 0x3FF00000, len = 0x10 + dram0_0_seg : org = 0x3FFE8000, len = 0x14000 + iram1_0_seg : org = 0x40100000, len = 0x8000 + irom0_0_seg : org = 0x40201010, len = 0xf8ff0 +} + +PROVIDE ( _SPIFFS_start = 0x402FA000 ); +PROVIDE ( _SPIFFS_end = 0x402FA000 ); +PROVIDE ( _SPIFFS_page = 0 ); +PROVIDE ( _SPIFFS_block = 0 ); + +INCLUDE "../ld/eagle.app.v6.common.ld" diff --git a/code/eagle.flash.4m1m4s.ld b/code/eagle.flash.4m1m4s.ld new file mode 100644 index 00000000..696adcdc --- /dev/null +++ b/code/eagle.flash.4m1m4s.ld @@ -0,0 +1,21 @@ +/* Flash Split for 4M chips */ +/* sketch 1019KB */ +/* empty/ota? 2048KB */ +/* spiffs 992KB */ +/* eeprom 16KB */ +/* reserved 16KB */ + +MEMORY +{ + dport0_0_seg : org = 0x3FF00000, len = 0x10 + dram0_0_seg : org = 0x3FFE8000, len = 0x14000 + iram1_0_seg : org = 0x40100000, len = 0x8000 + irom0_0_seg : org = 0x40201010, len = 0xfeff0 +} + +PROVIDE ( _SPIFFS_start = 0x40500000 ); +PROVIDE ( _SPIFFS_end = 0x405F8000 ); +PROVIDE ( _SPIFFS_page = 0x100 ); +PROVIDE ( _SPIFFS_block = 0x2000 ); + +INCLUDE "../ld/eagle.app.v6.common.ld" diff --git a/code/eagle.flash.4m3m4e.ld b/code/eagle.flash.4m3m4e.ld new file mode 100644 index 00000000..6470d827 --- /dev/null +++ b/code/eagle.flash.4m3m4e.ld @@ -0,0 +1,20 @@ +/* Flash Split for 4M chips */ +/* sketch 1019KB */ +/* spiffs 3040KB */ +/* eeprom 16KB */ +/* reserved 16KB */ + +MEMORY +{ + dport0_0_seg : org = 0x3FF00000, len = 0x10 + dram0_0_seg : org = 0x3FFE8000, len = 0x14000 + iram1_0_seg : org = 0x40100000, len = 0x8000 + irom0_0_seg : org = 0x40201010, len = 0xfeff0 +} + +PROVIDE ( _SPIFFS_start = 0x40300000 ); +PROVIDE ( _SPIFFS_end = 0x405F8000 ); +PROVIDE ( _SPIFFS_page = 0x100 ); +PROVIDE ( _SPIFFS_block = 0x2000 ); + +INCLUDE "../ld/eagle.app.v6.common.ld" diff --git a/code/eagle.flash.512k0m1s.ld b/code/eagle.flash.512k0m1s.ld new file mode 100644 index 00000000..e28fc9f1 --- /dev/null +++ b/code/eagle.flash.512k0m1s.ld @@ -0,0 +1,18 @@ +/* Flash Split for 512K chips */ +/* sketch 487KB */ +/* eeprom 20KB */ + +MEMORY +{ + dport0_0_seg : org = 0x3FF00000, len = 0x10 + dram0_0_seg : org = 0x3FFE8000, len = 0x14000 + iram1_0_seg : org = 0x40100000, len = 0x8000 + irom0_0_seg : org = 0x40201010, len = 0x79ff0 +} + +PROVIDE ( _SPIFFS_start = 0x4027B000 ); +PROVIDE ( _SPIFFS_end = 0x4027B000 ); +PROVIDE ( _SPIFFS_page = 0x0 ); +PROVIDE ( _SPIFFS_block = 0x0 ); + +INCLUDE "../ld/eagle.app.v6.common.ld" diff --git a/code/espurna/button.ino b/code/espurna/button.ino index e85fba43..ea550e1f 100644 --- a/code/espurna/button.ino +++ b/code/espurna/button.ino @@ -60,16 +60,18 @@ unsigned char buttonAction(unsigned char id, unsigned char event) { if (event == BUTTON_EVENT_DBLCLICK) return (actions >> 8) & 0x0F; if (event == BUTTON_EVENT_LNGCLICK) return (actions >> 12) & 0x0F; if (event == BUTTON_EVENT_LNGLNGCLICK) return (actions >> 16) & 0x0F; + if (event == BUTTON_EVENT_TRIPLECLICK) return (actions >> 20) & 0x0F; return BUTTON_MODE_NONE; } -unsigned long buttonStore(unsigned long pressed, unsigned long click, unsigned long dblclick, unsigned long lngclick, unsigned long lnglngclick) { +unsigned long buttonStore(unsigned long pressed, unsigned long click, unsigned long dblclick, unsigned long lngclick, unsigned long lnglngclick, unsigned long tripleclick) { unsigned int value; value = pressed; value += click << 4; value += dblclick << 8; value += lngclick << 12; value += lnglngclick << 16; + value += tripleclick << 20; return value; } @@ -77,12 +79,13 @@ uint8_t mapEvent(uint8_t event, uint8_t count, uint16_t length) { if (event == EVENT_PRESSED) return BUTTON_EVENT_PRESSED; if (event == EVENT_CHANGED) return BUTTON_EVENT_CLICK; if (event == EVENT_RELEASED) { - if (count == 1) { + if (1 == count) { if (length > BUTTON_LNGLNGCLICK_DELAY) return BUTTON_EVENT_LNGLNGCLICK; if (length > BUTTON_LNGCLICK_DELAY) return BUTTON_EVENT_LNGCLICK; return BUTTON_EVENT_CLICK; } - if (count == 2) return BUTTON_EVENT_DBLCLICK; + if (2 == count) return BUTTON_EVENT_DBLCLICK; + if (3 == count) return BUTTON_EVENT_TRIPLECLICK; } return BUTTON_EVENT_NONE; } @@ -113,7 +116,13 @@ void buttonEvent(unsigned int id, unsigned char event) { relayStatus(_buttons[id].relayID - 1, false); } } - if (action == BUTTON_MODE_AP) createAP(); + if (action == BUTTON_MODE_AP) wifiStartAP(); + #if defined(JUSTWIFI_ENABLE_WPS) + if (action == BUTTON_MODE_WPS) wifiStartWPS(); + #endif // defined(JUSTWIFI_ENABLE_WPS) + #if defined(JUSTWIFI_ENABLE_SMARTCONFIG) + if (action == BUTTON_MODE_SMART_CONFIG) wifiStartSmartConfig(); + #endif // defined(JUSTWIFI_ENABLE_SMARTCONFIG) if (action == BUTTON_MODE_RESET) { deferredReset(100, CUSTOM_RESET_HARDWARE); } @@ -129,7 +138,7 @@ void buttonSetup() { #ifdef ITEAD_SONOFF_DUAL - unsigned int actions = buttonStore(BUTTON_MODE_NONE, BUTTON_MODE_TOGGLE, BUTTON_MODE_NONE, BUTTON_MODE_NONE, BUTTON_MODE_NONE); + unsigned int actions = buttonStore(BUTTON_MODE_NONE, BUTTON_MODE_TOGGLE, BUTTON_MODE_NONE, BUTTON_MODE_NONE, BUTTON_MODE_NONE, BUTTON_MODE_NONE); _buttons.push_back({new DebounceEvent(0, BUTTON_PUSHBUTTON), actions, 1}); _buttons.push_back({new DebounceEvent(0, BUTTON_PUSHBUTTON), actions, 2}); _buttons.push_back({new DebounceEvent(0, BUTTON_PUSHBUTTON), actions, BUTTON3_RELAY}); @@ -140,49 +149,49 @@ void buttonSetup() { #if BUTTON1_PIN != GPIO_NONE { - unsigned int actions = buttonStore(BUTTON1_PRESS, BUTTON1_CLICK, BUTTON1_DBLCLICK, BUTTON1_LNGCLICK, BUTTON1_LNGLNGCLICK); + unsigned int actions = buttonStore(BUTTON1_PRESS, BUTTON1_CLICK, BUTTON1_DBLCLICK, BUTTON1_LNGCLICK, BUTTON1_LNGLNGCLICK, BUTTON1_TRIPLECLICK); _buttons.push_back({new DebounceEvent(BUTTON1_PIN, BUTTON1_MODE, BUTTON_DEBOUNCE_DELAY, btnDelay), actions, BUTTON1_RELAY}); } #endif #if BUTTON2_PIN != GPIO_NONE { - unsigned int actions = buttonStore(BUTTON2_PRESS, BUTTON2_CLICK, BUTTON2_DBLCLICK, BUTTON2_LNGCLICK, BUTTON2_LNGLNGCLICK); + unsigned int actions = buttonStore(BUTTON2_PRESS, BUTTON2_CLICK, BUTTON2_DBLCLICK, BUTTON2_LNGCLICK, BUTTON2_LNGLNGCLICK, BUTTON2_TRIPLECLICK); _buttons.push_back({new DebounceEvent(BUTTON2_PIN, BUTTON2_MODE, BUTTON_DEBOUNCE_DELAY, btnDelay), actions, BUTTON2_RELAY}); } #endif #if BUTTON3_PIN != GPIO_NONE { - unsigned int actions = buttonStore(BUTTON3_PRESS, BUTTON3_CLICK, BUTTON3_DBLCLICK, BUTTON3_LNGCLICK, BUTTON3_LNGLNGCLICK); + unsigned int actions = buttonStore(BUTTON3_PRESS, BUTTON3_CLICK, BUTTON3_DBLCLICK, BUTTON3_LNGCLICK, BUTTON3_LNGLNGCLICK, BUTTON3_TRIPLECLICK); _buttons.push_back({new DebounceEvent(BUTTON3_PIN, BUTTON3_MODE, BUTTON_DEBOUNCE_DELAY, btnDelay), actions, BUTTON3_RELAY}); } #endif #if BUTTON4_PIN != GPIO_NONE { - unsigned int actions = buttonStore(BUTTON4_PRESS, BUTTON4_CLICK, BUTTON4_DBLCLICK, BUTTON4_LNGCLICK, BUTTON4_LNGLNGCLICK); + unsigned int actions = buttonStore(BUTTON4_PRESS, BUTTON4_CLICK, BUTTON4_DBLCLICK, BUTTON4_LNGCLICK, BUTTON4_LNGLNGCLICK, BUTTON4_TRIPLECLICK); _buttons.push_back({new DebounceEvent(BUTTON4_PIN, BUTTON4_MODE, BUTTON_DEBOUNCE_DELAY, btnDelay), actions, BUTTON4_RELAY}); } #endif #if BUTTON5_PIN != GPIO_NONE { - unsigned int actions = buttonStore(BUTTON5_PRESS, BUTTON5_CLICK, BUTTON5_DBLCLICK, BUTTON5_LNGCLICK, BUTTON5_LNGLNGCLICK); + unsigned int actions = buttonStore(BUTTON5_PRESS, BUTTON5_CLICK, BUTTON5_DBLCLICK, BUTTON5_LNGCLICK, BUTTON5_LNGLNGCLICK, BUTTON5_TRIPLECLICK); _buttons.push_back({new DebounceEvent(BUTTON5_PIN, BUTTON5_MODE, BUTTON_DEBOUNCE_DELAY, btnDelay), actions, BUTTON5_RELAY}); } #endif #if BUTTON6_PIN != GPIO_NONE { - unsigned int actions = buttonStore(BUTTON6_PRESS, BUTTON6_CLICK, BUTTON6_DBLCLICK, BUTTON6_LNGCLICK, BUTTON6_LNGLNGCLICK); + unsigned int actions = buttonStore(BUTTON6_PRESS, BUTTON6_CLICK, BUTTON6_DBLCLICK, BUTTON6_LNGCLICK, BUTTON6_LNGLNGCLICK, BUTTON6_TRIPLECLICK); _buttons.push_back({new DebounceEvent(BUTTON6_PIN, BUTTON6_MODE, BUTTON_DEBOUNCE_DELAY, btnDelay), actions, BUTTON6_RELAY}); } #endif #if BUTTON7_PIN != GPIO_NONE { - unsigned int actions = buttonStore(BUTTON7_PRESS, BUTTON7_CLICK, BUTTON7_DBLCLICK, BUTTON7_LNGCLICK, BUTTON7_LNGLNGCLICK); + unsigned int actions = buttonStore(BUTTON7_PRESS, BUTTON7_CLICK, BUTTON7_DBLCLICK, BUTTON7_LNGCLICK, BUTTON7_LNGLNGCLICK, BUTTON7_TRIPLECLICK); _buttons.push_back({new DebounceEvent(BUTTON7_PIN, BUTTON7_MODE, BUTTON_DEBOUNCE_DELAY, btnDelay), actions, BUTTON7_RELAY}); } #endif #if BUTTON8_PIN != GPIO_NONE { - unsigned int actions = buttonStore(BUTTON8_PRESS, BUTTON8_CLICK, BUTTON8_DBLCLICK, BUTTON8_LNGCLICK, BUTTON8_LNGLNGCLICK); + unsigned int actions = buttonStore(BUTTON8_PRESS, BUTTON8_CLICK, BUTTON8_DBLCLICK, BUTTON8_LNGCLICK, BUTTON8_LNGLNGCLICK, BUTTON8_TRIPLECLICK); _buttons.push_back({new DebounceEvent(BUTTON8_PIN, BUTTON8_MODE, BUTTON_DEBOUNCE_DELAY, btnDelay), actions, BUTTON8_RELAY}); } #endif diff --git a/code/espurna/config/defaults.h b/code/espurna/config/defaults.h index b16a466a..96bc7047 100644 --- a/code/espurna/config/defaults.h +++ b/code/espurna/config/defaults.h @@ -108,6 +108,31 @@ #define BUTTON8_DBLCLICK BUTTON_MODE_NONE #endif +#ifndef BUTTON1_TRIPLECLICK +#define BUTTON1_TRIPLECLICK BUTTON_MODE_SMART_CONFIG +#endif +#ifndef BUTTON2_TRIPLECLICK +#define BUTTON2_TRIPLECLICK BUTTON_MODE_NONE +#endif +#ifndef BUTTON3_TRIPLECLICK +#define BUTTON3_TRIPLECLICK BUTTON_MODE_NONE +#endif +#ifndef BUTTON4_TRIPLECLICK +#define BUTTON4_TRIPLECLICK BUTTON_MODE_NONE +#endif +#ifndef BUTTON5_TRIPLECLICK +#define BUTTON5_TRIPLECLICK BUTTON_MODE_NONE +#endif +#ifndef BUTTON6_TRIPLECLICK +#define BUTTON6_TRIPLECLICK BUTTON_MODE_NONE +#endif +#ifndef BUTTON7_TRIPLECLICK +#define BUTTON7_TRIPLECLICK BUTTON_MODE_NONE +#endif +#ifndef BUTTON8_TRIPLECLICK +#define BUTTON8_TRIPLECLICK BUTTON_MODE_NONE +#endif + #ifndef BUTTON1_LNGCLICK #define BUTTON1_LNGCLICK BUTTON_MODE_RESET #endif diff --git a/code/espurna/config/general.h b/code/espurna/config/general.h index 225d9c9b..7d449841 100644 --- a/code/espurna/config/general.h +++ b/code/espurna/config/general.h @@ -142,12 +142,17 @@ //------------------------------------------------------------------------------ #define EEPROM_SIZE 4096 // EEPROM size in bytes +//#define EEPROM_RORATE_SECTORS 2 // Number of sectors to use for EEPROM rotation + // If not defined the firmware will use a number based + // on the number of available sectors + #define EEPROM_RELAY_STATUS 0 // Address for the relay status (1 byte) #define EEPROM_ENERGY_COUNT 1 // Address for the energy counter (4 bytes) #define EEPROM_CUSTOM_RESET 5 // Address for the reset reason (1 byte) #define EEPROM_CRASH_COUNTER 6 // Address for the crash counter (1 byte) #define EEPROM_MESSAGE_ID 7 // Address for the MQTT message id (4 bytes) -#define EEPROM_DATA_END 11 // End of custom EEPROM data block +#define EEPROM_ROTATE_DATA 11 // Reserved for the EEPROM_ROTATE library (3 bytes) +#define EEPROM_DATA_END 14 // End of custom EEPROM data block //------------------------------------------------------------------------------ // HEARTBEAT @@ -276,9 +281,6 @@ #define WIFI_AP_CAPTIVE 1 // Captive portal enabled when in AP mode #endif -#ifndef WIFI_AP_MODE -#define WIFI_AP_MODE AP_MODE_ALONE -#endif #ifndef WIFI_SLEEP_MODE #define WIFI_SLEEP_MODE WIFI_NONE_SLEEP // WIFI_NONE_SLEEP, WIFI_LIGHT_SLEEP or WIFI_MODEM_SLEEP diff --git a/code/espurna/config/prototypes.h b/code/espurna/config/prototypes.h index 2a581218..6db0a23b 100644 --- a/code/espurna/config/prototypes.h +++ b/code/espurna/config/prototypes.h @@ -7,6 +7,12 @@ extern "C" { #include "user_interface.h" } +// ----------------------------------------------------------------------------- +// EEPROM_ROTATE +// ----------------------------------------------------------------------------- +#include +EEPROM_Rotate EEPROMr; + // ----------------------------------------------------------------------------- // WebServer // ----------------------------------------------------------------------------- @@ -67,6 +73,7 @@ void settingsGetJson(JsonObject& data); bool settingsRestoreJson(JsonObject& data); void settingsRegisterCommand(const String& name, void (*call)(Embedis*)); void settingsInject(void *data, size_t len); +Stream & settingsSerial(); // ----------------------------------------------------------------------------- // I2C diff --git a/code/espurna/config/types.h b/code/espurna/config/types.h index 9d10c62a..45d89766 100644 --- a/code/espurna/config/types.h +++ b/code/espurna/config/types.h @@ -3,6 +3,19 @@ // Do not touch this definitions //------------------------------------------------------------------------------ +// ----------------------------------------------------------------------------- +// WIFI +// ----------------------------------------------------------------------------- + +#define WIFI_STATE_AP 1 +#define WIFI_STATE_STA 2 +#define WIFI_STATE_AP_STA 3 +#define WIFI_STATE_WPS 4 +#define WIFI_STATE_SMARTCONFIG 8 + +#define WIFI_AP_ALLWAYS 1 +#define WIFI_AP_FALLBACK 2 + //------------------------------------------------------------------------------ // BUTTONS //------------------------------------------------------------------------------ @@ -14,6 +27,7 @@ #define BUTTON_EVENT_DBLCLICK 3 #define BUTTON_EVENT_LNGCLICK 4 #define BUTTON_EVENT_LNGLNGCLICK 5 +#define BUTTON_EVENT_TRIPLECLICK 6 #define BUTTON_MODE_NONE 0 #define BUTTON_MODE_TOGGLE 1 @@ -23,6 +37,8 @@ #define BUTTON_MODE_RESET 5 #define BUTTON_MODE_PULSE 6 #define BUTTON_MODE_FACTORY 7 +#define BUTTON_MODE_WPS 8 +#define BUTTON_MODE_SMART_CONFIG 9 // Needed for ESP8285 boards under Windows using PlatformIO (?) #ifndef BUTTON_PUSHBUTTON diff --git a/code/espurna/config/version.h b/code/espurna/config/version.h index 13b490d2..6f2333e7 100644 --- a/code/espurna/config/version.h +++ b/code/espurna/config/version.h @@ -1,5 +1,5 @@ #define APP_NAME "ESPURNA" -#define APP_VERSION "1.12.7a" +#define APP_VERSION "1.13.0c" #define APP_REVISION "db84006" #define APP_AUTHOR "xose.perez@gmail.com" #define APP_WEBSITE "http://tinkerman.cat" diff --git a/code/espurna/data/index.html.gz b/code/espurna/data/index.html.gz index 88a08a58..074ffa4a 100644 Binary files a/code/espurna/data/index.html.gz and b/code/espurna/data/index.html.gz differ diff --git a/code/espurna/debug.ino b/code/espurna/debug.ino index e7659693..8045e5d8 100644 --- a/code/espurna/debug.ino +++ b/code/espurna/debug.ino @@ -10,7 +10,7 @@ Copyright (C) 2016-2018 by Xose Pérez #include #include -#include +#include extern "C" { #include "user_interface.h" @@ -204,31 +204,31 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack // write crash time to EEPROM uint32_t crash_time = millis(); - EEPROM.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_CRASH_TIME, crash_time); + EEPROMr.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_CRASH_TIME, crash_time); // write reset info to EEPROM - EEPROM.write(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_RESTART_REASON, rst_info->reason); - EEPROM.write(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EXCEPTION_CAUSE, rst_info->exccause); + EEPROMr.write(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_RESTART_REASON, rst_info->reason); + EEPROMr.write(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EXCEPTION_CAUSE, rst_info->exccause); // write epc1, epc2, epc3, excvaddr and depc to EEPROM - EEPROM.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC1, rst_info->epc1); - EEPROM.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC2, rst_info->epc2); - EEPROM.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC3, rst_info->epc3); - EEPROM.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EXCVADDR, rst_info->excvaddr); - EEPROM.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_DEPC, rst_info->depc); + EEPROMr.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC1, rst_info->epc1); + EEPROMr.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC2, rst_info->epc2); + EEPROMr.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC3, rst_info->epc3); + EEPROMr.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EXCVADDR, rst_info->excvaddr); + EEPROMr.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_DEPC, rst_info->depc); // write stack start and end address to EEPROM - EEPROM.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_STACK_START, stack_start); - EEPROM.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_STACK_END, stack_end); + EEPROMr.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_STACK_START, stack_start); + EEPROMr.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_STACK_END, stack_end); // write stack trace to EEPROM int16_t current_address = SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_STACK_TRACE; for (uint32_t i = stack_start; i < stack_end; i++) { byte* byteValue = (byte*) i; - EEPROM.write(current_address++, *byteValue); + EEPROMr.write(current_address++, *byteValue); } - EEPROM.commit(); + EEPROMr.commit(); } @@ -237,8 +237,8 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack */ void debugClearCrashInfo() { uint32_t crash_time = 0xFFFFFFFF; - EEPROM.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_CRASH_TIME, crash_time); - EEPROM.commit(); + EEPROMr.put(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_CRASH_TIME, crash_time); + EEPROMr.commit(); } /** @@ -247,28 +247,28 @@ void debugClearCrashInfo() { void debugDumpCrashInfo() { uint32_t crash_time; - EEPROM.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_CRASH_TIME, crash_time); + EEPROMr.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_CRASH_TIME, crash_time); if ((crash_time == 0) || (crash_time == 0xFFFFFFFF)) { DEBUG_MSG_P(PSTR("[DEBUG] No crash info\n")); return; } DEBUG_MSG_P(PSTR("[DEBUG] Latest crash was at %lu ms after boot\n"), crash_time); - DEBUG_MSG_P(PSTR("[DEBUG] Reason of restart: %u\n"), EEPROM.read(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_RESTART_REASON)); - DEBUG_MSG_P(PSTR("[DEBUG] Exception cause: %u\n"), EEPROM.read(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EXCEPTION_CAUSE)); + DEBUG_MSG_P(PSTR("[DEBUG] Reason of restart: %u\n"), EEPROMr.read(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_RESTART_REASON)); + DEBUG_MSG_P(PSTR("[DEBUG] Exception cause: %u\n"), EEPROMr.read(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EXCEPTION_CAUSE)); uint32_t epc1, epc2, epc3, excvaddr, depc; - EEPROM.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC1, epc1); - EEPROM.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC2, epc2); - EEPROM.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC3, epc3); - EEPROM.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EXCVADDR, excvaddr); - EEPROM.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_DEPC, depc); + EEPROMr.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC1, epc1); + EEPROMr.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC2, epc2); + EEPROMr.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EPC3, epc3); + EEPROMr.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_EXCVADDR, excvaddr); + EEPROMr.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_DEPC, depc); DEBUG_MSG_P(PSTR("[DEBUG] epc1=0x%08x epc2=0x%08x epc3=0x%08x\n"), epc1, epc2, epc3); DEBUG_MSG_P(PSTR("[DEBUG] excvaddr=0x%08x depc=0x%08x\n"), excvaddr, depc); uint32_t stack_start, stack_end; - EEPROM.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_STACK_START, stack_start); - EEPROM.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_STACK_END, stack_end); + EEPROMr.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_STACK_START, stack_start); + EEPROMr.get(SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_STACK_END, stack_end); DEBUG_MSG_P(PSTR("[DEBUG] >>>stack>>>\n[DEBUG] ")); int16_t current_address = SAVE_CRASH_EEPROM_OFFSET + SAVE_CRASH_STACK_TRACE; int16_t stack_len = stack_end - stack_start; @@ -276,7 +276,7 @@ void debugDumpCrashInfo() { for (int16_t i = 0; i < stack_len; i += 0x10) { DEBUG_MSG_P(PSTR("%08x: "), stack_start + i); for (byte j = 0; j < 4; j++) { - EEPROM.get(current_address, stack_trace); + EEPROMr.get(current_address, stack_trace); DEBUG_MSG_P(PSTR("%08x "), stack_trace); current_address += 4; } diff --git a/code/espurna/eeprom.ino b/code/espurna/eeprom.ino new file mode 100644 index 00000000..2e79fcbb --- /dev/null +++ b/code/espurna/eeprom.ino @@ -0,0 +1,86 @@ +/* + +EEPROM MODULE + +*/ + +#include + +// ----------------------------------------------------------------------------- + +bool eepromRotate(bool value) { + // Enable/disable EEPROM rotation only if we are using more sectors than the + // reserved by the memory layout + if (EEPROMr.size() > EEPROMr.reserved()) { + if (value) { + DEBUG_MSG_P(PSTR("[EEPROM] Reenabling EEPROM rotation\n")); + } else { + DEBUG_MSG_P(PSTR("[EEPROM] Disabling EEPROM rotation\n")); + } + EEPROMr.rotate(value); + } +} + +String eepromSectors() { + String response; + for (uint32_t i = 0; i < EEPROMr.size(); i++) { + if (i > 0) response = response + String(", "); + response = response + String(EEPROMr.base() - i); + } + return response; +} + +#if TERMINAL_SUPPORT + +void _eepromInitCommands() { + + settingsRegisterCommand(F("EEPROM.DUMP"), [](Embedis* e) { + EEPROMr.dump(settingsSerial()); + DEBUG_MSG_P(PSTR("\n+OK\n")); + }); + + settingsRegisterCommand(F("FLASH.DUMP"), [](Embedis* e) { + if (e->argc < 2) { + DEBUG_MSG_P(PSTR("-ERROR: Wrong arguments\n")); + return; + } + uint32_t sector = String(e->argv[1]).toInt(); + uint32_t max = ESP.getFlashChipSize() / SPI_FLASH_SEC_SIZE; + if (sector >= max) { + DEBUG_MSG_P(PSTR("-ERROR: Sector out of range\n")); + return; + } + EEPROMr.dump(settingsSerial(), sector); + DEBUG_MSG_P(PSTR("\n+OK\n")); + }); + +} + +#endif + +// ----------------------------------------------------------------------------- + +void eepromSetup() { + + #ifdef EEPROM_ROTATE_SECTORS + EEPROMr.size(EEPROM_ROTATE_SECTORS); + #else + // If the memory layout has more than one sector reserved use those, + // otherwise calculate pool size based on memory size. + if (EEPROMr.size() == 1) { + if (EEPROMr.last() > 1000) { // 4Mb boards + EEPROMr.size(4); + } else if (EEPROMr.last() > 250) { // 1Mb boards + EEPROMr.size(2); + } + } + #endif + + EEPROMr.offset(EEPROM_ROTATE_DATA); + EEPROMr.begin(EEPROM_SIZE); + + #if TERMINAL_SUPPORT + _eepromInitCommands(); + #endif + +} diff --git a/code/espurna/espurna.ino b/code/espurna/espurna.ino index ac2f217f..def70f6b 100644 --- a/code/espurna/espurna.ino +++ b/code/espurna/espurna.ino @@ -47,7 +47,10 @@ void setup() { debugSetup(); #endif - // Init EEPROM, Serial, SPIFFS and system check + // Init EEPROM + eepromSetup(); + + // Init Serial, SPIFFS and system check systemSetup(); // Init persistance and terminal features diff --git a/code/espurna/homeassistant.ino b/code/espurna/homeassistant.ino index 070fc1ea..5d3b59e0 100644 --- a/code/espurna/homeassistant.ino +++ b/code/espurna/homeassistant.ino @@ -255,13 +255,17 @@ void _haInitCommands() { settingsRegisterCommand(F("HA.SEND"), [](Embedis* e) { setSetting("haEnabled", "1"); _haConfigure(); - wsSend(_haWebSocketOnSend); + #if WEB_SUPPORT + wsSend(_haWebSocketOnSend); + #endif DEBUG_MSG_P(PSTR("+OK\n")); }); settingsRegisterCommand(F("HA.CLEAR"), [](Embedis* e) { setSetting("haEnabled", "0"); _haConfigure(); - wsSend(_haWebSocketOnSend); + #if WEB_SUPPORT + wsSend(_haWebSocketOnSend); + #endif DEBUG_MSG_P(PSTR("+OK\n")); }); } diff --git a/code/espurna/led.ino b/code/espurna/led.ino index b93013f8..06fac792 100644 --- a/code/espurna/led.ino +++ b/code/espurna/led.ino @@ -182,16 +182,18 @@ void ledSetup() { void ledLoop() { + uint8_t wifi_state = wifiState(); + for (unsigned char i=0; i<_leds.size(); i++) { if (_ledMode(i) == LED_MODE_WIFI) { - if (wifiConnected()) { - if (WiFi.getMode() == WIFI_AP) { - _ledBlink(i, 900, 100); - } else { - _ledBlink(i, 4900, 100); - } + if (wifi_state & WIFI_STATE_WPS || wifi_state & WIFI_STATE_SMARTCONFIG) { + _ledBlink(i, 100, 100); + } else if (wifi_state & WIFI_STATE_STA) { + _ledBlink(i, 4900, 100); + } else if (wifi_state & WIFI_STATE_AP) { + _ledBlink(i, 900, 100); } else { _ledBlink(i, 500, 500); } @@ -200,19 +202,19 @@ void ledLoop() { if (_ledMode(i) == LED_MODE_FINDME_WIFI) { - if (wifiConnected()) { + if (wifi_state & WIFI_STATE_WPS || wifi_state & WIFI_STATE_SMARTCONFIG) { + _ledBlink(i, 100, 100); + } else if (wifi_state & WIFI_STATE_STA) { if (relayStatus(_leds[i].relay-1)) { - if (WiFi.getMode() == WIFI_AP) { - _ledBlink(i, 900, 100); - } else { - _ledBlink(i, 4900, 100); - } + _ledBlink(i, 4900, 100); } else { - if (WiFi.getMode() == WIFI_AP) { - _ledBlink(i, 100, 900); - } else { - _ledBlink(i, 100, 4900); - } + _ledBlink(i, 100, 4900); + } + } else if (wifi_state & WIFI_STATE_AP) { + if (relayStatus(_leds[i].relay-1)) { + _ledBlink(i, 900, 100); + } else { + _ledBlink(i, 100, 900); } } else { _ledBlink(i, 500, 500); @@ -222,19 +224,19 @@ void ledLoop() { if (_ledMode(i) == LED_MODE_RELAY_WIFI) { - if (wifiConnected()) { + if (wifi_state & WIFI_STATE_WPS || wifi_state & WIFI_STATE_SMARTCONFIG) { + _ledBlink(i, 100, 100); + } else if (wifi_state & WIFI_STATE_STA) { if (relayStatus(_leds[i].relay-1)) { - if (WiFi.getMode() == WIFI_AP) { - _ledBlink(i, 100, 900); - } else { - _ledBlink(i, 100, 4900); - } + _ledBlink(i, 100, 4900); } else { - if (WiFi.getMode() == WIFI_AP) { - _ledBlink(i, 900, 100); - } else { - _ledBlink(i, 4900, 100); - } + _ledBlink(i, 4900, 100); + } + } else if (wifi_state & WIFI_STATE_AP) { + if (relayStatus(_leds[i].relay-1)) { + _ledBlink(i, 100, 900); + } else { + _ledBlink(i, 900, 100); } } else { _ledBlink(i, 500, 500); diff --git a/code/espurna/mqtt.ino b/code/espurna/mqtt.ino index c935ba4b..10d1aeb1 100644 --- a/code/espurna/mqtt.ino +++ b/code/espurna/mqtt.ino @@ -8,7 +8,7 @@ Copyright (C) 2016-2018 by Xose Pérez #if MQTT_SUPPORT -#include +#include #include #include #include @@ -265,7 +265,7 @@ unsigned long _mqttNextMessageId() { if (id == 0) { // read id from EEPROM and shift it - id = EEPROM.read(EEPROM_MESSAGE_ID); + id = EEPROMr.read(EEPROM_MESSAGE_ID); if (id == 0xFF) { // There was nothing in EEPROM, @@ -274,9 +274,9 @@ unsigned long _mqttNextMessageId() { } else { - id = (id << 8) + EEPROM.read(EEPROM_MESSAGE_ID + 1); - id = (id << 8) + EEPROM.read(EEPROM_MESSAGE_ID + 2); - id = (id << 8) + EEPROM.read(EEPROM_MESSAGE_ID + 3); + id = (id << 8) + EEPROMr.read(EEPROM_MESSAGE_ID + 1); + id = (id << 8) + EEPROMr.read(EEPROM_MESSAGE_ID + 2); + id = (id << 8) + EEPROMr.read(EEPROM_MESSAGE_ID + 3); // Calculate next block and start from there id = MQTT_MESSAGE_ID_SHIFT * (1 + (id / MQTT_MESSAGE_ID_SHIFT)); @@ -287,11 +287,11 @@ unsigned long _mqttNextMessageId() { // Save to EEPROM every MQTT_MESSAGE_ID_SHIFT if (id % MQTT_MESSAGE_ID_SHIFT == 0) { - EEPROM.write(EEPROM_MESSAGE_ID + 0, (id >> 24) & 0xFF); - EEPROM.write(EEPROM_MESSAGE_ID + 1, (id >> 16) & 0xFF); - EEPROM.write(EEPROM_MESSAGE_ID + 2, (id >> 8) & 0xFF); - EEPROM.write(EEPROM_MESSAGE_ID + 3, (id >> 0) & 0xFF); - EEPROM.commit(); + EEPROMr.write(EEPROM_MESSAGE_ID + 0, (id >> 24) & 0xFF); + EEPROMr.write(EEPROM_MESSAGE_ID + 1, (id >> 16) & 0xFF); + EEPROMr.write(EEPROM_MESSAGE_ID + 2, (id >> 8) & 0xFF); + EEPROMr.write(EEPROM_MESSAGE_ID + 3, (id >> 0) & 0xFF); + EEPROMr.commit(); } id++; diff --git a/code/espurna/ota.ino b/code/espurna/ota.ino index 2d730f43..4443431a 100644 --- a/code/espurna/ota.ino +++ b/code/espurna/ota.ino @@ -70,6 +70,7 @@ void _otaFrom(const char * host, unsigned int port, const char * url) { #ifdef DEBUG_PORT Update.printError(DEBUG_PORT); #endif + eepromRotate(true); } DEBUG_MSG_P(PSTR("[OTA] Disconnected\n")); @@ -133,6 +134,9 @@ void _otaFrom(const char * host, unsigned int port, const char * url) { } #endif + // Disabling EEPROM rotation to prevent writing to EEPROM after the upgrade + eepromRotate(false); + DEBUG_MSG_P(PSTR("[OTA] Downloading %s\n"), _ota_url); char buffer[strlen_P(OTA_REQUEST_TEMPLATE) + strlen(_ota_url) + strlen(_ota_host)]; snprintf_P(buffer, sizeof(buffer), OTA_REQUEST_TEMPLATE, _ota_url, _ota_host); @@ -140,7 +144,6 @@ void _otaFrom(const char * host, unsigned int port, const char * url) { }, NULL); - #if ASYNC_TCP_SSL_ENABLED bool connected = _ota_client->connect(host, port, 443 == port); #else @@ -214,10 +217,16 @@ void otaSetup() { // ------------------------------------------------------------------------- ArduinoOTA.onStart([]() { + + // Disabling EEPROM rotation to prevent writing to EEPROM after the upgrade + eepromRotate(false); + DEBUG_MSG_P(PSTR("[OTA] Start\n")); + #if WEB_SUPPORT wsSend_P(PSTR("{\"message\": 2}")); #endif + }); ArduinoOTA.onEnd([]() { @@ -242,6 +251,7 @@ void otaSetup() { else if (error == OTA_RECEIVE_ERROR) DEBUG_MSG_P(PSTR("Receive Failed\n")); else if (error == OTA_END_ERROR) DEBUG_MSG_P(PSTR("End Failed\n")); #endif + eepromRotate(true); }); ArduinoOTA.begin(); diff --git a/code/espurna/relay.ino b/code/espurna/relay.ino index 5d597e15..b930e732 100644 --- a/code/espurna/relay.ino +++ b/code/espurna/relay.ino @@ -6,7 +6,7 @@ Copyright (C) 2016-2018 by Xose Pérez */ -#include +#include #include #include #include @@ -369,9 +369,9 @@ void relaySave() { if (relayStatus(i)) mask += bit; bit += bit; } - EEPROM.write(EEPROM_RELAY_STATUS, mask); + EEPROMr.write(EEPROM_RELAY_STATUS, mask); DEBUG_MSG_P(PSTR("[RELAY] Saving mask: %d\n"), mask); - EEPROM.commit(); + EEPROMr.commit(); } void relayToggle(unsigned char id, bool report, bool group_report) { @@ -449,7 +449,7 @@ void _relayBoot() { bool trigger_save = false; // Get last statuses from EEPROM - unsigned char mask = EEPROM.read(EEPROM_RELAY_STATUS); + unsigned char mask = EEPROMr.read(EEPROM_RELAY_STATUS); DEBUG_MSG_P(PSTR("[RELAY] Retrieving mask: %d\n"), mask); // Walk the relays @@ -487,8 +487,8 @@ void _relayBoot() { // Save if there is any relay in the RELAY_BOOT_TOGGLE mode if (trigger_save) { - EEPROM.write(EEPROM_RELAY_STATUS, mask); - EEPROM.commit(); + EEPROMr.write(EEPROM_RELAY_STATUS, mask); + EEPROMr.commit(); } _relayRecursive = false; @@ -811,6 +811,7 @@ void _relayInitCommands() { settingsRegisterCommand(F("RELAY"), [](Embedis* e) { if (e->argc < 2) { DEBUG_MSG_P(PSTR("-ERROR: Wrong arguments\n")); + return; } int id = String(e->argv[1]).toInt(); if (e->argc > 2) { diff --git a/code/espurna/settings.ino b/code/espurna/settings.ino index b1d4d921..b05f9a08 100644 --- a/code/espurna/settings.ino +++ b/code/espurna/settings.ino @@ -6,7 +6,7 @@ Copyright (C) 2016-2018 by Xose Pérez */ -#include +#include #include #include "libs/EmbedisWrap.h" #include @@ -30,7 +30,7 @@ bool _settings_save = false; unsigned long settingsSize() { unsigned pos = SPI_FLASH_SEC_SIZE - 1; - while (size_t len = EEPROM.read(pos)) { + while (size_t len = EEPROMr.read(pos)) { pos = pos - len - 2; } return SPI_FLASH_SEC_SIZE - pos; @@ -41,9 +41,9 @@ unsigned long settingsSize() { unsigned int _settingsKeyCount() { unsigned count = 0; unsigned pos = SPI_FLASH_SEC_SIZE - 1; - while (size_t len = EEPROM.read(pos)) { + while (size_t len = EEPROMr.read(pos)) { pos = pos - len - 2; - len = EEPROM.read(pos); + len = EEPROMr.read(pos); pos = pos - len - 2; count ++; } @@ -56,17 +56,17 @@ String _settingsKeyName(unsigned int index) { unsigned count = 0; unsigned pos = SPI_FLASH_SEC_SIZE - 1; - while (size_t len = EEPROM.read(pos)) { + while (size_t len = EEPROMr.read(pos)) { pos = pos - len - 2; if (count == index) { s.reserve(len); for (unsigned char i = 0 ; i < len; i++) { - s += (char) EEPROM.read(pos + i + 1); + s += (char) EEPROMr.read(pos + i + 1); } break; } count++; - len = EEPROM.read(pos); + len = EEPROMr.read(pos); pos = pos - len - 2; } @@ -156,27 +156,16 @@ void _settingsKeysCommand() { unsigned long freeEEPROM = SPI_FLASH_SEC_SIZE - settingsSize(); DEBUG_MSG_P(PSTR("Number of keys: %d\n"), keys.size()); + DEBUG_MSG_P(PSTR("Current EEPROM sector: %u\n"), EEPROMr.current()); DEBUG_MSG_P(PSTR("Free EEPROM: %d bytes (%d%%)\n"), freeEEPROM, 100 * freeEEPROM / SPI_FLASH_SEC_SIZE); } void _settingsFactoryResetCommand() { for (unsigned int i = 0; i < SPI_FLASH_SEC_SIZE; i++) { - EEPROM.write(i, 0xFF); - } - EEPROM.commit(); -} - -void _settingsDumpCommand(bool ascii) { - for (unsigned int i = 0; i < SPI_FLASH_SEC_SIZE; i++) { - if (i % 16 == 0) DEBUG_MSG_P(PSTR("\n[%04X] "), i); - byte c = EEPROM.read(i); - if (ascii && 32 <= c && c <= 126) { - DEBUG_MSG_P(PSTR(" %c "), c); - } else { - DEBUG_MSG_P(PSTR("%02X "), c); - } + EEPROMr.write(i, 0xFF); } + EEPROMr.commit(); } void _settingsInitCommands() { @@ -194,13 +183,6 @@ void _settingsInitCommands() { DEBUG_MSG_P(PSTR("+OK\n")); }); - settingsRegisterCommand(F("EEPROM.DUMP"), [](Embedis* e) { - bool ascii = false; - if (e->argc == 2) ascii = String(e->argv[1]).toInt() == 1; - _settingsDumpCommand(ascii); - DEBUG_MSG_P(PSTR("\n+OK\n")); - }); - settingsRegisterCommand(F("ERASE.CONFIG"), [](Embedis* e) { DEBUG_MSG_P(PSTR("+OK\n")); resetReason(CUSTOM_RESET_TERMINAL); @@ -257,7 +239,7 @@ void _settingsInitCommands() { settingsRegisterCommand(F("INFO"), [](Embedis* e) { info(); - wifiStatus(); + wifiDebug(); //StreamString s; //WiFi.printDiag(s); //DEBUG_MSG(s.c_str()); @@ -289,18 +271,20 @@ void _settingsInitCommands() { DEBUG_MSG_P(PSTR("+OK\n")); }); - settingsRegisterCommand(F("RELOAD"), [](Embedis* e) { - wsReload(); - DEBUG_MSG_P(PSTR("+OK\n")); - }); - + #if WEB_SUPPORT + settingsRegisterCommand(F("RELOAD"), [](Embedis* e) { + wsReload(); + DEBUG_MSG_P(PSTR("+OK\n")); + }); + #endif + settingsRegisterCommand(F("RESET"), [](Embedis* e) { DEBUG_MSG_P(PSTR("+OK\n")); deferredReset(100, CUSTOM_RESET_TERMINAL); }); settingsRegisterCommand(F("RESET.SAFE"), [](Embedis* e) { - EEPROM.write(EEPROM_CRASH_COUNTER, SYSTEM_CHECK_MAX); + EEPROMr.write(EEPROM_CRASH_COUNTER, SYSTEM_CHECK_MAX); DEBUG_MSG_P(PSTR("+OK\n")); deferredReset(100, CUSTOM_RESET_TERMINAL); }); @@ -378,6 +362,10 @@ void settingsInject(void *data, size_t len) { _serial.inject((char *) data, len); } +Stream & settingsSerial() { + return (Stream &) _serial; +} + size_t settingsMaxSize() { size_t size = EEPROM_SIZE; if (size > SPI_FLASH_SEC_SIZE) size = SPI_FLASH_SEC_SIZE; @@ -391,7 +379,7 @@ bool settingsRestoreJson(JsonObject& data) { if (strcmp(app, APP_NAME) != 0) return false; for (unsigned int i = EEPROM_DATA_END; i < SPI_FLASH_SEC_SIZE; i++) { - EEPROM.write(i, 0xFF); + EEPROMr.write(i, 0xFF); } for (auto element : data) { @@ -430,7 +418,7 @@ void settingsRegisterCommand(const String& name, void (*call)(Embedis*)) { void settingsSetup() { - EEPROM.begin(SPI_FLASH_SEC_SIZE); + EEPROMr.begin(SPI_FLASH_SEC_SIZE); _serial.callback([](uint8_t ch) { #if TELNET_SUPPORT @@ -443,8 +431,8 @@ void settingsSetup() { Embedis::dictionary( F("EEPROM"), SPI_FLASH_SEC_SIZE, - [](size_t pos) -> char { return EEPROM.read(pos); }, - [](size_t pos, char value) { EEPROM.write(pos, value); }, + [](size_t pos) -> char { return EEPROMr.read(pos); }, + [](size_t pos, char value) { EEPROMr.write(pos, value); }, #if SETTINGS_AUTOSAVE []() { _settings_save = true; } #else @@ -468,7 +456,7 @@ void settingsSetup() { void settingsLoop() { if (_settings_save) { - EEPROM.commit(); + EEPROMr.commit(); _settings_save = false; } diff --git a/code/espurna/static/index.html.gz.h b/code/espurna/static/index.html.gz.h index 331f0ef4..67a34d66 100644 --- a/code/espurna/static/index.html.gz.h +++ b/code/espurna/static/index.html.gz.h @@ -1,4 +1,4 @@ -#define index_html_gz_len 64897 +#define index_html_gz_len 64940 const uint8_t index_html_gz[] PROGMEM = { 0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xec,0xbd,0xeb,0x7a,0xda,0xca,0xb2,0x28,0xfa,0x2a, 0x0a,0x99,0x33,0x13,0x96,0xb9,0x63,0x6c,0x8c,0x07,0xc9,0x02,0x8c,0x6f,0xf1,0x1d,0x5f,0xe2,0x64,0xe7, @@ -2644,605 +2644,607 @@ const uint8_t index_html_gz[] PROGMEM = { 0x67,0x9b,0x64,0xcb,0x02,0x28,0xc9,0x07,0xa5,0x3a,0xf2,0xd1,0x78,0xeb,0x2a,0x4f,0x4a,0x38,0x0d,0xbb, 0x6b,0x2b,0x36,0x39,0x74,0x64,0xc6,0x21,0xa4,0x54,0x1d,0x23,0x4f,0x44,0x39,0x31,0xd1,0xca,0x6c,0xc6, 0x5b,0x2a,0x72,0x49,0x13,0x21,0x97,0x99,0xa5,0xb8,0x68,0x99,0xbc,0xb5,0x3f,0x2c,0x47,0xda,0xc6,0xee, -0x09,0x2c,0x30,0x34,0x85,0xe0,0x40,0xb4,0xd7,0x43,0x18,0xd0,0x4c,0xf0,0xd9,0xa8,0xbf,0x89,0xa1,0x50, -0xec,0x5d,0x9f,0x4a,0xab,0xb1,0xad,0x5e,0x7a,0x95,0xa2,0x83,0x20,0x5b,0x85,0xfb,0xc8,0x66,0x2c,0xe1, -0xae,0xb9,0x96,0x14,0xe9,0x23,0x74,0xcd,0xba,0x40,0xa3,0x12,0x38,0x0f,0x33,0x7e,0x1f,0x5f,0x1b,0xa3, -0xd1,0x30,0xb0,0xb6,0x70,0x3e,0xa2,0xd7,0x6f,0xe6,0x5e,0xd4,0x1c,0x21,0x1f,0xb1,0x2d,0x1b,0x29,0x7e, -0x0d,0xfa,0x4a,0x5b,0x53,0xab,0xe9,0x44,0xbe,0x7d,0x58,0x80,0xf9,0xe6,0x8a,0x8c,0xc1,0xb1,0xe3,0xe8, -0xde,0xe5,0xfe,0xe9,0x89,0x8a,0x4e,0x69,0xbd,0x50,0xd8,0x07,0xfb,0x28,0x35,0x8e,0x07,0x0e,0x89,0xaa, -0x5f,0xbb,0xaa,0x8b,0x9a,0xb8,0x3c,0xb2,0xfd,0x03,0xde,0xda,0x86,0xf5,0xd3,0x9a,0xa5,0x56,0x5e,0x70, -0x9d,0x4c,0xd0,0x0e,0x9c,0x8c,0xdb,0x06,0x25,0x8a,0xfb,0x6e,0x6c,0x5a,0x1d,0x9e,0x45,0xda,0xe3,0x3a, -0x92,0xb7,0x80,0x94,0x03,0x9a,0x2a,0xf2,0xe9,0xc4,0xe3,0x9d,0x7f,0x92,0x5c,0x76,0x31,0x93,0xf8,0x32, -0x54,0x83,0x94,0x5c,0x63,0xa0,0x37,0x8d,0x10,0x1e,0x71,0x0b,0x66,0x43,0xaf,0xf7,0xc4,0xc9,0x65,0x34, -0x36,0x8b,0x38,0x55,0x6f,0x4a,0xaf,0x6d,0x16,0xf1,0xea,0x77,0xd5,0xf8,0x3c,0x1e,0x2f,0xa7,0xc0,0x4b, -0x5e,0x44,0xe9,0xa4,0xe9,0x8e,0x37,0x19,0x4f,0xcf,0x2e,0x26,0x78,0x3c,0xd1,0x63,0x93,0xe1,0x3f,0x91, -0x3f,0xed,0x16,0xb9,0x04,0xb4,0x77,0xc6,0x35,0xa3,0xd4,0xc0,0xd9,0x30,0xba,0x3a,0x33,0x3b,0x03,0x53, -0x01,0x9f,0x18,0xc5,0x9b,0x84,0xe7,0x99,0xe5,0x38,0xf6,0xcd,0xdb,0x38,0x5d,0x0a,0x2e,0x1c,0x86,0x88, -0xdc,0x23,0x18,0x51,0x71,0x3c,0x7e,0xdf,0x64,0x8a,0x7f,0x47,0x5e,0x88,0x6f,0x03,0xf8,0x39,0x49,0x3f, -0x37,0x01,0x69,0xe2,0x0e,0x18,0xaa,0x0f,0x51,0x1a,0xcf,0xb9,0xf5,0xee,0x02,0x7f,0x57,0x57,0x1e,0x03, -0x21,0x15,0x1a,0x47,0xd5,0x03,0x57,0x75,0x0d,0x7d,0x82,0xf6,0xda,0xa6,0x38,0x83,0x67,0xa4,0x0a,0xa3, -0x4e,0x1a,0xe4,0x62,0x2c,0xc8,0x84,0xec,0x91,0x14,0x50,0x13,0xb3,0x60,0x70,0x06,0x67,0xd1,0xfc,0x8c, -0x9c,0x05,0x3f,0x07,0x46,0x80,0xdc,0x39,0x16,0x36,0x88,0x62,0x1e,0x34,0x4e,0x9c,0xec,0x06,0x48,0xe2, -0x8a,0x37,0x0f,0x53,0xea,0xcc,0x18,0x96,0x6d,0x6f,0x6d,0x17,0x58,0xb8,0x4b,0xe5,0x6e,0x96,0x36,0xd7, -0x56,0x04,0x9c,0xba,0x50,0x9c,0x12,0x90,0x29,0x40,0x76,0x17,0x9d,0x29,0xc9,0x02,0x94,0x74,0x2d,0xd7, -0xde,0xc3,0x12,0x80,0xcc,0xa4,0xd7,0x00,0x7a,0xc3,0x82,0xcb,0x38,0x90,0x30,0x48,0xe4,0xdc,0x65,0xb1, -0xe6,0x1a,0xd4,0x96,0x57,0xac,0x12,0xe5,0x0b,0xa9,0xba,0x8c,0x6d,0x17,0x3c,0xee,0x01,0x08,0x4b,0xc7, -0x8e,0x73,0x8c,0x7a,0x2d,0x6e,0xc6,0x47,0x19,0xa3,0x8d,0xea,0x94,0x56,0x3f,0x95,0x34,0xf9,0x8f,0xe9, -0x2b,0xe2,0x15,0x14,0x4d,0x5d,0x2e,0x44,0x97,0xcd,0xf7,0x7f,0x8e,0x1a,0x83,0x31,0x82,0xa0,0x11,0xb5, -0x63,0x25,0x2c,0xe6,0x24,0x01,0x93,0xdc,0x46,0x66,0x09,0xbe,0xfb,0xcb,0x5a,0x12,0x29,0x02,0x50,0x24, -0x2b,0x56,0x91,0x0c,0x2a,0x9c,0x7c,0x81,0x45,0xbb,0x8a,0x66,0x93,0x78,0xfe,0x8e,0xf9,0xf2,0x9a,0x14, -0x9b,0x35,0x0a,0x0a,0x5c,0x02,0x48,0x82,0xe1,0xf7,0x95,0xf5,0x52,0x4b,0x9b,0x5d,0x17,0x70,0x06,0xdc, -0xbd,0x0a,0xaf,0x7b,0x41,0x87,0x68,0x2c,0xd7,0xa1,0x5e,0x15,0xdc,0x8f,0xeb,0x35,0x79,0xdf,0x89,0x8b, -0x43,0xe1,0x18,0xb5,0x78,0x37,0x84,0x5b,0xaf,0x28,0x54,0x58,0x2f,0x6d,0x6f,0xa3,0x2f,0xe2,0x0d,0x0f, -0xb5,0x05,0x54,0x2d,0x39,0x4a,0x1b,0xc9,0xde,0x8b,0xdc,0x3a,0x33,0x13,0xb0,0xdd,0xeb,0xb5,0xfb,0xbd, -0xcd,0x98,0x9f,0x2e,0x65,0x93,0xa8,0x9d,0x81,0xcb,0x0d,0x4f,0x50,0xb4,0x97,0x81,0xde,0x90,0x4a,0xfe, -0xf7,0x18,0xed,0x45,0x8e,0xb6,0xda,0xd8,0x22,0x63,0x31,0xdf,0x2a,0xd6,0xac,0x86,0x0c,0xd5,0xaa,0xda, -0xed,0x1b,0x1c,0x58,0x55,0x47,0x97,0x9d,0x34,0x77,0x60,0x80,0x3a,0x02,0x1b,0x8f,0x0d,0x38,0xe9,0x2c, -0xc7,0xd0,0xc5,0x72,0xe4,0x9c,0xe5,0x90,0xcc,0xee,0x82,0xda,0x80,0xa1,0x2d,0x8d,0x36,0x39,0x24,0x89, -0xd0,0xc6,0xc6,0x98,0x22,0x87,0x48,0xb0,0xe5,0x3c,0xfe,0x2d,0x73,0xe4,0x1e,0x75,0xd0,0xd4,0x5f,0x3d, -0x4f,0x54,0x6d,0x8a,0x8d,0xe3,0x23,0x99,0x53,0x5d,0x53,0xa5,0xa4,0xa9,0x22,0xcb,0xad,0x9e,0x2b,0x55, -0x3d,0x8e,0xc9,0x92,0xca,0xc9,0x52,0x06,0x91,0xd1,0xaa,0x7b,0xb6,0xe0,0x66,0x12,0xa9,0xd9,0x22,0x22, -0xe4,0xc5,0xec,0x92,0x4b,0x3c,0xd3,0x8d,0xbc,0x82,0x1f,0x7a,0x06,0xde,0x9c,0xf4,0x72,0x87,0x72,0xaf, -0xca,0xdb,0x1e,0x9f,0xb7,0xce,0xba,0xd9,0x35,0x63,0x18,0xd5,0xa7,0x62,0x26,0xa7,0xc3,0x77,0xea,0x55, -0xf0,0x39,0xd1,0x43,0x08,0x16,0x13,0x9c,0x33,0xd9,0x43,0xe7,0x2b,0x86,0xd9,0x15,0xf3,0x35,0x73,0xcd, -0x57,0x49,0x90,0xda,0x84,0x95,0xd4,0x77,0x96,0xa4,0x19,0xeb,0x2e,0xaa,0xcf,0x1f,0xa0,0xa8,0x3e,0x67, -0xd5,0x50,0x79,0xf5,0x2e,0xb9,0xce,0xd3,0xdb,0x2e,0xdf,0xf7,0x39,0x62,0x83,0xac,0x9a,0x93,0xa8,0xc0, -0x48,0x47,0x6c,0x61,0x4e,0x49,0xe2,0x30,0x5d,0xf3,0x71,0x1d,0x66,0x24,0xec,0xf4,0x95,0x3a,0x8d,0x82, -0x96,0x63,0x5d,0x9d,0x3d,0x42,0xcf,0x46,0xca,0x05,0x49,0xdd,0x46,0x9d,0x54,0xa9,0x71,0xf0,0x74,0xf1, -0x09,0x39,0x93,0x3a,0x46,0xfa,0x59,0x91,0x19,0x0c,0x48,0x10,0x59,0x84,0x64,0x44,0x75,0xd9,0x45,0x8d, -0x7a,0x58,0x85,0x4e,0x89,0xeb,0x2c,0x65,0xf1,0xc4,0x40,0xb2,0xe2,0x01,0xc7,0xa8,0xd8,0x67,0x2d,0x81, -0x38,0x47,0x1f,0x47,0x9c,0xc4,0xf1,0x32,0xc8,0x91,0x2f,0xd3,0xfe,0x67,0x3c,0x21,0x07,0xde,0xfb,0x77, -0x5e,0x00,0x34,0x34,0xd3,0x5e,0xbe,0xf4,0x6e,0x58,0x49,0x89,0x1e,0x0b,0xba,0x49,0xc1,0x8c,0xfa,0xbd, -0x74,0x5e,0x22,0xc9,0x5f,0x56,0xec,0x46,0x64,0xa8,0xbf,0xa8,0x21,0xab,0x5e,0xb7,0xac,0x71,0xe3,0x8c, -0xe6,0xc1,0xbb,0xb6,0x46,0x8e,0xe1,0xdd,0x6b,0x55,0x3d,0x44,0x6a,0xec,0x03,0x1a,0x15,0x47,0x27,0xa4, -0xbb,0x61,0x8e,0x22,0x2a,0x67,0x75,0xa7,0x0b,0x8c,0xb2,0x95,0x8b,0xb1,0xcc,0xe8,0x5b,0xa9,0x6e,0xd1, -0x38,0xe7,0xc6,0x38,0x1b,0xaa,0x42,0xea,0x3d,0x1f,0xc7,0x4d,0x30,0x04,0x19,0xc6,0xc0,0x2e,0x1b,0x60, -0xe9,0xbd,0xdf,0x00,0x5e,0x60,0x4a,0x4d,0x96,0xa5,0xf4,0x01,0xea,0xb0,0xa7,0x17,0x45,0x0d,0x5c,0xa9, -0x09,0x18,0xe0,0x14,0x3e,0xad,0x8e,0x88,0xae,0x53,0x50,0x87,0x3f,0x4d,0xd2,0xcb,0x06,0xe4,0x59,0xf1, -0xc0,0x28,0x92,0xa5,0xa7,0x28,0x92,0x44,0x33,0x5c,0x7b,0x96,0xcb,0xab,0xd4,0x8d,0x35,0x19,0x14,0xeb, -0x68,0xad,0x61,0xc5,0xbd,0xad,0x58,0xc7,0xda,0x54,0xa8,0x98,0xbd,0xdf,0x3e,0x11,0x04,0x1f,0x99,0x3b, -0xf9,0xc8,0xcc,0xc9,0x47,0x66,0x8d,0x7c,0x64,0x35,0x95,0xa0,0x2b,0xa4,0x80,0x0d,0x3d,0xd7,0xb7,0x88, -0xbc,0xb6,0x45,0x18,0xc4,0xab,0xe8,0x50,0xa7,0xdd,0x7e,0x36,0xcf,0xf2,0x83,0x57,0xcf,0x0c,0xce,0xed, -0x0c,0x13,0xdd,0x44,0x8b,0x15,0xd1,0xca,0x0a,0x14,0xca,0xbb,0x0f,0x51,0x24,0x6c,0x59,0x11,0x26,0xd5, -0xb1,0xe2,0x46,0xea,0x42,0x57,0x4a,0xa7,0x3d,0xff,0x6a,0x16,0xc7,0x73,0x42,0xf0,0x03,0x1c,0x27,0x71, -0xde,0xba,0x2e,0xe6,0x09,0x39,0xd8,0xf5,0xae,0xf2,0xe9,0x78,0xe1,0x09,0xd7,0x18,0x9c,0xba,0xd4,0xdd, -0x3c,0xd8,0xcc,0x4a,0xad,0x2a,0x4f,0x6a,0x77,0x60,0x3c,0x3c,0x7c,0x9b,0x19,0xea,0x97,0x64,0xc2,0x01, -0xee,0xc8,0xd0,0xca,0x80,0xc2,0xc9,0xd1,0x8d,0x70,0x9c,0xe3,0x29,0x9f,0xf2,0x53,0x0e,0x81,0xcd,0x58, -0x95,0xb5,0xb1,0x59,0x11,0xf8,0x6e,0x15,0xcf,0x54,0x50,0x1c,0xe9,0x52,0x0c,0x71,0x6c,0x5e,0xd6,0x25, -0x1e,0x55,0xcb,0x8c,0x8e,0x3d,0x88,0xfb,0x47,0xe6,0xf8,0x9d,0x95,0xf6,0xe0,0xc1,0xb8,0x7d,0xfb,0xd6, -0xa2,0x69,0x8e,0xba,0xe2,0x85,0x73,0xbc,0xe4,0x40,0x19,0xc3,0x84,0xb2,0xfd,0xa0,0x2a,0xf8,0x47,0x75, -0x5d,0xb4,0x16,0x5c,0xf3,0x0f,0xee,0xb7,0xef,0x98,0xbc,0xaf,0x0f,0xff,0xf6,0x9b,0x26,0x2f,0x94,0xff, -0xa3,0x27,0xef,0xac,0xb8,0xfc,0xcd,0x93,0x97,0xbe,0x49,0xec,0xa3,0x76,0x90,0x1f,0x9f,0xc2,0x4d,0xa8, -0x3b,0xc3,0x1d,0xa4,0x0d,0xd3,0xba,0xda,0x5a,0xfa,0x3d,0xcc,0x28,0x9a,0x32,0x2e,0x49,0xcc,0xe6,0x9a, -0x77,0x80,0x28,0xca,0x87,0xea,0x13,0x0e,0x46,0x3f,0x8d,0xe7,0xd6,0x7e,0x7b,0x26,0x52,0x2d,0xda,0xef, -0xf6,0x38,0x52,0x8f,0xbe,0xd7,0x3a,0x07,0x69,0x17,0xfd,0xe8,0xc7,0x43,0x74,0xcb,0x03,0x7f,0x7f,0xf8, -0x31,0x80,0xab,0xfd,0xc6,0xb2,0x88,0x3f,0xce,0x12,0x54,0xa6,0x68,0x45,0x9d,0x4e,0x00,0x9f,0x30,0xdb, -0x37,0x36,0xe0,0xb7,0xef,0x0b,0xd1,0x71,0xdc,0x89,0x02,0xc3,0xd3,0x9b,0x4b,0xad,0x4b,0x08,0x14,0x4b, -0x6b,0x82,0xa6,0xb7,0x4f,0xd0,0xb4,0xd2,0xb0,0x36,0x68,0xc4,0xbd,0x65,0x29,0xa4,0x0c,0x1e,0x82,0xc4, -0x0a,0x12,0x7c,0xf5,0xd1,0x29,0xd2,0x7c,0xa0,0x24,0x18,0x54,0x7c,0x27,0x1a,0x26,0x92,0x33,0x9c,0x84, -0x59,0x3b,0x09,0xe6,0x50,0xba,0xa8,0x73,0x16,0x3c,0x57,0xbc,0x60,0x6e,0xee,0xf7,0x93,0x6a,0x1a,0x36, -0x83,0x18,0xab,0x96,0xe5,0x37,0xe2,0x90,0x9a,0x4b,0xf9,0x8e,0x18,0x55,0x3c,0x95,0xa0,0xca,0xb9,0x31, -0xdf,0xc5,0xd0,0x7a,0x1c,0xec,0x8f,0xd1,0x8e,0x09,0x6d,0x9d,0xdd,0xe3,0x6b,0xd0,0xbd,0xd8,0xbd,0x44, -0xb2,0x7b,0x5a,0xeb,0x89,0xc1,0xef,0xe5,0xe7,0xe3,0x9f,0xe3,0x28,0xaf,0x0f,0xac,0x35,0x62,0x34,0xb6, -0xf2,0x48,0x8c,0xcd,0x09,0x0d,0x75,0xa0,0x3c,0x33,0xe5,0xd1,0x2a,0x35,0xda,0x74,0x12,0xbc,0x25,0x4a, -0x19,0xb2,0x9e,0xc1,0x69,0xe8,0x15,0xca,0xc0,0xe5,0x65,0x96,0x4f,0x35,0xb9,0xfb,0xc3,0x90,0x39,0xa7, -0x4a,0x7e,0x07,0x6c,0xd0,0x27,0xc4,0x6f,0xc4,0xa5,0x20,0xcf,0xb8,0xf7,0xc7,0x44,0x28,0x9d,0xf1,0x42, -0xba,0x31,0xef,0xf9,0x07,0xe7,0x63,0x74,0x52,0x62,0x6c,0xcc,0x39,0xa7,0xe1,0xaa,0x9f,0xc7,0x53,0x6c, -0x54,0x2e,0xfc,0xa0,0xd4,0x01,0xee,0xb2,0x1b,0xc3,0x46,0xa1,0x02,0x72,0xaf,0xd5,0x56,0x2a,0x71,0xbf, -0xe9,0xfd,0xae,0xc9,0xb2,0xcf,0x01,0x15,0xae,0xe5,0x88,0x4e,0x07,0x11,0xbe,0x32,0x50,0xf3,0xd1,0x8d, -0xd1,0x8a,0xbc,0x0e,0x43,0x27,0x3a,0x3c,0xd5,0x8c,0xab,0xb0,0x9c,0xc4,0x8d,0x65,0xc4,0x8c,0xb0,0x0b, -0xf1,0x6c,0x6b,0x2c,0x55,0x30,0x19,0xcd,0x32,0x38,0x27,0x80,0x60,0x06,0xff,0x2c,0x68,0x8f,0x02,0x91, -0x6a,0xa0,0x34,0x55,0x22,0xe1,0xb3,0x01,0xdd,0x55,0x9d,0x92,0x06,0x6c,0xc5,0xe4,0xe2,0xc3,0x82,0x4c, -0x1e,0x12,0xc0,0x25,0x1c,0x63,0xf8,0x06,0x86,0x30,0xec,0x9e,0xa2,0x4d,0xe1,0xd6,0xbb,0x5a,0xa6,0x65, -0xac,0x52,0x26,0xe5,0x3c,0xd6,0x8d,0x55,0x3c,0xa9,0xe8,0x5e,0xd5,0x12,0x77,0x65,0x1a,0x54,0xd7,0xe1, -0x00,0x69,0xea,0x2d,0x95,0x2a,0x08,0xcb,0x1b,0x76,0xf0,0xdb,0xfd,0x1c,0xd3,0x8d,0xbd,0x0b,0x64,0x7b, -0x61,0xbb,0x8e,0x60,0xcf,0x99,0x11,0xd9,0x77,0xd0,0x23,0xe9,0x55,0x3c,0x26,0xed,0x64,0x7c,0x15,0x45, -0xef,0x17,0x42,0x51,0x86,0x44,0x3a,0x91,0xf9,0x34,0x20,0xa4,0x56,0xeb,0x95,0x03,0x4c,0xcc,0x5e,0x28, -0xd5,0x1a,0x09,0xa0,0xf2,0xa1,0x27,0x91,0xb4,0xfd,0x0c,0x0d,0x05,0x33,0x7a,0xa6,0xca,0xa2,0x09,0xbb, -0x60,0x63,0x20,0xed,0x7d,0x99,0x5e,0x92,0x09,0x3d,0x18,0x9c,0xfd,0x6c,0x99,0x92,0x57,0xc6,0xd2,0x17, -0x29,0x79,0x74,0xf5,0x37,0xf6,0x93,0x2a,0xd0,0xb6,0xef,0x73,0xac,0x3b,0xcc,0x16,0x25,0x34,0x4f,0x2f, -0xa2,0x2f,0xbc,0x9c,0xbc,0xa0,0xdf,0x7f,0x0a,0x78,0x01,0x08,0x57,0x49,0x23,0x0b,0xbc,0xac,0x81,0xa2, -0xc9,0xfd,0xb3,0xbd,0xfd,0xdd,0xb9,0x19,0x0c,0xc8,0x2e,0xf8,0xe7,0x08,0xfd,0x23,0x50,0x47,0x80,0x5d, -0xe0,0x26,0xae,0x4d,0xee,0x4c,0x9c,0xd3,0x91,0x8c,0x37,0x19,0x90,0xe1,0x43,0xa5,0xaa,0x9d,0x77,0x67, -0x61,0x76,0xdc,0x3b,0xd9,0x42,0x23,0x9f,0xbc,0x5b,0xc0,0x47,0xff,0x64,0x0b,0x98,0x13,0xf8,0xb8,0x84, -0x8f,0x6d,0xfe,0x78,0x00,0x8a,0xcc,0x25,0xa1,0xf1,0x31,0xe2,0xa7,0x31,0xf0,0x3a,0x25,0x6a,0xbc,0x3d, -0xee,0x68,0x51,0x45,0x12,0x3a,0x7b,0x0d,0x00,0x71,0x7b,0xa7,0x4e,0xab,0xa3,0xb1,0x22,0xb5,0xe0,0x5d, -0xed,0x36,0x14,0x03,0xed,0xaa,0x5f,0x65,0xea,0x75,0x4b,0xe6,0x47,0xce,0x5c,0xf9,0x1d,0x46,0xe4,0xab, -0x05,0x59,0x21,0x99,0xa5,0xee,0x01,0x82,0x45,0x22,0x10,0xed,0xe6,0xa7,0x61,0x57,0x49,0xde,0xeb,0x73, -0x56,0xcb,0xac,0x18,0xcb,0x88,0x2e,0xa5,0xbc,0x94,0x92,0xf3,0x44,0xab,0x4b,0x7b,0x4c,0x15,0x78,0xb8, -0x1f,0x52,0xb5,0x57,0x38,0xe3,0xfd,0x95,0x1f,0xd3,0x70,0x37,0x90,0x0f,0xa5,0x6a,0xb2,0xeb,0x6f,0xa7, -0xe2,0x1d,0xd6,0xd3,0x25,0xc1,0x4e,0xdc,0x55,0xae,0x13,0x79,0x25,0xa5,0xac,0x16,0x1a,0xca,0x15,0x0e, -0x79,0x6f,0xd7,0x96,0x8a,0x26,0x6d,0xb0,0x5b,0xa9,0x89,0x9f,0xc4,0x50,0x49,0xd3,0x89,0x3a,0x5e,0xb5, -0x87,0xbc,0x28,0xd0,0xa0,0xab,0xdf,0xd5,0xb9,0x27,0x2b,0xac,0x04,0x1b,0x4d,0x95,0x9a,0xaf,0x66,0x51, -0x60,0x95,0x32,0xbf,0xad,0x06,0x94,0x3d,0xc7,0xdd,0x50,0xd6,0xc0,0xb5,0x0f,0x47,0x9d,0x0f,0xc0,0xda, -0x2a,0x66,0x25,0x58,0x6d,0x08,0xfd,0x8d,0x7a,0xe5,0x42,0x05,0xc2,0xd2,0xf2,0x88,0x4e,0x7c,0x79,0x08, -0xe0,0xeb,0xb5,0xbd,0x28,0xd5,0xa3,0xb6,0xe0,0x59,0xb5,0x75,0x59,0xe5,0x29,0x0f,0x2a,0x2d,0x3d,0x19, -0xb5,0xaa,0x39,0x87,0xfd,0x73,0x74,0x8c,0x32,0xec,0xab,0xa3,0xe5,0x4b,0x71,0xbf,0x66,0x0e,0x21,0x37, -0x76,0x42,0x2c,0x41,0xf5,0xa6,0x44,0x53,0xd8,0xe9,0xfc,0xc4,0x47,0x18,0x7a,0xa6,0x94,0x0a,0xe1,0x90, -0x36,0xd4,0xbb,0xca,0x2f,0x72,0x38,0x97,0x3b,0x5e,0x1b,0x6f,0x0a,0xf8,0x98,0x3d,0x49,0x60,0x7f,0x25, -0xf3,0x9c,0x24,0x9d,0xc5,0x79,0x82,0x4a,0x79,0x34,0x93,0x48,0xc5,0x30,0x59,0x88,0xbd,0x99,0xaf,0x19, -0xc6,0xe9,0xfc,0x88,0x9e,0x57,0x59,0xd0,0x2e,0x9c,0xfa,0x0c,0x27,0xe2,0x58,0x41,0xbd,0x24,0x0f,0x7d, -0xf9,0x94,0x8b,0x01,0x06,0x8d,0x01,0x02,0x4d,0xba,0x29,0xb2,0xec,0xbe,0x09,0x51,0xc6,0xf3,0x34,0x2e, -0x05,0x0c,0x35,0x8c,0x76,0xf1,0xb5,0x55,0x0a,0x89,0xa1,0x58,0x33,0x4a,0x49,0x5c,0x6e,0x1e,0x2a,0xc1, -0x5e,0xbe,0x6c,0xb7,0x24,0x16,0xaa,0x00,0x8e,0xc2,0x68,0xe4,0xed,0xbf,0x7f,0xf7,0xee,0xc5,0xfe,0xd1, -0x8b,0xe7,0xde,0xc0,0x7b,0xf7,0xfe,0x68,0xad,0xfa,0x86,0x32,0x69,0xb9,0x70,0x14,0x39,0xfc,0xfb,0xbb, -0xfd,0x47,0x12,0x5e,0x7c,0xe0,0x76,0xba,0x40,0x3f,0x67,0x82,0x46,0xd1,0x14,0xe3,0x99,0x53,0x38,0x38, -0x0b,0x15,0x8c,0x2d,0xfe,0xc3,0xd3,0xde,0x50,0x4b,0x9f,0x0b,0x73,0x50,0x82,0x5f,0xae,0xce,0x5e,0x40, -0xf6,0xf6,0x63,0x33,0x7b,0xfb,0xb1,0xca,0x9e,0x85,0xf3,0x61,0x14,0xce,0xda,0xde,0x64,0xad,0x32,0x2b, -0x5d,0x90,0x9d,0xe9,0x4c,0x4b,0x59,0x52,0xca,0x85,0x96,0x72,0x46,0x29,0x85,0x77,0x83,0xb5,0x9c,0x07, -0xd3,0xe0,0xc2,0x56,0x15,0x51,0x43,0x3c,0xbc,0xd0,0x8c,0x36,0x5b,0x86,0x5d,0xdd,0x85,0x69,0x54,0x77, -0x61,0x3f,0xbb,0x44,0x4d,0x4f,0x2a,0xd2,0xcc,0xce,0x55,0x07,0x9e,0x76,0xb8,0x0a,0x07,0xad,0x73,0x95, -0xb9,0xc8,0xc9,0xfe,0xce,0xf3,0x82,0x69,0x95,0x86,0xd1,0x25,0x38,0x91,0x0b,0x9d,0xb7,0xa3,0xf6,0xd4, -0x17,0x0b,0xe8,0xb2,0x69,0xc6,0x0e,0x2f,0xf5,0xee,0x9c,0x87,0x97,0x8e,0x26,0x2e,0xeb,0x4d,0x5c,0xf2, -0x41,0x2b,0xda,0xa0,0x26,0xae,0x42,0x5b,0x48,0x5d,0x35,0x72,0xa5,0x35,0x72,0x25,0x0e,0x70,0x0a,0xdb, -0x71,0xad,0xbd,0x20,0x45,0x7c,0xa9,0xa7,0x00,0xb3,0x91,0xaf,0xee,0xe4,0xda,0x21,0x73,0x4c,0x91,0x7d, -0x1e,0x91,0x8e,0x82,0xeb,0x5d,0x2b,0x3a,0x4e,0x4f,0x1a,0x35,0x43,0xcc,0x08,0xb6,0x11,0xaf,0xe4,0x71, -0x88,0x65,0x82,0xaf,0xa1,0xfe,0xba,0x7a,0x4d,0x57,0xb3,0x6b,0xf1,0x4e,0x39,0x18,0xcb,0x17,0x4b,0x74, -0xde,0xab,0x33,0xd0,0x63,0x07,0x03,0xad,0xb8,0x7e,0x0c,0x27,0x66,0xdb,0xa3,0x93,0xde,0x3d,0xca,0xeb, -0xbf,0x1a,0x36,0xe9,0x26,0xcd,0x2a,0x10,0xee,0x9d,0xb8,0xe9,0x97,0x2b,0xde,0xa8,0x1a,0xcb,0x2a,0xca, -0x94,0x8d,0x64,0x91,0xf1,0x53,0x6c,0xca,0x7c,0x66,0xca,0xec,0x87,0xba,0x7e,0x82,0xd1,0xfd,0xcf,0xee, -0xee,0x37,0xf5,0x79,0x9f,0xfb,0xfc,0xf9,0x98,0x9d,0x3c,0x56,0xc3,0xaf,0x3d,0x40,0x98,0x53,0x80,0xf0, -0x38,0x62,0x3c,0x0e,0xc2,0x23,0x76,0x62,0x8b,0x8e,0xff,0x0e,0x43,0x54,0xd1,0x3c,0x18,0x1d,0xb1,0x12, -0x66,0xfb,0xa8,0xbb,0x84,0x1a,0x8a,0x81,0xe5,0x41,0xe1,0xc0,0x0f,0xf6,0xec,0x75,0xac,0x40,0x80,0x6a, -0xd6,0x6c,0x1a,0xee,0x11,0x82,0x87,0xd6,0xfb,0xc1,0x9e,0xda,0xd4,0xd5,0x0f,0xc1,0x66,0x1e,0x19,0x2f, -0x0a,0x37,0xa2,0x4b,0x88,0xf4,0x97,0x30,0x52,0xa2,0x53,0x5d,0xe0,0xf7,0xa5,0xde,0xbf,0x0f,0xd4,0x3f, -0x35,0x53,0x84,0x08,0x8a,0x71,0x23,0xd4,0xa4,0xa5,0xdc,0x87,0xea,0x15,0xcc,0x09,0x43,0x28,0x7d,0x30, -0xd0,0x78,0x03,0x37,0x27,0xb8,0xc6,0x54,0x6d,0xbe,0xe1,0x36,0xdf,0x87,0x6f,0xf4,0x36,0xed,0x3b,0xd1, -0xb1,0xb8,0xcd,0x23,0x6d,0xde,0x77,0x93,0x09,0x92,0xe7,0x58,0xbb,0xc7,0x73,0x3a,0xff,0x16,0x0b,0x11, -0x11,0x7c,0xcf,0xee,0x97,0xf5,0xf9,0x04,0xa7,0x40,0xba,0x43,0x38,0xd0,0x15,0x6d,0x98,0xb6,0xdb,0xbe, -0x2e,0xdf,0x40,0x3f,0xbd,0x6c,0x91,0xbc,0xca,0x46,0xd0,0x47,0x8f,0xa7,0xa6,0xe1,0x61,0x5d,0xb7,0x58, -0x5d,0xcb,0x51,0x3d,0x8d,0xd5,0xc7,0xa5,0xfc,0x24,0x28,0x87,0x96,0xfd,0xb3,0xf1,0xc2,0xcf,0x3b,0x6d, -0x4b,0x13,0x00,0x99,0x26,0xcd,0x41,0x19,0x7a,0x65,0xbe,0x8c,0xeb,0x45,0x95,0x8d,0x9e,0x4f,0xce,0xfd, -0x9a,0x84,0xf7,0x35,0xe0,0xa1,0x14,0xe5,0xea,0xf9,0x15,0xde,0x1e,0x79,0xb7,0x8c,0xac,0x7c,0x71,0x4f, -0xf6,0x87,0x9a,0xd6,0xf2,0xba,0xe6,0x2b,0x16,0xf8,0x85,0x94,0x78,0x73,0x8c,0x61,0x86,0x0a,0xa8,0x25, -0xf9,0xf7,0x42,0x79,0x70,0xbb,0x5d,0xe9,0xd4,0xeb,0x56,0x07,0x21,0x01,0x53,0xae,0xd2,0x1e,0x57,0x76, -0x13,0x46,0x26,0xa6,0x04,0xda,0x8d,0xbc,0xca,0xc1,0x94,0xa0,0xb1,0x27,0x01,0xaa,0xa2,0xf7,0x05,0x1a, -0x9d,0xce,0x2a,0x34,0x28,0xb7,0x09,0x0d,0x91,0xe9,0x40,0x43,0xe4,0xdc,0x82,0x06,0x86,0x41,0x35,0x85, -0xf0,0xbf,0xe4,0xba,0x00,0xfe,0xd8,0xbb,0x42,0xc6,0x59,0x59,0x9e,0x79,0x42,0xb1,0xf4,0x64,0x48,0x4a, -0xe6,0x39,0x1a,0x5b,0x62,0x64,0x0f,0x97,0xc0,0x04,0x21,0xc8,0xb0,0x3a,0xbe,0x5a,0xfb,0xe5,0xe0,0x67, -0xf6,0x17,0x0b,0x17,0x49,0x2c,0x78,0x55,0xa8,0xa0,0x81,0x21,0x36,0xa1,0xe9,0xed,0x71,0x3f,0x8f,0x32, -0x2c,0x12,0xf3,0x9d,0x5f,0xe0,0x14,0x08,0xad,0x61,0x38,0x2b,0x85,0xfa,0xf0,0xd9,0x3c,0xa3,0xd8,0x7b, -0xe2,0x9b,0x9a,0xfa,0x18,0x8f,0x0f,0xe1,0x77,0x5c,0xb6,0x64,0x4b,0x14,0xa1,0x51,0xc2,0x74,0xb3,0x54, -0x30,0xf1,0x2b,0xb5,0xbf,0x8d,0x20,0x79,0x5b,0x9f,0xd2,0xad,0x69,0xe0,0x7d,0xc2,0xa0,0xdd,0x5a,0x62, -0xce,0x89,0xb9,0x91,0x58,0x72,0x62,0x89,0xd3,0x19,0x66,0x9f,0x2e,0x0c,0x2b,0x75,0xf9,0xb3,0x66,0x6f, -0x83,0xae,0xd8,0xa2,0xbc,0x2c,0x28,0x6e,0x0e,0xb3,0xc4,0x1e,0x05,0xaa,0xb7,0x93,0x0b,0x4a,0x87,0x15, -0x55,0xf1,0xcd,0x40,0x15,0x83,0x62,0x92,0xd8,0xb1,0x61,0x97,0x2a,0x21,0x84,0xf3,0x20,0x04,0xf0,0xaf, -0x9d,0xe5,0x2c,0xab,0x57,0xa8,0x85,0x78,0x18,0xa6,0x5d,0xa0,0x64,0x5c,0xeb,0xfd,0x40,0xbb,0xd3,0x07, -0xfa,0x1d,0x59,0xb9,0x93,0x42,0x4f,0xfe,0x15,0xeb,0xdd,0xa3,0x81,0xc7,0x40,0xac,0x86,0x1d,0x4b,0x65, -0xb3,0x2b,0x7e,0x4b,0xab,0x5d,0xf1,0xc9,0x76,0xbb,0x81,0x12,0x51,0x40,0xc3,0x42,0x12,0x01,0xbf,0x90, -0xe9,0xef,0x05,0xcc,0x55,0x7f,0x4f,0x7e,0xea,0xd0,0xfb,0x07,0x6c,0x84,0x8d,0x6e,0x8b,0x9b,0xa4,0xb5, -0x70,0x70,0x2f,0xd0,0x9a,0xae,0x2e,0xf1,0xab,0x58,0x6a,0x3a,0xde,0xd1,0xbe,0x76,0xa4,0x7e,0x0d,0xca, -0xee,0xd5,0x2c,0x39,0xa3,0xc7,0x31,0xbc,0x7b,0xf4,0x7f,0xd4,0x4c,0xc2,0xd6,0xcc,0x98,0x51,0xf4,0xe0, -0x05,0x4b,0x51,0x77,0xb4,0x6a,0xf8,0x39,0x0b,0x2c,0x6f,0x38,0x68,0xe3,0xf3,0x06,0x3b,0x44,0x5c,0x6b, -0x55,0xaa,0x72,0x2a,0xc4,0x86,0x23,0xb6,0x4a,0xb3,0x26,0xb6,0xad,0xd4,0x8f,0x85,0xbd,0x53,0x07,0xe1, -0x3a,0xf3,0x1a,0xa0,0xd2,0x73,0x26,0xb8,0x06,0xdb,0xc2,0x1e,0x19,0x15,0xf6,0x7b,0x3d,0x7e,0xb9,0x96, -0x12,0x63,0x36,0x97,0xb5,0xd4,0xbb,0x84,0xb1,0x96,0x03,0xb0,0xa3,0x89,0x3d,0x1d,0x25,0x3e,0xe8,0x22, -0x52,0x25,0x94,0x16,0x26,0x6b,0x66,0x01,0x9e,0x38,0x16,0xa0,0xb2,0x1c,0xb3,0x61,0x45,0x86,0x01,0x8e, -0x72,0xa7,0x0e,0xe9,0xde,0x5b,0xe0,0xa8,0xe0,0x6f,0x40,0xce,0xa2,0xce,0x99,0x94,0x1b,0x19,0x90,0x52, -0x43,0xdf,0x80,0x16,0xea,0xf0,0x16,0xa8,0xae,0x7a,0x5f,0x7b,0xe3,0xad,0x74,0xee,0xd5,0x2c,0x6e,0x39, -0x8a,0x68,0x2d,0x74,0x28,0x6e,0xb8,0xbb,0x11,0xcc,0x31,0xe0,0xa5,0x31,0x46,0x87,0xdd,0xd4,0xd9,0xa5, -0xd8,0xd8,0xc8,0x5d,0x42,0xda,0xba,0xd4,0x28,0x4a,0xc9,0xee,0x32,0xc2,0x74,0xc3,0x2e,0xa3,0xdb,0x98, -0xf0,0xbc,0xd5,0xcc,0x52,0xf4,0xa7,0x44,0xdd,0x4a,0xc9,0x9a,0x43,0x7c,0x12,0xd5,0xe6,0x0e,0x25,0x1b, -0xa0,0xc0,0x2d,0xc1,0x32,0x35,0x21,0x4d,0x7e,0xc9,0x55,0x73,0x87,0x6d,0x67,0xcc,0x62,0x75,0x87,0x8a, -0xd6,0xe8,0x59,0x56,0xf1,0x9a,0x85,0x4d,0x6d,0xa0,0x35,0xd0,0x2e,0x77,0xb7,0xee,0x3b,0xa4,0x32,0xc7, -0x42,0x5d,0x73,0xab,0x02,0xe9,0xf1,0xa3,0xf2,0x15,0xc1,0x9a,0xe0,0xe6,0xaa,0x04,0x76,0xd2,0xad,0xf1, -0x6b,0x5a,0x35,0x0b,0xcd,0x5a,0xfd,0x32,0xa3,0x29,0xd9,0xd6,0x6a,0x64,0xd5,0xd4,0x06,0xc5,0x4c,0x75, -0x33,0xec,0xdf,0x04,0xda,0xbd,0xb1,0x56,0x09,0xbd,0xe7,0xde,0x56,0xc7,0x76,0xad,0x8e,0x89,0x8a,0x44, -0xa8,0xcf,0x14,0xf9,0x02,0x59,0x71,0x35,0x2b,0x60,0xa5,0xd3,0x16,0x1d,0xd8,0x43,0x7a,0x0e,0x90,0x41, -0xb4,0x3d,0x3e,0x48,0x0e,0x65,0x63,0xc3,0x79,0x80,0x3a,0x3c,0x58,0xd6,0x46,0x32,0x48,0xc8,0x77,0xf6, -0xf1,0x09,0xcb,0xdc,0x86,0x1c,0x9f,0xf9,0xfb,0xae,0x30,0xd0,0xa2,0x07,0xaa,0x34,0xba,0x4c,0xa6,0x11, -0xac,0x0b,0x0a,0x95,0xb6,0x07,0x53,0xb4,0x24,0x59,0x02,0xbb,0xcc,0xec,0x2e,0x23,0x0a,0x38,0x5b,0xe3, -0x56,0x12,0x65,0x91,0x13,0x5a,0x61,0xbb,0x83,0x24,0xdc,0x6a,0x9d,0xcd,0xf2,0x0c,0x26,0xc5,0xf1,0xda, -0xa7,0xad,0x93,0xd6,0xf1,0xa7,0xab,0xee,0x49,0xdb,0xdf,0x92,0xb1,0x24,0xbe,0x7d,0xdb,0x42,0x13,0xac, -0xcf,0x49,0xb9,0x02,0x20,0x43,0x5f,0x84,0x7e,0x6b,0x34,0xe8,0x6e,0xca,0xd7,0xb7,0x51,0x33,0xf4,0x45, -0x91,0xc4,0xfe,0x9a,0x23,0x4b,0x8b,0x0f,0x81,0x5e,0x1d,0x80,0xb4,0x24,0xa4,0xdc,0xe9,0x6d,0x6c,0x40, -0xa9,0xec,0x9f,0xc9,0x7c,0x2e,0x5a,0x19,0xad,0xe5,0x97,0x03,0x59,0x83,0x3f,0xd2,0xea,0x00,0x4e,0xe2, -0x5a,0x90,0x6c,0x80,0xa1,0x2e,0x58,0xd6,0xc2,0x48,0x41,0xc2,0x36,0x26,0xf4,0xbc,0x1b,0x54,0x92,0x30, -0xa9,0x86,0xa2,0x04,0x91,0x22,0xca,0x23,0x07,0x92,0x68,0xf4,0x37,0x73,0x8f,0x55,0x16,0xc5,0x00,0x32, -0x33,0xbb,0xa2,0xc5,0x30,0xe9,0xaa,0xe7,0x48,0x0b,0x82,0x89,0x5a,0xab,0xb6,0x5b,0x44,0xe7,0x51,0x9e, -0x40,0x95,0x14,0x03,0x43,0x77,0xe5,0x2d,0x79,0xb4,0xb8,0x95,0x28,0xc3,0xb5,0xa0,0x08,0x22,0x36,0xa6, -0xc4,0x20,0x08,0x70,0xdf,0x21,0xb7,0xc7,0xdf,0x6b,0x1e,0xfa,0x95,0x5b,0x6b,0xe4,0x2c,0xaa,0x7b,0x6c, -0xe1,0x43,0x26,0x59,0x22,0xbd,0xbf,0x4a,0x31,0xaa,0x4c,0x9c,0x97,0x5f,0x99,0x0b,0xc1,0xa0,0x8f,0x24, -0xab,0x2c,0x50,0x6c,0x40,0xce,0xdc,0xd3,0x13,0x14,0x99,0xaa,0x76,0x88,0xe7,0xe5,0xb8,0x8d,0xf8,0xeb, -0x1d,0xc5,0xec,0xa3,0x30,0x96,0x94,0x86,0x81,0x22,0xf7,0xc5,0x6d,0x11,0x59,0xd2,0xe7,0xc9,0x25,0x32, -0x29,0x94,0x07,0x5c,0x02,0x30,0x56,0xec,0x19,0x52,0xa6,0x4d,0x92,0x02,0x9d,0x15,0xa0,0x05,0xe4,0x21, -0x2d,0x3b,0xea,0x30,0xe7,0x39,0xf4,0xaa,0x61,0x3d,0x29,0xb6,0x89,0x16,0x1e,0x85,0xd8,0x76,0x00,0x3a, -0x62,0xf9,0x50,0x9d,0xba,0x66,0xf1,0xc6,0x06,0x3b,0xf3,0x25,0x09,0x04,0xf4,0x1e,0x4f,0x1c,0xc8,0xc4, -0xbb,0x0f,0x66,0x7b,0x02,0x0d,0x4b,0x3f,0xb9,0xb1,0xd4,0x99,0x84,0x90,0x05,0x91,0x71,0x4b,0x22,0xe5, -0x9f,0x1b,0x39,0x31,0x1d,0xeb,0xa4,0x78,0xce,0x9d,0x9f,0x34,0x21,0x4b,0xf4,0x4e,0x8a,0x96,0x37,0x10, -0x64,0x9a,0x78,0x56,0x1d,0x2e,0x72,0xaf,0xac,0x0d,0x0b,0x70,0x88,0x92,0xb5,0x33,0x34,0x43,0x23,0x39, -0x23,0x11,0x5b,0x62,0x4f,0xd6,0x69,0x6d,0xef,0xd1,0xda,0xd6,0xae,0xec,0x88,0xca,0x0b,0xab,0x8a,0x16, -0xca,0x01,0xbf,0x70,0x88,0x4c,0x8a,0xd8,0x28,0x8b,0xd8,0x21,0xdd,0x1e,0xab,0x7a,0x4a,0x7b,0x7f,0x7e, -0x2e,0x6b,0xdf,0xfd,0x94,0xae,0xad,0xed,0xa0,0x3c,0x66,0x57,0x40,0x98,0x1a,0xdd,0x6d,0x0f,0xb6,0x4d, -0xcc,0xfd,0x94,0xee,0x6c,0x51,0xe1,0x2a,0xa4,0xca,0x51,0xd6,0x32,0xd1,0xaa,0x90,0x38,0x84,0x22,0xa1, -0x81,0x51,0xa5,0xc7,0xc1,0x8a,0x1a,0x12,0x36,0xbd,0x0b,0xbe,0x69,0x33,0xba,0xbf,0x19,0xd9,0xf4,0x19, -0xf9,0x20,0x27,0x0c,0xb4,0xe1,0x48,0x3e,0xa0,0xa0,0x91,0xc6,0x94,0x01,0xde,0xa7,0x8f,0x76,0xb6,0x8c, -0x90,0x32,0x2b,0xfa,0x7f,0xd7,0x3a,0xcf,0xcf,0xef,0x5c,0x69,0xaa,0xd1,0x34,0x5d,0x45,0x52,0x5e,0x35, -0x76,0xdb,0x82,0x5c,0x9c,0xa9,0xc8,0x79,0xc7,0xc6,0x45,0x29,0x62,0x75,0x57,0x57,0x4c,0x20,0xb7,0x55, -0xcf,0xb0,0x46,0xdd,0x07,0xc8,0x65,0xac,0xac,0x9a,0x20,0xee,0x5a,0xf3,0x7a,0xcf,0x5c,0x9f,0xae,0xed, -0x4d,0x5f,0x9f,0xe8,0xef,0x55,0x6d,0xff,0x74,0x38,0x2a,0xce,0xf1,0x58,0xab,0xd8,0x5c,0x64,0xc6,0x0c, -0xb6,0x56,0xe8,0x89,0x94,0xdf,0x2c,0x53,0x66,0x63,0xb0,0x79,0xe0,0x69,0x38,0x24,0xb7,0x8e,0xda,0x29, -0xba,0xb9,0x90,0xfb,0xa5,0x1e,0xc2,0xa9,0x8a,0x9f,0xcd,0x6e,0xe7,0xe8,0xce,0x0c,0x2c,0xf9,0x32,0x9a, -0x8f,0x62,0xf1,0x43,0xc6,0x21,0xb3,0xf7,0x34,0x7b,0x57,0xac,0xf3,0x23,0xe4,0xa8,0x1d,0x4f,0x2e,0x69, -0x4c,0x65,0x4e,0x2d,0x56,0x33,0x12,0xd3,0xaa,0xe0,0x3c,0x03,0x53,0x7c,0xb2,0xe5,0xd8,0x03,0x90,0xdf, -0xd6,0x1e,0xc8,0xf8,0x1d,0x52,0xc4,0x1d,0xe8,0x88,0xb0,0x3a,0xf8,0x68,0x66,0x6f,0x08,0x46,0x13,0xa5, -0xab,0x89,0xb4,0x6a,0xa2,0xd4,0x9a,0x48,0xcd,0x26,0x72,0x56,0x38,0xa4,0x36,0xb4,0xcd,0x9f,0x9d,0x1b, -0x25,0x61,0xb1,0x5b,0x8e,0x8a,0x41,0x19,0x24,0x6d,0x57,0x13,0xfa,0xe0,0xca,0xc6,0xf4,0x59,0xf7,0x96, -0x22,0x15,0x58,0x83,0x4b,0xed,0x5f,0x13,0xf4,0x20,0xb9,0x41,0xb1,0x69,0xd5,0x4c,0x6d,0x31,0x18,0xc0, -0xed,0xc7,0x37,0xc6,0xb4,0x37,0x33,0x7f,0x42,0xed,0x66,0x73,0x1c,0xd3,0xb7,0x19,0xf0,0x99,0xcf,0xb3, -0x2b,0x6d,0x6a,0x24,0x32,0x70,0x38,0xbe,0x1c,0x03,0x70,0x8c,0x27,0xf9,0x73,0xe6,0x30,0xf0,0x1a,0xc3, -0x87,0x9e,0x3a,0xd5,0x5a,0xca,0x17,0x6b,0x19,0x8a,0xa0,0x33,0xdf,0xbe,0x25,0x5d,0x29,0xc9,0x25,0x3e, -0x40,0xdc,0x6d,0x60,0x1d,0x2d,0x61,0x43,0x15,0x81,0xc2,0x01,0x10,0x63,0x65,0x32,0x13,0x3d,0xff,0xba, -0x8f,0x3c,0x3f,0x10,0x3c,0xd4,0x69,0x06,0x4b,0x2b,0x8f,0xa6,0x14,0xd5,0x4a,0x9e,0xaf,0x61,0x09,0xa9, -0x9c,0x8d,0x81,0x48,0xd8,0xeb,0xad,0x26,0x98,0xb1,0x7a,0xef,0x55,0x53,0xe4,0xdb,0xb7,0x9e,0xdd,0xfd, -0xe7,0x50,0xfb,0xdb,0xec,0x52,0x9b,0xc0,0x3a,0xe3,0x35,0xe4,0x20,0x9c,0x35,0x0c,0x43,0x1d,0x47,0xd9, -0xfb,0x22,0x6c,0x95,0xed,0x3a,0x66,0x1d,0x47,0x17,0xfc,0x2d,0xe6,0x38,0x70,0x66,0x1d,0x26,0x93,0x38, -0x28,0x90,0x01,0x6e,0x15,0x21,0x4c,0xb1,0x62,0xb7,0x4f,0x3f,0xfb,0x38,0xa3,0x8b,0x4d,0x0b,0xb0,0x36, -0xb6,0x14,0x60,0x26,0xbd,0x31,0x8f,0x3b,0x7d,0xd8,0x53,0x63,0x93,0x8b,0x26,0xc9,0xb2,0xb8,0x31,0x0f, -0x52,0x86,0xe6,0x98,0x19,0xb4,0x0b,0x0e,0x3a,0x5a,0x85,0x36,0x04,0x05,0x7f,0xe9,0xb4,0xfa,0x9d,0xc2, -0xb7,0x90,0xbb,0xa9,0x4d,0x2e,0xa4,0xee,0x0b,0xdd,0xad,0x5d,0x45,0xdc,0x3b,0x91,0x16,0x1d,0xfe,0x36, -0x4d,0x36,0x26,0x2b,0x20,0x34,0xc5,0x30,0x71,0xad,0xbb,0xd1,0x59,0xe3,0x6b,0xcc,0xa7,0xbf,0x74,0x37, -0xec,0x3e,0x51,0x57,0x70,0x5f,0x06,0x74,0x77,0x40,0xae,0x37,0xe5,0xf8,0x55,0x71,0xe7,0xb4,0xe6,0xb0, -0xa9,0x0a,0x6b,0x11,0xb2,0xb9,0x1e,0xd6,0x41,0xd0,0x9d,0xaf,0xa4,0x92,0x0b,0x15,0x9f,0x2d,0xd5,0x78, -0x63,0x57,0x7c,0xc5,0x71,0x4f,0x44,0x19,0x6b,0x58,0xc4,0xab,0x66,0x13,0xfb,0xd8,0x58,0x4e,0x65,0xd4, -0xd4,0xe0,0x8d,0xe8,0xf3,0xfa,0x58,0x8d,0xac,0xe3,0x1e,0xdd,0x9c,0xb1,0x57,0x04,0xfd,0x52,0xc0,0x49, -0xc2,0xbf,0x9e,0x55,0x80,0x0d,0x86,0x9b,0xcb,0xc4,0x61,0x23,0x1d,0x46,0xe6,0xd8,0xb7,0xb7,0x07,0x3d, -0x63,0xf9,0x88,0xc8,0x74,0x62,0x09,0x61,0x6c,0x0a,0xaa,0x5f,0x44,0x70,0xb0,0x16,0x94,0x02,0xe6,0x45, -0x15,0x3b,0x16,0x95,0xbb,0xbc,0x58,0x62,0xaa,0xbc,0xb1,0xcc,0x1a,0x1b,0x75,0x95,0xa1,0x85,0x17,0x77, -0xac,0x35,0x67,0x55,0x60,0x8d,0x99,0x7e,0x15,0xab,0x0d,0x1b,0x8a,0x23,0xd4,0xd0,0x71,0x00,0xc7,0xd8, -0x29,0x2b,0x07,0x84,0x5e,0x51,0xb0,0x64,0xdc,0x29,0x65,0x78,0xc2,0x2a,0xc4,0x11,0x99,0x23,0x54,0xe1, -0x7d,0x1c,0xe5,0x7e,0x59,0x38,0x4a,0x19,0x82,0x19,0x0e,0x0d,0xd3,0xf2,0x2e,0xf0,0x38,0xc2,0x21,0x5f, -0x2b,0xf1,0xa8,0xc0,0x5f,0x42,0x5d,0xba,0x01,0x76,0xb9,0x60,0x48,0x52,0x30,0xc7,0xe8,0x4b,0xd5,0x7c, -0xa8,0xcb,0xd3,0x14,0x62,0x62,0x0d,0xb4,0x64,0x18,0x45,0x6d,0xc6,0x69,0x75,0xa3,0x2f,0x25,0xae,0xbd, -0xe0,0xb0,0x8a,0x0d,0x9d,0x54,0x67,0xe8,0x6d,0xbd,0xbc,0x7b,0x1f,0x57,0xf4,0xd0,0xbe,0x5e,0x9a,0xb7, -0x4f,0xc7,0x28,0xd3,0x56,0xdb,0xc8,0x9c,0xa8,0x9e,0x6b,0xcc,0x90,0x79,0xb1,0xaa,0xce,0x12,0x31,0xfb, -0x54,0x11,0x9e,0xf9,0x9d,0xc7,0x37,0xf6,0xcd,0x44,0x3b,0x9b,0x62,0xca,0x4e,0x42,0x57,0xc9,0x76,0x3f, -0x30,0xd9,0xe2,0x8d,0x8d,0xef,0x6d,0xf9,0xca,0xce,0x4f,0xa8,0x79,0xda,0x09,0x7f,0x94,0xd7,0x74,0x39, -0xf5,0x43,0x81,0xcd,0xed,0x0c,0x57,0x27,0xd1,0x66,0x05,0xdd,0xb3,0xab,0x4d,0xa2,0xc6,0x2f,0x30,0xd6, -0xf6,0xc9,0xd6,0x78,0xbc,0x5a,0x9b,0xcc,0x03,0xce,0x5a,0xbb,0x29,0xb9,0x09,0x3a,0x1a,0xeb,0xdd,0x76, -0x2c,0xd7,0xea,0x0a,0x9a,0x99,0xb5,0xbb,0xef,0xcc,0xf6,0xb1,0x5e,0x6d,0x06,0x6e,0xa6,0xb1,0x7e,0x68, -0xa3,0xa7,0xcb,0xda,0x89,0xa8,0xb4,0xc4,0xeb,0x3c,0xe6,0x03,0x38,0xc9,0xf5,0xea,0x68,0xdd,0xd8,0x20, -0x8f,0xcd,0xd1,0xb8,0x68,0x39,0x98,0x82,0x4e,0xe9,0xef,0x72,0x27,0x21,0xe7,0x68,0x86,0xfb,0x40,0x36, -0x9f,0x50,0xb0,0x22,0x75,0x36,0x63,0xe8,0x3e,0x41,0x68,0xc9,0x21,0x12,0xef,0xe2,0xa6,0xc4,0x2f,0x0b, -0x37,0x1d,0xfe,0xe5,0x7d,0xd6,0x50,0x7c,0x81,0xae,0x1b,0x50,0xff,0x69,0xbd,0xaf,0x0b,0x04,0xc3,0x6b, -0x79,0x34,0x50,0x5c,0xf6,0xbb,0x19,0xd8,0xd7,0xec,0xf2,0x1d,0xa6,0xfb,0xc6,0x0c,0x19,0x78,0x9a,0xe8, -0x41,0x8e,0xba,0x17,0x98,0xb2,0x26,0x03,0x48,0xd5,0xe5,0x05,0xba,0x08,0xc6,0x80,0xf9,0x99,0x33,0x24, -0x84,0x10,0x2a,0x39,0x40,0xce,0xcf,0x51,0x88,0xaf,0x04,0x0f,0x06,0x04,0x77,0x42,0xe5,0x57,0xf2,0x03, -0x07,0x14,0xe7,0x4a,0xd8,0x4a,0x20,0xe0,0x00,0x3d,0xe0,0x20,0x79,0xc6,0x14,0x1a,0x3c,0x09,0xf4,0x4b, -0xdd,0xa0,0x2f,0xbf,0x79,0x27,0x18,0x3c,0x0e,0xac,0xed,0x0f,0x0a,0x48,0xd9,0x2a,0x34,0x51,0x69,0x9e, -0xe1,0x8b,0x97,0xf0,0x9e,0xa0,0xed,0xe6,0x37,0x30,0xae,0x18,0x08,0xfb,0x7b,0x5d,0x49,0x8d,0xb7,0xd5, -0xe4,0xfd,0xa1,0x94,0x0e,0x86,0x71,0x40,0x17,0x79,0x1d,0xc6,0x3a,0x12,0xf0,0x6e,0x0e,0x37,0xf3,0x60, -0x16,0x64,0x41,0x1e,0xcc,0x83,0x49,0x70,0x16,0x2c,0x83,0x85,0x30,0x16,0xec,0xef,0xd4,0xa3,0xa3,0xa5, -0x2c,0x35,0xae,0x02,0x21,0xf7,0xfc,0xc1,0x31,0xfa,0x36,0x62,0xc9,0x41,0x6b,0x22,0x7f,0x9c,0x85,0x09, -0x06,0x0a,0x1d,0x9d,0x29,0xa1,0xb1,0x08,0x21,0xe7,0x8f,0x26,0x83,0x6a,0x56,0x56,0x22,0xe5,0xa5,0x7a, -0xdd,0x2a,0xd1,0x9c,0x62,0xa0,0x34,0x90,0xd0,0x7a,0xa3,0x17,0xcc,0xc3,0xa5,0x54,0x11,0xcb,0x77,0xe6, -0xc3,0xbc,0xdd,0xf6,0xcb,0x70,0x89,0x7e,0x95,0x22,0xb6,0xd5,0x22,0x29,0x75,0x21,0x83,0xcf,0x46,0xa3, -0xd6,0x8c,0x30,0x08,0xb2,0x70,0x7b,0x07,0xd6,0x93,0x89,0x7f,0x12,0xf4,0x09,0x6f,0x81,0xec,0x22,0x8c, -0x8e,0x67,0x27,0xb0,0x37,0x49,0xee,0x24,0x0a,0x32,0xf4,0x09,0x19,0x5f,0xad,0xa1,0x97,0x7d,0xea,0x89, -0xce,0xda,0xde,0x08,0xca,0x6a,0xc4,0x6e,0x7c,0x86,0xe1,0xa7,0x1d,0x0a,0x81,0x16,0x5e,0xd3,0xf9,0x67, -0x08,0xec,0x83,0x6b,0x73,0x89,0xf5,0x6b,0xeb,0x49,0x34,0xb2,0x62,0x31,0x09,0x88,0xe6,0x95,0x24,0x00, -0x1a,0x97,0x91,0x91,0x5f,0x5f,0x43,0x22,0x7b,0xd5,0x02,0x32,0x40,0x56,0xac,0x1e,0x03,0x4e,0x2e,0x9d, -0x6a,0xe6,0x57,0x04,0xf5,0xe4,0x01,0xa7,0xeb,0x61,0x26,0x18,0x77,0xaf,0xd2,0x9e,0xa8,0x3f,0xb4,0xad, -0x9b,0x1e,0x92,0x61,0x8c,0x6c,0x43,0x1d,0x7b,0x09,0xb0,0x84,0x7b,0xe8,0x88,0x20,0xbc,0xdb,0xf3,0x59, -0x97,0x1e,0x5f,0xe9,0x66,0xc9,0x39,0x2c,0x95,0x30,0x91,0xf3,0xa3,0xe2,0xea,0xa2,0x50,0xc6,0x9b,0x57, -0xf7,0xb6,0x62,0x54,0x90,0xd3,0x75,0x72,0xb8,0xde,0x2d,0xb3,0x5f,0x30,0x60,0x0c,0xbf,0xc1,0xb5,0x0b, -0xa1,0x65,0x0f,0xf3,0xaf,0x18,0x92,0xe6,0x1f,0x6b,0xdf,0xcb,0xf8,0x8a,0xe2,0x87,0x34,0x62,0x92,0xed, -0x0c,0x57,0x69,0xab,0x08,0x27,0x63,0x42,0x67,0x85,0x16,0x82,0xf7,0xeb,0x5f,0x3f,0xee,0x7f,0x00,0x96, -0x50,0xc4,0xd8,0x22,0x35,0x14,0x19,0xf5,0x31,0xf9,0xf6,0x8d,0x67,0x65,0x22,0x95,0x59,0x30,0xda,0xb5, -0x1d,0x4f,0xbd,0xc0,0x08,0x0a,0x61,0x81,0x33,0x16,0x17,0x42,0xd9,0xd5,0xcd,0x9d,0xe8,0x8e,0x00,0xb7, -0x94,0x95,0x8d,0x22,0x8f,0xaa,0x35,0x1b,0x16,0xdf,0xbe,0xd5,0x5b,0xf1,0x99,0x0a,0xa4,0xa1,0x5f,0xbb, -0x01,0x27,0xc7,0x85,0x08,0x36,0x3c,0x0f,0xf1,0xb7,0x20,0x3f,0x46,0x08,0xc5,0x0e,0x61,0x88,0x8c,0x44, -0x1e,0xa4,0x79,0x38,0xc7,0x23,0x6f,0x65,0x6d,0x1e,0x05,0xc4,0x8c,0x4e,0x36,0x36,0xb2,0x6a,0x94,0x55, -0xfd,0x32,0xf7,0x37,0xb7,0x32,0xe5,0x7a,0xb4,0x9a,0xa7,0xf7,0xae,0x99,0xa9,0x86,0x00,0x42,0xc6,0x5a, -0x40,0xff,0x0d,0xbc,0xf5,0x0c,0xb2,0x68,0x1b,0xb2,0x8e,0x70,0x43,0xd9,0xaa,0x1d,0x3d,0x15,0xe3,0x09, -0xc5,0xac,0x2a,0xdc,0xf2,0xde,0xc6,0xe5,0x2c,0x9b,0x08,0xe3,0xe9,0x35,0xd4,0x1e,0x40,0xcb,0x80,0xa2, -0xed,0x55,0xee,0xea,0xe3,0x2f,0x49,0x51,0xa2,0x43,0x51,0xf1,0x92,0x69,0xaf,0x2f,0x8f,0x42,0x63,0xe6, -0x37,0x43,0x69,0xcc,0xe9,0x58,0x83,0xc3,0x52,0xe3,0x4a,0xd0,0x55,0x73,0x44,0xd1,0x66,0xbf,0x78,0x01, -0xb2,0x42,0x49,0x7c,0x85,0xdb,0xe0,0x3c,0xb9,0x24,0x8e,0x03,0x1f,0xbf,0xe9,0x2d,0x1f,0x3f,0xa4,0x17, -0x67,0xfc,0x8d,0x01,0xd1,0x59,0xe6,0x2c,0xbf,0x5e,0x72,0x55,0xf0,0x85,0x4a,0x5b,0x71,0x7e,0x19,0x7f, -0xc4,0x96,0x29,0xb0,0x4e,0x00,0x1c,0xb2,0xd8,0x84,0x70,0xff,0x43,0x03,0xcc,0x81,0xb7,0xc8,0x16,0xe8, -0x0b,0x01,0xaf,0xd7,0xcf,0x75,0xe6,0xe8,0x1f,0x4b,0x68,0xa7,0xfc,0x3a,0xe8,0x07,0xd2,0x8d,0x02,0x55, -0x91,0x8b,0x28,0xd5,0x83,0xed,0xe0,0x22,0x1b,0x27,0xcc,0x11,0xf1,0x2f,0x8e,0x91,0x8b,0xa1,0xc2,0xd0, -0xf8,0xec,0x2f,0xf1,0x57,0x72,0x9b,0x8c,0xfd,0x40,0x3d,0xe3,0xf7,0x4c,0x6e,0x04,0x2f,0xd2,0x68,0x41, -0x9e,0xf4,0xe1,0xef,0x51,0x36,0x8f,0x73,0x5c,0x29,0x83,0x6e,0xef,0x09,0xdc,0x57,0xbb,0xcf,0x7e,0x79, -0x75,0x7a,0xf0,0xe2,0xe7,0xbd,0xa3,0x37,0x7f,0x7b,0x71,0xfa,0x61,0xef,0xd5,0x8b,0xd3,0xf7,0x07,0x6f, -0x5e,0xbd,0x79,0x87,0x4a,0x6d,0x65,0x57,0xfc,0xe6,0x6b,0x49,0x2f,0xa0,0x68,0xdb,0x58,0x8a,0xac,0x12, -0x8f,0xb2,0xc3,0x32,0xd7,0x85,0xfa,0xa5,0xdc,0xdf,0x3c,0x6f,0xc8,0xea,0x19,0xa8,0xbb,0x86,0x61,0xab, -0xc8,0x05,0xc9,0x00,0x32,0xbe,0xf3,0x86,0xf4,0x8d,0xa4,0x1f,0xf0,0x26,0xa2,0xc5,0x3a,0xd9,0x7e,0xf2, -0x64,0x33,0xee,0xe6,0xb8,0x81,0xa9,0x50,0x25,0xfe,0xb0,0x1f,0xaa,0xc3,0x14,0x6f,0x63,0x18,0xcd,0xad, -0x9d,0xb0,0x86,0x6e,0x51,0x2f,0x3d,0xad,0x97,0xd6,0x42,0xf9,0x16,0x54,0xba,0xf0,0x85,0x4b,0xe0,0x5a, -0xe9,0x71,0xbd,0x74,0x54,0x95,0x8e,0xa8,0x34,0xba,0x9f,0x69,0x87,0x09,0x4c,0xd2,0x68,0x38,0xce,0xe3, -0xe8,0xf3,0x50,0x76,0x31,0xb2,0xfb,0x18,0xfd,0x07,0x77,0x52,0x9c,0x07,0xb5,0xd2,0x51,0xbd,0x74,0x56, -0x95,0xce,0xa8,0x74,0x56,0x91,0xa8,0x9d,0xe9,0x44,0x42,0x23,0x5d,0xa4,0x11,0xfc,0x6d,0x79,0x6d,0x07, -0x55,0xc8,0x7f,0x87,0xa3,0xbf,0xee,0xf4,0x31,0xa4,0xfb,0x9e,0xd5,0xc0,0x0f,0x5a,0x0b,0xec,0x00,0x24, -0x6f,0x7b,0x3f,0x04,0xf2,0x63,0xaa,0x7f,0x8c,0xe1,0xa3,0x56,0x41,0x24,0x2b,0x88,0x7e,0x2f,0x1c,0x03, -0x32,0x1e,0x77,0xe0,0x1a,0xfd,0xa0,0xb7,0x75,0x17,0x6c,0xd5,0x47,0x54,0x43,0x1d,0xcd,0x93,0xb1,0x36, -0xf8,0x0b,0x95,0x09,0x6f,0x29,0xa2,0xf1,0x42,0xfc,0xbd,0xb4,0x91,0x00,0xe0,0x1f,0xb4,0x52,0x5c,0xf7, -0x4c,0x6f,0xa8,0xd0,0x3f,0x2e,0x5d,0xad,0x46,0xb2,0x82,0x68,0x55,0xbb,0x6e,0x22,0x60,0xa9,0x1f,0xf4, -0xf2,0x77,0xc1,0x60,0x25,0x11,0xc6,0xa2,0x36,0x1c,0xff,0x3b,0x11,0x60,0xfc,0x83,0x56,0xe2,0x21,0x04, -0x18,0x4b,0x02,0xd0,0x28,0xde,0xab,0xf3,0x63,0xd5,0xf9,0xf1,0x03,0x3b,0x2f,0x95,0x55,0x72,0xdc,0x98, -0x81,0x2f,0x3c,0xca,0xe8,0xdc,0xab,0xeb,0x94,0x63,0xe4,0xfa,0xf0,0x3a,0x1a,0xf4,0x6f,0x28,0x06,0x20, -0xdd,0x43,0xe2,0x2e,0x05,0xee,0x6d,0x6d,0xfd,0x9f,0xef,0x8e,0x7b,0x9d,0x3f,0x47,0x9d,0xf3,0x93,0xeb, -0x1f,0x6f,0xbe,0xdf,0x4a,0x48,0x5d,0xaa,0x9e,0xf7,0x98,0xf2,0xe8,0x4d,0x39,0x29,0xde,0x45,0xef,0x5a, -0x49,0x37,0x0f,0xfb,0x3f,0x6d,0x6a,0xfe,0xad,0x39,0x04,0x68,0xab,0x0f,0xf7,0x9d,0x00,0xf6,0x87,0x2d, -0x0c,0x12,0x56,0x39,0x43,0xd7,0x0a,0x4e,0xdd,0x05,0xb7,0x6f,0x2d,0x38,0x76,0x17,0xfc,0xb1,0xb1,0xe0, -0x13,0x74,0x50,0x20,0xb7,0x28,0x59,0x4b,0xe4,0xae,0xe5,0xb1,0xb3,0x16,0xc5,0x23,0xd9,0x64,0xab,0x51, -0xad,0x11,0xe0,0xee,0xa4,0xeb,0x3d,0x94,0x74,0xb7,0xd3,0xbc,0x81,0x74,0xcd,0x34,0x7f,0x7c,0x0f,0xd2, -0xb9,0x07,0xa0,0x91,0x74,0xd5,0xac,0x7a,0xda,0x40,0xbb,0x0a,0xe2,0x4f,0x2e,0xe2,0xb9,0x08,0xb0,0x7d, -0x2b,0xe5,0x5c,0x78,0xdf,0x56,0x6a,0xec,0x28,0xf5,0xa4,0xb1,0xd4,0x9f,0xdd,0x34,0xab,0x57,0xf1,0x93, -0xb3,0x8a,0xdb,0xe7,0x5a,0x13,0xbd,0xee,0x4b,0xae,0xde,0x83,0xc8,0xb5,0xfd,0x20,0x72,0x3d,0x6e,0x2c, -0xf5,0xa7,0xbb,0x92,0xeb,0xe9,0xfd,0xc8,0x85,0x87,0xea,0xa7,0x02,0x23,0xc2,0x16,0x9b,0x2d,0x24,0xcd, -0xa7,0xee,0x49,0xfb,0x87,0x6f,0xc7,0xbd,0xfe,0xc9,0xe8,0x53,0x77,0x84,0x29,0x27,0x9b,0x3e,0x64,0x06, -0xff,0x7a,0x80,0x4f,0xbe,0x7b,0xc4,0x00,0xc7,0x3f,0x08,0x45,0xc6,0x80,0xa6,0x44,0x1e,0x5a,0x68,0x44, -0x90,0x43,0xfe,0xf5,0xab,0xf0,0xcd,0x9a,0xae,0x6c,0xcb,0xf3,0xdb,0xfd,0x40,0x4b,0x08,0xf0,0x9d,0xd7, -0xfb,0x01,0xef,0x9f,0x52,0xe8,0xa0,0x6c,0xfb,0xfb,0xce,0x59,0xf7,0x72,0x9e,0x45,0x00,0xe4,0xa3,0x9b, -0x13,0xc7,0xc8,0x39,0xe6,0x68,0xe9,0x98,0x28,0x8d,0x18,0x06,0x75,0x0c,0x03,0x3b,0xfb,0xce,0x28,0x4f, -0xef,0x85,0xf2,0xf4,0x36,0x94,0xf3,0x51,0x23,0xd2,0x75,0x1c,0xa9,0x17,0x18,0xad,0xf7,0x8d,0x4e,0xeb, -0x81,0x59,0x83,0x9d,0x5f,0x2f,0xe4,0xdf,0x7d,0x80,0xc6,0xf7,0xea,0xed,0x78,0x75,0x6f,0x73,0xdf,0x31, -0x4a,0xbf,0x2b,0xba,0xd1,0xbd,0xd0,0xb5,0xa0,0x2d,0xc8,0x6b,0xb1,0x67,0x84,0xda,0x7a,0x44,0x1e,0xf4, -0xdf,0x6b,0xcf,0xd8,0xd8,0x70,0xe0,0xf8,0x87,0xee,0x19,0x2e,0x0c,0xfe,0xdd,0x76,0x56,0x27,0x8e,0x7f, -0xec,0xce,0x6a,0x2c,0x84,0x3f,0x6e,0x87,0x9d,0xdd,0x6b,0x45,0xd8,0xd0,0x70,0x59,0xfb,0xff,0xb1,0xc7, -0x16,0xf7,0x42,0xba,0x68,0x5a,0xc6,0xff,0x11,0x3b,0xec,0xe5,0xbd,0xfa,0x7a,0xb9,0xaa,0xaf,0xff,0x39, -0xfb,0xab,0x7c,0x69,0xc6,0x3b,0x29,0xec,0x57,0x47,0xd9,0xc1,0x74,0x6c,0x88,0x0a,0x83,0x5c,0x3d,0x22, -0xec,0x84,0xfd,0xad,0xa7,0x70,0xdd,0xdc,0x0d,0x9f,0x6c,0x3d,0x1d,0xf5,0x07,0xf1,0x4e,0x7f,0xeb,0xc7, -0x51,0xbf,0xf3,0x74,0xb3,0x15,0x77,0x20,0x0b,0x46,0x67,0xf7,0x31,0xe4,0xd0,0xf7,0x63,0xfc,0x46,0xf7, -0xa3,0x00,0x0e,0x79,0x1b,0x1b,0x50,0xbc,0xfb,0x44,0x94,0x42,0x98,0x18,0x7e,0x21,0xb4,0x28,0xdf,0x7d, -0x82,0xe0,0x11,0x82,0x77,0x9f,0x10,0xb4,0x68,0x64,0x77,0x9b,0x4b,0x43,0x61,0x02,0xdc,0xe6,0x86,0x9e, -0x54,0x45,0x9f,0x70,0x53,0x59,0xd8,0x4a,0xda,0xad,0x7e,0x27,0xf1,0x37,0xe1,0xff,0xd0,0xcb,0xcd,0x3c, -0x48,0xc3,0x56,0xd1,0x66,0x35,0x44,0x95,0x36,0x0f,0x5b,0x11,0xa6,0x45,0x55,0x9a,0x78,0x42,0xb9,0xce, -0x07,0x59,0x30,0x1d,0xa4,0xc1,0x78,0x30,0xbf,0x41,0x8a,0x00,0xd7,0x77,0x94,0xbd,0x2e,0x2e,0xdd,0x14, -0xa1,0xf7,0x51,0x21,0x78,0xbb,0x88,0xbe,0x88,0x3c,0x68,0x93,0x53,0x12,0x09,0x0d,0x2d,0x66,0x9d,0x54, -0x85,0x8f,0x0a,0x7b,0xeb,0x61,0x36,0x9a,0x6f,0x65,0x80,0x73,0x82,0xee,0x37,0xe6,0xa3,0xde,0x20,0x0e, -0x21,0xad,0xf5,0xb4,0xdd,0x2a,0x3b,0xb9,0xbf,0x35,0xf7,0x7f,0x78,0x3a,0x28,0x31,0x69,0xbb,0xdd,0xca, -0x3b,0x31,0xa4,0x0c,0x72,0xfc,0x7c,0xdc,0x86,0xfe,0x96,0xf8,0x09,0x65,0xb7,0xc2,0xa7,0x40,0xb0,0x2c, -0xb8,0x9e,0x0d,0x00,0x97,0x41,0x11,0x5c,0x0e,0x22,0x42,0xdb,0xf9,0xa6,0x95,0xa3,0x2e,0xb7,0x30,0x45, -0x59,0x2c,0x61,0x35,0x4a,0x9d,0x26,0x94,0x41,0x40,0x15,0x30,0x56,0xf0,0xef,0x72,0xd0,0x0f,0x72,0xf8, -0x37,0x85,0x7f,0x63,0xf8,0x87,0x52,0x08,0x06,0x2c,0xf4,0x28,0xe4,0x5c,0x07,0xfb,0x0c,0x91,0x4a,0x10, -0x2c,0xc8,0x86,0x49,0x2f,0x9e,0x30,0xd7,0x7b,0xc1,0x35,0x62,0x23,0xe5,0xf9,0xbe,0xaa,0x47,0xc8,0xbc, -0xd1,0x46,0x89,0x4f,0x03,0xbd,0x02,0xe1,0x92,0x03,0x9f,0x98,0x5c,0xc9,0xa1,0x77,0x75,0xb9,0xf0,0xda, -0x66,0x1e,0x3f,0x14,0x98,0x61,0xc9,0xc3,0xde,0x08,0xfe,0x0e,0x3c,0xa5,0xeb,0x88,0x3a,0x50,0xa8,0xae, -0x68,0xd0,0xa7,0x7b,0x95,0x4c,0xa6,0x71,0xc9,0x7a,0x96,0x66,0x0e,0x06,0x97,0x9b,0x47,0x5f,0x5d,0x59, -0x58,0x95,0xa5,0xb9,0xdf,0x5f,0x0f,0xeb,0x30,0x68,0x56,0xf5,0x06,0xfe,0x02,0xe1,0x1b,0xf3,0xd0,0x7f, -0x28,0x4b,0xe3,0xe3,0xd6,0x23,0xcd,0xf0,0x80,0x5f,0xcc,0x3a,0x02,0x0b,0x6f,0xad,0xa0,0x57,0x7a,0xe9, -0x5b,0x6b,0xb0,0x86,0x3e,0x2a,0x86,0x9e,0xb0,0x41,0x78,0xe4,0x0f,0x73,0xc3,0x8a,0xbb,0xcb,0xcf,0xa8, -0xaa,0x17,0xa7,0x94,0xe1,0x37,0x74,0x31,0xc7,0x08,0x81,0x18,0xc8,0x32,0x6e,0x79,0xe3,0x6c,0xa2,0x05, -0x4a,0xc8,0x2b,0xaf,0x61,0x7a,0x41,0x00,0xa7,0xf7,0x13,0x74,0x52,0xf0,0x4b,0x3e,0x6f,0x6d,0xc3,0xf6, -0x33,0x44,0x63,0xa9,0x38,0x9a,0x54,0x85,0x1f,0xed,0x10,0xd2,0x6b,0xe4,0x64,0xc7,0x43,0xef,0xba,0x5b, -0xf8,0xbe,0xb0,0xdb,0xe5,0xae,0x5d,0x51,0x15,0x6b,0xd7,0x68,0x5f,0x3c,0x25,0x49,0xec,0x60,0x6d,0x09, -0x95,0x3d,0x6a,0x27,0x6d,0xcf,0x87,0x0e,0x76,0xf2,0x78,0x11,0x47,0xe5,0xda,0x19,0x3d,0x1a,0x8b,0x3f, -0xc3,0x9b,0x9d,0x2d,0xaa,0x16,0x2d,0x92,0xb0,0xc9,0xf2,0x62,0x2e,0x0c,0x42,0x85,0x26,0x5c,0xfd,0xe1, -0x49,0xa3,0x07,0x82,0x9f,0x0a,0x40,0xbb,0xbc,0xd4,0xa0,0x7b,0x70,0x05,0x4a,0x69,0xef,0x8e,0x35,0x20, -0xa8,0x13,0x89,0x07,0xd4,0xc1,0xa6,0xa8,0x5c,0x07,0xeb,0x0d,0xac,0xac,0x80,0xc1,0x4f,0x19,0xd2,0xb7, -0xb7,0x8d,0x2e,0xfb,0xc7,0xfb,0xc8,0x8b,0xa3,0xf6,0x2e,0x1e,0x9b,0x26,0x32,0x72,0x38,0x09,0xfa,0xd1, -0xae,0x2b,0x0b,0x31,0x69,0xce,0x79,0xcf,0xf3,0x50,0x5a,0xd4,0x90,0x6d,0x95,0x0b,0x6e,0x7f,0x99,0x17, -0x59,0x8e,0x60,0x64,0x61,0x25,0xa0,0xeb,0x95,0xbe,0x5e,0xc6,0x6b,0xfc,0x93,0x77,0x8d,0x0e,0x5a,0xba, -0x2d,0x62,0x2c,0x79,0x16,0xa5,0x97,0x51,0x51,0x87,0x3f,0x24,0x40,0xa3,0xd4,0xa3,0x35,0x52,0xa8,0x0b, -0x1f,0xf5,0x1f,0xad,0xb1,0x13,0xbd,0xf0,0xd1,0x93,0xde,0xa3,0x35,0xf6,0x00,0xfb,0x08,0x0a,0x21,0x26, -0x5c,0xa1,0x13,0x67,0x80,0x60,0x8c,0x65,0xb5,0x67,0x77,0xc4,0xff,0x10,0x26,0xfd,0x7d,0xf0,0x07,0xf8, -0xfb,0xe3,0x0f,0x85,0xc4,0xc3,0xe6,0x2d,0xdd,0x00,0xc0,0x87,0x75,0x03,0xce,0x8b,0x7b,0x75,0x03,0xe0, -0xef,0xdf,0x0d,0x3a,0x94,0x6e,0xe9,0x01,0xc0,0x3c,0xac,0x07,0x07,0xf1,0xe4,0x5e,0x3d,0x00,0xf8,0xfb, -0xf7,0x00,0x0a,0xdd,0x82,0x3f,0x40,0x3c,0x0c,0xff,0x57,0x39,0x46,0xbe,0xbe,0x4f,0x0f,0xa8,0xc4,0xfd, -0xfb,0x40,0xc5,0x6e,0xe9,0x05,0xc1,0x3c,0xac,0x1f,0xcf,0xe6,0xf7,0x5c,0xd1,0x58,0xe0,0xfe,0xbd,0x78, -0x76,0xfb,0x54,0x42,0x90,0x87,0xf5,0x61,0x6f,0xbe,0x98,0x45,0xf7,0xea,0x04,0x95,0xb8,0x7f,0x2f,0xa8, -0xd8,0x2d,0xdd,0x20,0x98,0x87,0xf5,0xe3,0x03,0x2b,0x62,0x34,0x21,0x2d,0xb2,0x9f,0x65,0x5f,0x5c,0x68, -0xf6,0xab,0xed,0x87,0x2c,0x12,0x61,0x7d,0xd1,0xb1,0xa3,0xa3,0xcb,0x0d,0x0b,0xdb,0xca,0xca,0x35,0xb3, -0x70,0x3a,0xae,0x9f,0x07,0xc1,0x5a,0xd7,0x45,0xcf,0x2a,0x99,0xfb,0x64,0x81,0x79,0x2b,0xcc,0x22,0xd9, -0x1a,0xac,0x73,0x91,0xfd,0xb3,0x83,0xda,0x25,0x1d,0xe9,0xfe,0x81,0x5d,0x82,0xc9,0x6c,0xb6,0xd9,0x5f, -0x01,0x71,0x7b,0x59,0x3a,0xe6,0x3b,0xa8,0xaf,0x86,0xfe,0xbe,0x25,0x4c,0x20,0xb8,0xb8,0x2c,0x45,0x6e, -0x09,0x3d,0xef,0x38,0x0e,0xf1,0x9a,0xad,0x02,0xf9,0x0c,0xc9,0x2b,0x0e,0x04,0x4d,0x12,0x1c,0xe5,0x4c, -0xda,0x19,0xcc,0x00,0x26,0x9c,0xaa,0xb2,0xb2,0xb2,0xca,0xaa,0xe1,0xf7,0xa8,0xed,0xee,0xa8,0xf1,0xbc, -0xac,0x55,0xc9,0xc9,0xbf,0x09,0xcd,0x7b,0xd6,0x7c,0x17,0x94,0x65,0xa0,0x8b,0xaa,0x4a,0x4e,0x79,0x20, -0x9e,0x77,0xaf,0xee,0x4e,0xc8,0x9d,0xd5,0x3a,0xcc,0xd5,0xfd,0x26,0x5a,0xde,0xab,0x56,0xbe,0x59,0xd8, -0xfc,0xa5,0x75,0x81,0x70,0x38,0x56,0x8b,0xb7,0xb6,0x83,0x3c,0x2c,0xe1,0x8a,0xac,0x5c,0xef,0x33,0x53, -0x2a,0x22,0x99,0x63,0xa8,0x3d,0xdc,0x2f,0x50,0x7f,0xb1,0xcb,0x1b,0x4d,0x1c,0x24,0xc2,0xdb,0x71,0x18, -0xab,0x30,0x59,0xa8,0x99,0x49,0x61,0x6a,0x52,0x0e,0xef,0xb1,0x8d,0x7e,0x08,0x45,0x3c,0x3c,0x0a,0x84, -0x27,0x01,0xd1,0x25,0x58,0x06,0x69,0x99,0x0c,0x81,0x22,0x2e,0xf2,0xc5,0x3f,0xf2,0xb2,0x45,0xbf,0x16, -0xd9,0x55,0x0b,0x2e,0x25,0xe8,0xe1,0x56,0x7d,0x47,0xf4,0xcd,0xb1,0xc4,0x5b,0xe9,0x6e,0xd9,0xde,0xf6, -0xa5,0x6e,0x5f,0x0b,0x81,0x43,0xb8,0x87,0x46,0x3b,0xf9,0xe8,0xcf,0xbd,0xc1,0xf6,0x4f,0xbd,0x01,0xdb, -0x1c,0x94,0x51,0xda,0x82,0x7b,0x7d,0xe4,0x6f,0x21,0x88,0xef,0x6f,0x51,0xf2,0x87,0x37,0x9b,0xfd,0x3f, -0xf5,0xfc,0x76,0x2b,0x03,0x78,0xf8,0x35,0x80,0xdf,0x28,0xf7,0xfb,0x01,0xbd,0xd1,0x4f,0xc2,0x74,0xab, -0x0c,0x66,0x61,0x4b,0x59,0x2d,0xcc,0x29,0xb3,0x2d,0x00,0x76,0xfa,0xdb,0xbd,0x51,0x7f,0x30,0xdf,0xdd, -0x7e,0xdc,0x1b,0xb5,0xe0,0xa3,0x53,0x01,0x76,0x48,0x7a,0xb8,0xf5,0xb4,0x37,0x98,0x13,0x18,0x65,0xcf, -0x29,0xa1,0x17,0x2c,0x43,0x0d,0x10,0x32,0xfc,0x9d,0xa7,0x58,0x91,0x9d,0xa8,0xca,0x59,0x19,0xa2,0x96, -0x33,0xbd,0x16,0x40,0xa1,0x5e,0x0b,0x25,0xba,0x6a,0xc1,0x0c,0x51,0xcb,0xc2,0xd6,0x62,0x6a,0xcd,0x50, -0x52,0x33,0x23,0x49,0xcd,0xc4,0x87,0x9b,0xfc,0x7e,0x0d,0x62,0x89,0x10,0xcb,0x0a,0xe2,0xbc,0x06,0x71, -0x86,0x10,0x67,0x0a,0x62,0x48,0x9a,0xe4,0x73,0xd6,0x7a,0x17,0xea,0x47,0x0b,0x52,0xfc,0xd8,0xa7,0xff, -0x9f,0xa3,0xf2,0x47,0xc0,0x40,0x07,0xe8,0x6f,0x2f,0x0b,0xa2,0x00,0x5f,0xec,0x6f,0x94,0xb4,0xac,0x5b, -0x66,0x34,0x71,0xc9,0xa7,0x8f,0x35,0xb3,0x6d,0xfb,0xf7,0xc2,0x25,0x40,0xd0,0x2d,0xb3,0x50,0x18,0xb3, -0x12,0xa4,0x59,0x44,0xa1,0x79,0x3d,0x21,0x31,0xce,0x4a,0x10,0x14,0x35,0x12,0xb3,0xbc,0x1a,0xac,0x92, -0xcf,0x68,0xb2,0x23,0xf1,0x1c,0x69,0xc9,0x76,0x72,0x53,0xf4,0xd3,0xd5,0xf4,0x19,0xd5,0xaa,0x4a,0xd0, -0xc9,0x8c,0x26,0x04,0xd2,0xa4,0x47,0xb3,0xa8,0xd8,0x83,0x73,0x38,0x19,0x2f,0xcb,0x58,0x44,0x37,0xb9, -0x3a,0x5b,0x74,0x50,0x9f,0x6e,0x63,0x43,0x69,0x06,0xe7,0xc7,0xc9,0xc9,0xc6,0x46,0x0b,0xff,0x84,0x5a, -0x61,0xa0,0x48,0x53,0xe1,0x40,0xfa,0x18,0xc5,0x32,0x23,0x2a,0xb8,0xde,0xc3,0xd8,0xf0,0xf3,0x42,0xa6, -0xca,0x0a,0xd7,0xfb,0x7e,0x15,0x50,0x8f,0x50,0x25,0xd1,0xad,0x52,0x92,0xd5,0xbb,0x07,0xf0,0xd2,0x1f, -0x7a,0xd2,0xa8,0xc3,0x9d,0x28,0x1d,0xee,0x61,0x83,0xd5,0xae,0x50,0x25,0x2e,0x4e,0x46,0xc6,0x17,0xe1, -0x23,0x2c,0x8a,0xab,0x06,0x09,0x59,0x39,0xed,0xd8,0xbc,0xa0,0x79,0x22,0xd5,0x64,0x52,0x75,0xa1,0x53, -0xcb,0x0f,0x50,0x50,0xc5,0xf6,0x67,0x52,0x34,0xa5,0x7d,0xe9,0xc2,0xa8,0x8a,0xd8,0xa4,0xe7,0x8d,0xe1, -0x6b,0xbd,0xf1,0x3c,0x3b,0xfb,0xec,0x59,0x02,0x3b,0x56,0x99,0x15,0x46,0x72,0x62,0xb2,0x36,0x4b,0x13, -0xc8,0xd9,0x54,0xac,0x03,0x63,0x58,0x6e,0xb7,0x92,0x38,0x29,0x90,0x07,0x18,0xd8,0x1a,0xf8,0xa9,0x72, -0xef,0xbc,0x14,0xea,0xe5,0x12,0x2d,0x2f,0x49,0xe7,0x49,0x4a,0x83,0x6a,0x7a,0x9e,0xf7,0x47,0x49,0xdd, -0x15,0x3d,0x82,0x76,0xb8,0x07,0xfe,0xc0,0xce,0xb7,0x2b,0xa8,0x62,0x85,0x1b,0x2d,0xe6,0x32,0x82,0x84, -0x9c,0x22,0xb9,0x1d,0xdd,0x16,0x9b,0xb6,0x03,0xde,0xd6,0x81,0x10,0x01,0x1b,0x4a,0x9a,0x93,0x09,0xbb, -0x53,0x45,0x2e,0x91,0x38,0xc9,0xa3,0x2b,0xbe,0x0c,0x14,0x2d,0x65,0x7a,0xc6,0x0e,0x12,0x65,0x32,0x22, -0x8d,0xa7,0xf8,0x39,0x9c,0x98,0xc5,0x2d,0xe2,0x1f,0xac,0xfc,0x94,0x00,0x4f,0x89,0x26,0xb2,0xec,0x78, -0xbe,0xcc,0xef,0x52,0x14,0xe1,0x44,0x49,0x7f,0x20,0xde,0x67,0x5d,0xa2,0x55,0x94,0xe3,0xba,0x24,0xae, -0xb7,0xcf,0x10,0x47,0x29,0x44,0x52,0x0c,0x40,0x4d,0x54,0x99,0xc8,0x1e,0xac,0x62,0x8c,0x6a,0xdd,0x50, -0xc0,0xa7,0xa4,0xf1,0x2d,0x85,0xc5,0x4e,0x24,0x39,0x51,0x70,0x4a,0xb7,0xd3,0x98,0xa6,0x8c,0x20,0x31, -0x57,0x2e,0x8a,0xde,0x4a,0x62,0x2e,0x49,0x14,0x96,0x58,0x71,0xc9,0xcf,0xf1,0xd7,0x5b,0xe4,0x9b,0x5c, -0x94,0xe0,0xd4,0x6d,0x82,0xac,0xc4,0xee,0x50,0x8a,0x01,0x61,0x59,0xd9,0x96,0x18,0xc6,0x72,0xa7,0xa3, -0x46,0xac,0x76,0x19,0xd9,0xa6,0x55,0x87,0xb0,0xce,0x06,0x3e,0xa0,0x84,0x9d,0xd7,0xa0,0x66,0x17,0x53, -0x87,0x95,0xf2,0x7f,0xf3,0xdd,0xe1,0xce,0x4d,0x98,0x59,0xca,0x52,0x60,0x24,0xbd,0x05,0xec,0xd1,0xe2, -0x83,0x59,0x37,0xc9,0xd2,0x39,0xcc,0xa2,0x81,0x5c,0xa3,0x2a,0x09,0xa3,0x09,0xd5,0xe4,0xa2,0x9a,0xa7, -0x83,0x18,0xfa,0x90,0x7d,0xb5,0x85,0xa3,0xa5,0xbd,0xb7,0x59,0x5b,0xe9,0xca,0x3d,0x94,0xd6,0xca,0x38, -0x86,0x03,0xc9,0xdc,0x7e,0x4b,0x15,0x13,0x1d,0xa3,0x12,0x89,0x50,0x35,0x39,0x9a,0x0b,0x37,0xce,0x43, -0x95,0xef,0x9e,0x6c,0x2a,0xbb,0x61,0x46,0xa9,0xfc,0xa6,0xc9,0x83,0x00,0xee,0x4d,0x1b,0xb7,0x02,0x1f, -0xa3,0x75,0xc7,0x65,0x7c,0xcb,0x99,0x65,0xec,0x74,0x77,0xa0,0xa4,0x4e,0x32,0xd8,0x23,0xd6,0xfb,0x43, -0x19,0x10,0x8e,0x64,0x10,0xb0,0xcb,0x1b,0xa2,0x68,0x8c,0xa6,0x21,0xa9,0x9d,0x2b,0x12,0x97,0x95,0x19, -0xb3,0x00,0x17,0x67,0x42,0xa0,0xe5,0xd0,0x71,0x20,0xdc,0x47,0x08,0x27,0x8f,0x49,0x9a,0xc6,0x39,0x19, -0x73,0xec,0x40,0x6d,0x9a,0x6d,0xc7,0xc6,0x86,0x68,0x65,0x5d,0x6b,0x45,0x42,0x90,0x91,0x00,0xb0,0x4b, -0xf5,0x56,0x39,0x9f,0x9e,0xa7,0x1e,0x22,0xdb,0x90,0x82,0x16,0x15,0xd4,0x48,0x6b,0x00,0x12,0x26,0x31, -0x3a,0x38,0x57,0x97,0x20,0x62,0x6d,0xe4,0x1b,0x1a,0xd3,0x37,0xe2,0x33,0x5d,0x1a,0x80,0x38,0xde,0xda, -0xc8,0xc2,0x8a,0xf4,0x9f,0xaf,0xbc,0x41,0x14,0x3a,0xd1,0x84,0x46,0x74,0x3d,0x69,0x17,0xdc,0xeb,0x65, -0x6c,0x42,0x15,0x2e,0xa8,0xc3,0xa8,0x34,0xa1,0x2e,0x5d,0x50,0x7f,0x8b,0xac,0x16,0x73,0x17,0xd4,0x01, -0x5a,0xed,0xeb,0x50,0x53,0x17,0x14,0xc9,0x23,0x4d,0xb8,0xb1,0x0b,0x0e,0x45,0x7e,0x26,0x58,0xe4,0x02, -0x23,0x91,0x9a,0x09,0xb7,0x70,0xc1,0xa9,0x71,0xbb,0x11,0xf6,0xa8,0x68,0xcb,0x61,0xb9,0x10,0x93,0x53, -0x3e,0x12,0xab,0xdd,0x70,0x71,0xa2,0x86,0x97,0x3d,0x6d,0x67,0xe1,0x93,0xde,0x66,0xde,0x15,0x86,0x49, -0x43,0xab,0x39,0x4b,0xe4,0xc5,0xd7,0x63,0x8c,0xc4,0x2e,0x3c,0xe7,0xff,0xd6,0xb9,0x97,0x66,0x70,0xa7, -0xee,0xaa,0x09,0x87,0xd7,0x84,0x6e,0x65,0x7e,0xb5,0xb1,0xb1,0x9e,0xc8,0xeb,0x70,0x6f,0x98,0xea,0x6e, -0x0a,0x3c,0x2f,0x60,0x64,0xe0,0xd7,0x0d,0x46,0x09,0x34,0x4d,0x17,0x75,0xc5,0x03,0x7c,0x85,0x9c,0xb7, -0x75,0x1d,0x06,0xc1,0xbd,0xb1,0x57,0x03,0xe1,0xdf,0x4b,0x79,0x54,0xf7,0x16,0xc0,0x4c,0xe1,0xbb,0x6f, -0xbb,0xb1,0x84,0x70,0xd7,0xe5,0x28,0x02,0x2c,0x04,0xdc,0x28,0x78,0x9d,0xb3,0xe7,0x0f,0x1d,0xe9,0x79, -0x1b,0x21,0x6f,0x44,0xc4,0x95,0xd2,0xec,0xcf,0x0d,0xd3,0x74,0xd2,0xb4,0x50,0x2c,0x5a,0xc1,0x65,0xde, -0x39,0x56,0xf7,0xa3,0xf6,0x84,0x71,0x10,0xa4,0x2c,0x55,0xb4,0x27,0x42,0x34,0x10,0xee,0x27,0x54,0xea, -0x0d,0xc6,0x4c,0x32,0x6c,0x58,0x97,0x80,0xc4,0x15,0x77,0xb6,0x33,0x31,0xfa,0xde,0xd1,0xa8,0x37,0xb9, -0x13,0xbd,0x9b,0x4b,0x34,0xd2,0xbb,0xb2,0x73,0xd5,0x10,0xc1,0x7e,0xcd,0x2c,0x23,0xcc,0x33,0x7d,0xf8, -0x67,0xf7,0x1e,0xfe,0xd9,0x1d,0xd1,0x99,0xdd,0x81,0x9c,0xad,0x65,0x47,0xa1,0xd7,0xe9,0xfb,0x9b,0x67, -0xfe,0x96,0xfc,0x94,0xd3,0xe3,0x6e,0x57,0x36,0x83,0xa7,0xaf,0x8e,0x3f,0x0e,0xfe,0xa6,0x69,0x46,0x88, -0xdd,0x40,0xab,0xd3,0xbc,0xa4,0x89,0x7c,0x0e,0x2d,0x67,0x31,0x56,0xca,0x4c,0xf8,0xb8,0x77,0x42,0xbe, -0x83,0xab,0x84,0xfe,0x09,0x73,0x49,0x78,0x6c,0xb9,0x2d,0x83,0x6b,0x4d,0x26,0xe6,0x11,0x5c,0x48,0x87, -0x2d,0xd0,0xbb,0x20,0x0a,0xfb,0x01,0xed,0x45,0x89,0xdc,0x8b,0x82,0x14,0x92,0x60,0xe1,0x07,0xe8,0x8f, -0x7f,0x86,0x3e,0xf9,0x43,0x94,0x14,0xa1,0x9c,0xa7,0x3f,0x4c,0xba,0x68,0xc6,0xc9,0x86,0xc4,0xdd,0x08, -0xc0,0x2c,0xb1,0x0d,0x5c,0x79,0x60,0xb2,0xd6,0x53,0xa7,0xb8,0x70,0x6a,0xa9,0x63,0x1f,0x2a,0x87,0x6b, -0x2c,0x54,0x0f,0xc7,0x17,0x34,0x50,0x74,0x2f,0x79,0x39,0xee,0x87,0xf6,0xd3,0x41,0xf5,0x42,0xc1,0x4b, -0x68,0x7d,0x1f,0xaf,0xbf,0xf6,0xde,0x4a,0xb3,0xee,0x3c,0xdc,0x17,0x02,0xcc,0x9a,0x0c,0x71,0x78,0x6e, -0x89,0x91,0xd0,0x2c,0x68,0x4e,0x12,0xa4,0x09,0xfd,0x9f,0x8d,0x8b,0x52,0x92,0x26,0x9d,0x77,0xc9,0xf3, -0x3a,0x89,0x93,0x7a,0x41,0x8f,0xc4,0x49,0xc1,0x79,0x25,0x62,0x92,0x69,0x37,0xca,0x31,0x8a,0x62,0x0c, -0x89,0x48,0xeb,0xf5,0xd1,0x9f,0xd6,0xfa,0xa5,0x3d,0x17,0x89,0x8e,0x4d,0x1d,0x1d,0xfb,0xf6,0x4d,0x98, -0x7f,0x5e,0x86,0xd3,0xa6,0xbe,0x05,0x57,0xe1,0xa5,0xb8,0x92,0xfd,0x0c,0x97,0xe6,0x28,0x7f,0x85,0x51, -0xb5,0x50,0xe8,0x8a,0x88,0xf6,0xf0,0xf4,0xb8,0x22,0x76,0x03,0x07,0xfe,0xb0,0xcc,0x16,0x90,0xde,0x44, -0x82,0xbe,0x8f,0xf5,0x99,0xd0,0xfd,0x46,0xe8,0x1e,0x42,0x5f,0x6a,0x94,0xbd,0x82,0x2f,0x93,0x76,0xe8, -0x80,0x41,0x80,0x18,0x69,0x37,0x1c,0x03,0xc8,0xa6,0x8a,0x7a,0x92,0x15,0x34,0xf9,0xb0,0x8a,0x26,0x1f, -0xc3,0x0f,0x8d,0x34,0x19,0x87,0x1f,0x6f,0xa1,0xc9,0xd8,0x45,0x13,0x9c,0xa0,0x7a,0x17,0xb1,0x83,0x63, -0x17,0x39,0x10,0xde,0x04,0xfb,0xa8,0xd1,0x61,0x2c,0xbe,0xea,0x5d,0xfe,0xb5,0xd6,0x65,0xed,0x0d,0x57, -0x74,0xfa,0xd7,0x55,0x9d,0xfe,0x6b,0xf8,0x6b,0x63,0xa7,0x3f,0x87,0x7f,0xbd,0xa5,0xd3,0x9f,0x9d,0x9d, -0xe6,0x91,0xe5,0xae,0x8b,0xde,0x7c,0x76,0x76,0x9a,0x01,0x7b,0x15,0xd8,0x5f,0xb5,0x4e,0x7f,0x16,0x5f, -0xf5,0x4e,0x7f,0xad,0x75,0xba,0x7a,0xf1,0x15,0x7d,0xfe,0xba,0xaa,0xcf,0x17,0xe1,0xd7,0xc6,0x3e,0x1f, -0x86,0x17,0xb7,0xf4,0xf9,0x70,0x45,0x9f,0x79,0x0c,0x51,0xe5,0x1e,0xab,0x5a,0xd1,0x67,0x06,0xa4,0x09, -0x7f,0xa1,0xf5,0xf9,0x50,0x7c,0xd5,0xfb,0xfc,0xae,0xd6,0xe7,0xd7,0x56,0x97,0xdf,0xad,0xea,0xf2,0x9b, -0xf0,0x5d,0x63,0x97,0xbf,0x84,0x6f,0x6e,0xe9,0xf2,0x97,0x5a,0x97,0xbf,0x3b,0xef,0xf5,0xb0,0xa8,0x99, -0xd1,0xed,0x3f,0xe5,0xff,0x7e,0x42,0x88,0x73,0x17,0xc4,0x8f,0xf2,0x3f,0x80,0xe8,0x39,0x21,0x9e,0x50, -0xce,0xb9,0x23,0xe7,0xa9,0x56,0x7b,0xaf,0xe7,0x82,0xf8,0x93,0x56,0xfb,0xb9,0x0b,0xa2,0xaf,0x50,0x7f, -0xa3,0x91,0xfd,0x8b,0xf8,0xaa,0x93,0xfd,0x75,0x8d,0xec,0x4a,0xdd,0x46,0x90,0xfd,0xf5,0x2a,0xb2,0x9f, -0xba,0x1d,0x1d,0x28,0x6d,0xdb,0xd6,0x12,0x76,0xfe,0x85,0x3f,0x3c,0xed,0xe6,0xf6,0xb1,0x76,0x8a,0x47, -0xe0,0x69,0x77,0x5a,0x4f,0x9f,0x62,0xfa,0xb8,0x9e,0x3e,0xe6,0x33,0xef,0x20,0x7c,0xdd,0x38,0xd4,0x6f, -0xc3,0x83,0x5b,0x86,0xfa,0x6d,0xc3,0xec,0x3e,0x45,0x8b,0xe7,0x00,0xff,0x4e,0xc5,0xdf,0x31,0x2f,0xd9, -0xb7,0x0d,0xb3,0xdc,0x42,0x6f,0xe1,0x34,0xbc,0x6e,0x4e,0xc5,0xaa,0x0f,0xb4,0x21,0x7a,0x2b,0xbe,0xea, -0x43,0xf4,0xbe,0x36,0x44,0x4a,0x95,0x48,0x0c,0xd1,0xfb,0x55,0x43,0xb4,0x77,0xfb,0x10,0x9d,0xc1,0x39, -0x36,0xdc,0xab,0x0f,0xd1,0x1e,0x0e,0xd1,0x5e,0x7d,0x88,0xf6,0x70,0x88,0xf6,0xea,0x43,0xb4,0x27,0x87, -0xe8,0x55,0xf8,0xbe,0x71,0x88,0x8e,0xc2,0x57,0xb7,0x0c,0xd1,0x51,0xc3,0x10,0xed,0x89,0x21,0xda,0x13, -0x43,0xb4,0x27,0x87,0xe8,0xa8,0xbe,0x06,0x7a,0xb4,0x06,0x5e,0x69,0x04,0x3e,0x12,0x5f,0x26,0x81,0xef, -0xc4,0xca,0x1a,0x72,0x68,0xeb,0x19,0xe2,0x76,0x4e,0xb6,0x49,0xd4,0x43,0x8c,0x25,0x19,0x0f,0x10,0x9b, -0x5a,0xde,0x83,0x4d,0x6d,0x90,0x55,0xe0,0x5c,0x48,0x1a,0xd9,0xbd,0xc2,0x5d,0x4e,0x68,0x0d,0xe0,0xb3, -0xb1,0x33,0x5f,0xa8,0x2f,0x02,0x80,0xd0,0x06,0x3f,0xcb,0x8a,0xd6,0xf6,0xa6,0x7c,0xd4,0x85,0x89,0xe4, -0xc3,0xff,0x0a,0xa9,0x19,0x5e,0x24,0xa9,0x2b,0x77,0x1e,0x26,0xf2,0x02,0xb4,0xb5,0x0d,0x9c,0x6f,0xa2, -0x2e,0x1f,0x5b,0xdb,0xc3,0x42,0x73,0x53,0x1c,0xcc,0xdb,0xd9,0xa6,0x06,0x4b,0x97,0x0e,0x3f,0x10,0x20, -0x30,0xbc,0x5e,0x30,0xe9,0xa4,0x9b,0x7a,0x79,0x01,0xd2,0xb7,0xa4,0x8e,0x86,0x2f,0x14,0xe9,0xf9,0xa7, -0x19,0x62,0x63,0xa3,0x67,0x8b,0x2d,0x81,0x3b,0x1d,0x09,0x6f,0xdb,0xd9,0x22,0x3a,0x03,0xa6,0x1f,0x8f, -0xb4,0x81,0x9d,0xd4,0xef,0xb4,0xf2,0xee,0xe5,0x4e,0x77,0x7b,0xd4,0xdd,0x1e,0xc0,0x2f,0x21,0xba,0xa8, -0xdd,0x80,0x6b,0x27,0xda,0xac,0x71,0xac,0x96,0xae,0xb2,0x72,0xa4,0x86,0x4b,0x8d,0x18,0x40,0xe1,0xcd, -0x99,0x79,0x93,0xe3,0xe6,0xcf,0x5c,0x42,0x28,0xa3,0xf9,0xb3,0xc6,0xe6,0x17,0xae,0xb2,0xaa,0xf9,0x85, -0xd6,0x7c,0xab,0xdf,0x81,0xe1,0x85,0x6b,0xa2,0x0b,0x85,0x7d,0x97,0x84,0xcb,0x40,0x61,0xd5,0xe5,0xc4, -0x51,0x56,0xa1,0x70,0x6e,0xa3,0x70,0xe9,0x6f,0xee,0xbb,0x50,0x98,0xba,0xc4,0x67,0xb7,0x5e,0x23,0xe4, -0x1d,0xc2,0x51,0x56,0xa1,0x70,0x69,0xa3,0x90,0xfb,0x9b,0x53,0x17,0x0a,0x57,0x6e,0xd9,0x9c,0x81,0xc4, -0x55,0x23,0x12,0x1f,0xdc,0xa5,0x15,0x1a,0x1f,0x6c,0x34,0xa6,0xfe,0xe6,0x95,0x0b,0x8d,0x8f,0x4e,0xd1, -0x9f,0x81,0xc5,0xc7,0x46,0x2c,0xc6,0xce,0xc2,0x0a,0x89,0xb1,0x8d,0xc4,0xd8,0xdf,0xfc,0xe8,0x42,0xe2, -0x57,0xb7,0x60,0xf1,0x56,0x76,0x5e,0xf2,0xf2,0xce,0xd2,0x0a,0x8d,0xbf,0xda,0x68,0x44,0xfe,0xe6,0xaf, -0x36,0x1a,0xf7,0xd9,0xf1,0x5d,0x81,0x0c,0xcc,0x18,0x2b,0xfa,0xbb,0x65,0xc3,0xab,0xe5,0x5d,0x5a,0x7a, -0x43,0x8a,0x12,0xf7,0x3d,0x59,0xec,0xd7,0x17,0xdb,0x78,0x45,0x3c,0x86,0x4f,0xe5,0x23,0x93,0x2f,0x9f, -0x9d,0x34,0x18,0x1b,0xc4,0x7a,0x5b,0x12,0x8e,0xa9,0x50,0xa5,0x80,0x89,0x5b,0xd9,0x33,0x78,0x86,0x0b, -0xa6,0x96,0x26,0x2c,0x61,0xf7,0x35,0xb2,0x2a,0x4a,0xeb,0x5e,0xee,0x76,0x9f,0x8c,0x44,0x1d,0x94,0xe2, -0xe1,0xf3,0x45,0x44,0xcf,0xd5,0x56,0xf2,0x15,0x46,0x36,0x44,0x01,0xf0,0x2d,0x44,0xdb,0x03,0x62,0x5d, -0x92,0x4f,0xce,0x3c,0x9b,0x1b,0xfa,0x1c,0x52,0xb4,0x5a,0x3d,0xa3,0xea,0x67,0x6b,0xa4,0x97,0xf3,0x58, -0xbd,0xa9,0xb7,0xae,0x3c,0x1f,0xc9,0xd3,0xb2,0x65,0x3d,0x53,0x69,0x64,0xa1,0xc3,0xd2,0x38,0xc3,0xa5, -0x46,0x47,0xce,0x7e,0x49,0xf1,0x89,0xc4,0x74,0x60,0xca,0xe6,0x17,0x95,0x8f,0x3d,0xa2,0x28,0xc1,0x86, -0x0d,0xa0,0x95,0x93,0x53,0x06,0xfc,0xfb,0x6d,0x80,0x7f,0xa7,0x07,0x64,0xb5,0x76,0x4c,0xe6,0x80,0x7b, -0x95,0x41,0x2f,0x57,0xf1,0x00,0x69,0xd8,0x72,0x02,0x54,0x4c,0x80,0xc4,0xba,0x93,0xe0,0x13,0x5a,0x81, -0x0f,0xda,0x5d,0x3c,0xb8,0x3b,0xda,0x99,0xed,0x6f,0xb5,0xf4,0x2f,0xb4,0x11,0xeb,0x88,0x72,0x7f,0xd7, -0xcb,0xc1,0x42,0xed,0xe8,0x07,0x39,0x95,0xd3,0x3e,0x89,0x39,0x6a,0x74,0x0e,0xe6,0xb3,0x8c,0x5f,0x21, -0xd4,0x4a,0x34,0x9e,0xf3,0x99,0x70,0x59,0xb6,0x3f,0x47,0xde,0x92,0x78,0x3e,0x81,0xa7,0xf4,0x27,0x46, -0x5f,0xfe,0x0a,0xb4,0x0d,0xac,0x6f,0xaf,0x1c,0x3b,0xa3,0xea,0x86,0x0f,0x7f,0x75,0xd7,0x58,0x98,0xee, -0xd0,0xc1,0x4b,0x0d,0x0d,0xbc,0x39,0xe9,0xdf,0x4d,0x28,0x22,0xc2,0x04,0x23,0x22,0x14,0x5d,0xf4,0xa0, -0xb6,0xb1,0x31,0xd9,0xe1,0x5f,0xca,0x97,0x1a,0x01,0xa8,0x00,0xf7,0x3d,0x0a,0xa5,0x2b,0xec,0xef,0x2a, -0xbd,0xbc,0xf9,0x56,0x0a,0x98,0x28,0xfe,0xcc,0x1f,0xce,0x28,0xec,0xc2,0xac,0x8d,0xbe,0xff,0x83,0xb9, -0xfe,0x21,0xdf,0xa7,0x5f,0x17,0x97,0xad,0x59,0x30,0x09,0x22,0x38,0x63,0x2b,0xdb,0xcb,0xda,0x3c,0x33, -0xc5,0xfb,0x8d,0xf3,0x4d,0x6a,0x57,0x22,0x75,0x1b,0xa6,0x84,0xbf,0x55,0x51,0xea,0x0e,0x33,0x40,0xab, -0xe7,0x01,0x83,0x64,0x34,0xc6,0x9c,0x17,0x50,0x01,0x68,0x36,0xdf,0xed,0xa3,0xc6,0xe1,0x50,0xd2,0x7b, -0x69,0xd3,0x7b,0xb4,0x0c,0x7b,0x03,0x95,0xbb,0xdb,0xef,0xd4,0xc7,0x63,0xa9,0x0f,0xd8,0x12,0x36,0xc0, -0x3a,0xcc,0x72,0xa7,0xfb,0xa4,0xed,0x2a,0x89,0x43,0x90,0x69,0xe7,0xd9,0x52,0x63,0x79,0x05,0xc3,0xeb, -0x58,0xec,0xf4,0x36,0x28,0x22,0x26,0x00,0x41,0xf1,0x7a,0xd7,0xef,0x2c,0x61,0xec,0xa6,0xf0,0x6f,0xec, -0x2c,0x22,0x1e,0x0a,0xcd,0x42,0x51,0x37,0x0f,0xb8,0xa0,0xbb,0x10,0xbf,0x1a,0xd6,0xcb,0x60,0x43,0xa8, -0xb0,0xe8,0x2a,0xf3,0xda,0x2c,0x82,0xf3,0x0a,0x1b,0x28,0x68,0x66,0xb9,0x0a,0xd0,0xa3,0xa9,0x59,0x20, -0xea,0xce,0x04,0x5e,0xee,0x22,0xf4,0x82,0x5a,0x2f,0x82,0xad,0x34,0xa1,0x25,0x5e,0x36,0xab,0x42,0x94, -0x40,0x6a,0x97,0x37,0x2b,0x34,0x24,0xa6,0x42,0x39,0xa4,0x89,0x35,0xa0,0x93,0x61,0x65,0x71,0x56,0x57, -0xb4,0x75,0x83,0x4d,0x3d,0x00,0x97,0x33,0xdd,0x5c,0x58,0x84,0xa2,0x92,0x82,0xf4,0xcc,0xb8,0x1b,0xf6, -0xe4,0xd9,0xce,0xc7,0xad,0xe1,0x70,0x4f,0x4f,0xdf,0x54,0x5b,0x4b,0xbf,0xa7,0x55,0x20,0xd5,0x74,0x1d, -0x19,0x8d,0xc7,0x7c,0xbc,0xe2,0x84,0x2e,0xea,0xfd,0xab,0xde,0x3c,0x75,0x0f,0x61,0xd0,0x6f,0xd9,0xc9, -0x64,0x64,0xaa,0xdd,0x24,0x50,0x62,0xb0,0x9a,0x7b,0x2a,0x6a,0xa3,0x40,0x0e,0x20,0xb9,0xc2,0xda,0x73, -0x51,0xac,0x1a,0x60,0x66,0x07,0x61,0x07,0xd2,0x47,0x42,0x3e,0xd2,0x26,0x73,0xd4,0x82,0x84,0x00,0x86, -0x09,0xfe,0x8d,0xe1,0x5f,0xa4,0x43,0xce,0x46,0xda,0xfc,0x42,0xc8,0x19,0x40,0x14,0xf0,0xef,0xd2,0x86, -0x8c,0x46,0xe6,0xa4,0x12,0xd9,0xb7,0xf6,0x09,0x31,0x30,0x28,0x17,0x90,0x3d,0x36,0xd0,0x4f,0x2a,0x8e, -0xd2,0xbb,0x3a,0x3a,0x69,0x17,0x0e,0x12,0x35,0x6e,0x24,0xeb,0x02,0x5f,0x08,0x7b,0xc7,0x34,0xcc,0xe1, -0xff,0xe3,0x30,0x11,0xde,0x9e,0xd1,0xe8,0x38,0x83,0x89,0x51,0x54,0xaf,0xe3,0xd2,0x04,0x9c,0x9b,0x50, -0x03,0x91,0x75,0x67,0x61,0x0a,0xbd,0xca,0xba,0x05,0xfc,0x2d,0xe0,0xef,0x25,0xfc,0xbd,0x6c,0x66,0x6f, -0x6b,0x8c,0x70,0x24,0x96,0x93,0xc6,0xdd,0xde,0xca,0x09,0x73,0xbf,0x2d,0x6b,0x74,0x2d,0x46,0x97,0x39, -0x3c,0x94,0x49,0xba,0xbe,0xc9,0xea,0x69,0x88,0x63,0xf4,0x1b,0x68,0x39,0x23,0x5a,0x16,0x44,0xcb,0xcb, -0x55,0xb4,0x54,0xf2,0x34,0x9b,0x96,0x39,0xd0,0x2e,0xa7,0xf1,0x48,0x61,0x3e,0xe1,0x88,0xa4,0x30,0xa7, -0xfe,0xe5,0xb4,0xac,0x5b,0xf6,0x3b,0x68,0xc9,0x13,0xf8,0xce,0xb4,0xa4,0x59,0xec,0x5c,0x6b,0x6b,0x8a, -0x9a,0xa4,0xe7,0x55,0x85,0x0f,0x90,0xdb,0x51,0x7c,0x8f,0x1e,0x97,0x0f,0xe9,0xf1,0x2c,0xbb,0x72,0xfb, -0xb8,0x66,0x06,0x3e,0x60,0x55,0x0b,0xf4,0xd9,0x60,0x69,0xa1,0x98,0x1b,0x2e,0x3e,0x33,0xb3,0x7b,0x5c, -0xf2,0x47,0x2a,0x35,0xd7,0x8a,0x95,0x4a,0xbc,0x40,0x4b,0x14,0x3c,0xae,0xf7,0x50,0xad,0x4e,0xc8,0xaa, -0xae,0xd1,0x4f,0x6d,0x7e,0x67,0x4e,0x44,0xea,0x66,0xbc,0x36,0xde,0xe4,0xc9,0xe5,0x6d,0x73,0x25,0x75, -0x86,0x56,0xbc,0xd1,0xdf,0x59,0xd7,0x76,0xc5,0x9d,0x55,0xd3,0xa9,0xcf,0xf9,0xae,0x88,0x76,0x03,0xd1, -0x04,0x06,0x04,0x55,0x7a,0x34,0xdf,0xc1,0xa8,0xca,0xa3,0xbb,0xff,0x45,0xb5,0xb0,0x2e,0xaa,0xe6,0x91, -0x26,0xab,0xd3,0x2a,0xdf,0x57,0x9a,0x7e,0x45,0xed,0x48,0x56,0xba,0x63,0x92,0x87,0xac,0x6c,0xc8,0x8b, -0x33,0xb8,0xb2,0xcd,0x8f,0x80,0xd6,0x78,0x57,0xb9,0x3b,0x75,0x87,0xe9,0x4e,0x36,0xaa,0xaa,0x51,0x71, -0x85,0x54,0x7d,0x18,0x40,0x6c,0x90,0xda,0x83,0xb0,0x9b,0xb5,0x75,0xfd,0x38,0x4e,0x06,0x26,0xce,0x00, -0xda,0xd8,0x58,0x5d,0xb1,0x5d,0x69,0xa7,0x5e,0x65,0xdb,0xaa,0xf2,0x66,0x95,0x6e,0x26,0x52,0xda,0x65, -0xb5,0x6e,0x68,0x4b,0xe0,0x47,0xd8,0xa8,0xfa,0x40,0x97,0x4f,0x1c,0xca,0xf7,0xcb,0xd2,0x54,0x8e,0x33, -0x87,0xb5,0x71,0xf0,0x58,0x29,0x8f,0x36,0x0b,0xa1,0x65,0x1b,0x5e,0xdf,0xac,0xd2,0x0e,0x36,0x14,0x40, -0x74,0x8c,0x1b,0xfd,0xb6,0x4b,0x5d,0x50,0xe1,0x45,0x43,0x42,0x5b,0x7a,0xac,0xd8,0x95,0x86,0x2c,0x5e, -0x8b,0x71,0x79,0x94,0x5c,0xc4,0x40,0x5d,0xdd,0x71,0x3c,0xec,0x04,0xe2,0x5a,0xdf,0xa0,0x30,0x7b,0x23, -0xe3,0x29,0x38,0x82,0x51,0x4b,0x6f,0x4a,0x7b,0xe9,0x24,0xc7,0x4d,0xaf,0xbb,0xb9,0xf6,0x32,0x81,0xa5, -0x96,0x7d,0xd9,0x02,0x6c,0x6e,0x6d,0xd0,0x85,0xa5,0x96,0x9d,0xa5,0x31,0xab,0xb5,0x1a,0xa6,0x90,0x77, -0x40,0xf8,0xc6,0x18,0x8e,0x9a,0x96,0xf5,0x43,0x06,0x40,0x99,0xbe,0x68,0x6b,0xfb,0xdb,0xb7,0x96,0x32, -0x13,0xc8,0xab,0x2d,0x42,0x88,0x9a,0x68,0x9b,0xc0,0x05,0xc1,0x35,0x03,0xff,0x35,0x9d,0x62,0x54,0x0b, -0x11,0x71,0xdc,0x85,0x22,0xe9,0xe8,0x3a,0xa5,0x37,0xab,0xb0,0x43,0xed,0x1c,0x9d,0x8b,0xac,0x5a,0xf7, -0x87,0x70,0x38,0x27,0x15,0x17,0x59,0x60,0x54,0xb5,0x7a,0xb3,0x67,0x56,0x20,0xb7,0xdf,0xa1,0xdd,0xa4, -0x5a,0x45,0xca,0x29,0x3b,0x4c,0x88,0x91,0x89,0x4c,0x0f,0xad,0x23,0x24,0xa0,0xf4,0xeb,0xbe,0xb1,0xb1, -0x0e,0x58,0x7b,0x9e,0x49,0x46,0xad,0x76,0xb6,0xf3,0x93,0x32,0x3a,0xbd,0x3b,0x75,0x63,0x87,0x7b,0x0f, -0x35,0x9f,0x8d,0x52,0x8a,0x98,0x1b,0x1b,0xbf,0x26,0x2a,0x84,0xdb,0x93,0x18,0x50,0xd1,0xb6,0xd0,0xcf, -0xf6,0x5c,0xf8,0x58,0xa6,0x07,0xbf,0x11,0x27,0x12,0x39,0xac,0xd6,0x08,0x4f,0x56,0x6b,0x84,0x4b,0x93, -0x16,0x69,0x8d,0x43,0xa1,0x87,0x00,0x75,0x5f,0x1a,0x3d,0x99,0xc9,0x74,0x7c,0xd5,0xe3,0x54,0x08,0x67, -0xe6,0xd7,0x98,0x3b,0x38,0x3e,0xb9,0xa9,0x44,0x7f,0xc0,0x13,0x5a,0xc6,0x96,0x52,0xd6,0x47,0x36,0x97, -0x11,0x55,0xd8,0x5d,0x2c,0x8b,0x59,0xab,0x38,0xce,0x4e,0x70,0xb6,0xe8,0x1d,0x2f,0x96,0x05,0xaa,0xc8, -0xc6,0x13,0x8e,0x54,0xe7,0x01,0x83,0xea,0x20,0x6a,0x65,0x96,0xf2,0xfb,0x8d,0xf1,0xba,0x39,0xc8,0xb8, -0x76,0x6a,0xcb,0xd6,0x31,0xf2,0xb4,0x45,0x99,0x38,0xba,0x8c,0x8d,0x9b,0xf1,0x04,0x84,0xf2,0xee,0xd9, -0x3c,0x2b,0xe2,0xa2,0xd4,0xa4,0x8d,0x52,0xb7,0xbd,0x1a,0x92,0x5a,0x4f,0x80,0x99,0x6c,0x29,0x99,0xf7, -0x5d,0x44,0xbc,0x24,0x40,0xe5,0x20,0xde,0x42,0x40,0x84,0x1c,0x8b,0xea,0x25,0x8b,0xae,0x10,0x5b,0x47, -0x87,0xfe,0xfd,0xba,0x72,0x8f,0x1e,0xd8,0xd6,0xd5,0xff,0x2e,0x5d,0x78,0xc8,0x68,0xb8,0x8d,0xb0,0xff, -0x93,0x7b,0xa4,0x3b,0x5b,0xfa,0xfd,0x9f,0x2f,0x92,0x15,0x9d,0x87,0x8b,0x6b,0x53,0xe7,0x91,0xdb,0x8e, -0xb4,0x6d,0x57,0xbb,0x0c,0x99,0xe6,0x3c,0xfe,0x75,0xd4,0xc0,0x20,0x64,0x55,0xd7,0x79,0xb7,0xa6,0x46, -0x4e,0x9f,0xbf,0x7f,0x77,0x74,0x7a,0x04,0x2c,0xf9,0xab,0x17,0x07,0xa7,0x2f,0xfe,0xf6,0xe2,0xdd,0xd1, -0x21,0xb6,0xf7,0x70,0x7b,0xb3,0xec,0x81,0xf6,0x66,0xe2,0xca,0x9e,0xad,0xdc,0x80,0x7d,0x7d,0x6b,0x4f, -0xd5,0xd6,0x3e,0xc7,0xcb,0x3b,0x54,0x85,0x5a,0xbf,0xc3,0xc9,0xce,0x5c,0xee,0xf1,0x13,0xd8,0xe3,0x2b, -0x7c,0xbc,0x76,0xcb,0x03,0x92,0xcd,0x8f,0x27,0x27,0x5d,0x8c,0x26,0x53,0x2c,0xa2,0xb3,0x78,0xe4,0x79, -0x03,0xaf,0xeb,0xb5,0xcd,0x54,0x3f,0xa0,0x6f,0x0e,0x19,0x95,0xfb,0x37,0xda,0x48,0x02,0x03,0x50,0x19, -0x62,0x8a,0x67,0xa5,0xc8,0xf5,0xf6,0x85,0xf7,0xda,0x3b,0xcd,0x53,0xb6,0x5e,0xca,0xec,0xa9,0x09,0xe3, -0xeb,0xf3,0x8d,0xc3,0xed,0x81,0xcb,0xb9,0xc8,0xee,0x35,0x39,0x73,0x35,0x39,0xcb,0x5a,0xd8,0x3f,0xa1, -0xd4,0xf2,0x7b,0x2c,0x56,0xe9,0x85,0xd0,0x49,0xa4,0xd2,0xb1,0x28,0x29,0xf2,0x28,0x45,0x0c,0x34,0x4f, -0x5b,0xcd,0x7d,0x98,0xb3,0xf3,0xd4,0xf5,0x35,0x13,0xcf,0xae,0x61,0x6f,0x05,0x47,0xac,0x2b,0x5c,0x55, -0x79,0x1b,0xd7,0x5d,0xd6,0x6f,0xed,0xf6,0x95,0xfd,0xc6,0xd8,0x45,0x0c,0x1f,0x78,0xb6,0x55,0x3b,0x5f, -0x62,0x9c,0xc6,0xa6,0x15,0xbb,0xeb,0x34,0x45,0x6d,0x26,0x79,0x15,0xb7,0x41,0xd9,0x5a,0x69,0x43,0x50, -0xe8,0x9c,0x45,0x61,0x72,0x16,0x91,0x83,0xb3,0x28,0xc4,0x65,0x02,0x65,0xed,0xb1,0x16,0xfe,0x15,0xaf, -0x36,0x5f,0xcd,0x2b,0x94,0x77,0xcc,0x96,0xf0,0xb8,0xd6,0x49,0xac,0xb4,0x20,0x94,0x4f,0x60,0x0a,0xda, -0xeb,0xbf,0x75,0x6d,0x86,0x1f,0xc2,0xeb,0x91,0x7e,0x9f,0x92,0xeb,0x2a,0x96,0xb1,0x56,0x31,0x3c,0xa7, -0x0a,0xc3,0x9a,0xfd,0x33,0x99,0xcf,0x23,0x8a,0x87,0xe9,0xd2,0x9c,0x53,0x31,0xfc,0x84,0x25,0x40,0xd8, -0xdd,0xf6,0x6f,0xc5,0xdd,0x34,0xe7,0x65,0x5f,0x88,0xc9,0x44,0x3a,0x42,0xfc,0x00,0xab,0xfb,0x3d,0xbd, -0xed,0x2a,0x5f,0x88,0x0b,0x11,0xac,0x73,0xb0,0x16,0x8d,0x8b,0x6c,0xbe,0x2c,0xe3,0xe1,0x1a,0x8a,0x94, -0x80,0x09,0x5d,0x23,0xb1,0x10,0xfe,0x10,0xa6,0x1c,0xf8,0x93,0xcd,0x37,0xe0,0x97,0xe6,0x36,0x91,0xa7, -0xab,0x72,0x31,0x02,0x03,0x2b,0xfc,0x8b,0x3c,0xfb,0xfa,0x66,0xd2,0xaa,0xb7,0xdd,0xf8,0x70,0x36,0x54, -0x51,0x98,0x72,0xcb,0x1b,0x1f,0x0b,0x3a,0xc4,0x16,0x7f,0x10,0xcf,0x23,0x5c,0x72,0x55,0x95,0xcf,0x96, -0xd3,0x97,0xc9,0x17,0xe3,0x2e,0x8b,0x48,0xc5,0xbf,0x2f,0x52,0x71,0xd0,0x63,0xf7,0xfd,0xe7,0x25,0x3d, -0x7a,0xc6,0x28,0xf3,0x81,0x9b,0xea,0xaa,0xc8,0x52,0x3d,0xba,0x33,0xdf,0xc0,0xcc,0x6b,0x71,0x48,0x2f, -0x2d,0xaa,0xde,0x16,0xce,0x9e,0xdd,0xff,0x07,0xc8,0x7b,0x68,0x0d,0xe6,0x6f,0x03,0x00 +0x09,0x2c,0x30,0x34,0xc5,0x40,0xf4,0x90,0x19,0x11,0xed,0x11,0x11,0xc6,0x35,0x13,0xec,0x36,0xaa,0x71, +0x62,0x44,0x14,0x7b,0xf3,0xa7,0x4a,0xd4,0x10,0x57,0x0f,0xbe,0x4a,0xdf,0x41,0xd4,0x5d,0x75,0x61,0x64, +0xf3,0x97,0x70,0xe5,0x5c,0x4b,0x8a,0xf4,0x11,0x7a,0x68,0x5d,0xa0,0x6d,0x09,0x1c,0x8b,0x19,0x3f,0x93, +0xaf,0x8d,0xd1,0x76,0x18,0x38,0x5c,0x38,0x26,0xd1,0xf9,0x37,0x33,0x31,0x6a,0xaa,0x90,0xab,0xd8,0x96, +0x8d,0x14,0x3f,0x0a,0x7d,0xa5,0x1d,0xaa,0xd5,0x74,0x30,0xdf,0x3e,0x3a,0xc0,0x83,0x73,0x45,0xc6,0x18, +0xd9,0xe1,0x74,0xef,0x72,0x0d,0xf5,0x44,0x45,0xa7,0xb4,0x6c,0x28,0xfa,0x83,0x7d,0xa2,0x1a,0xa7,0x04, +0x47,0x46,0xd5,0x6f,0x5f,0xd5,0x7d,0x4d,0xdc,0x21,0xd9,0x0c,0x02,0x2f,0x6f,0xc3,0xfa,0xa1,0xcd,0xc2, +0x2b,0x2f,0xb8,0x4e,0x26,0x68,0x0e,0x4e,0x36,0x6e,0x83,0x12,0xa5,0x7e,0x37,0x36,0xad,0x0e,0xcf,0x22, +0xed,0x8d,0x1d,0xc9,0x5b,0x40,0xca,0x01,0xcd,0x18,0xf9,0x82,0xe2,0xf1,0x01,0x30,0x49,0x2e,0xbb,0x98, +0x49,0xec,0x19,0x6a,0x43,0x4a,0xe6,0x31,0xd0,0x9b,0x46,0x08,0x8f,0x98,0x06,0xb3,0xa1,0xd7,0x7b,0xe2, +0x00,0x33,0x1a,0x9b,0x45,0x9c,0xaa,0x37,0xa5,0xd7,0x36,0x8b,0x78,0x13,0x70,0xd5,0xf8,0x3c,0x1e,0x2f, +0xa7,0xc0,0x52,0x5e,0x44,0xe9,0xa4,0xe9,0xaa,0x37,0x19,0x4f,0xcf,0x2e,0x26,0x78,0x4a,0xd1,0x9b,0x93, +0xe1,0x46,0x91,0x3f,0xed,0x16,0xb9,0x04,0xb4,0x77,0xc6,0x35,0xa3,0xf0,0xc0,0xd9,0x30,0x7a,0x3c,0x33, +0x3b,0x03,0x53,0x01,0x5f,0x1a,0xc5,0xd3,0x84,0xe7,0x99,0xe5,0x38,0x04,0xce,0xdb,0x38,0x5d,0x0a,0x66, +0x1c,0x86,0x88,0xbc,0x24,0x18,0xc1,0x71,0x3c,0x7e,0xe6,0x64,0x8a,0x7f,0x47,0xce,0x88,0x6f,0x03,0xf8, +0x39,0x49,0x3f,0x37,0x01,0x69,0x52,0x0f,0x18,0xaa,0x0f,0x51,0x1a,0xcf,0xb9,0xf5,0xee,0x02,0x7f,0x57, +0x37,0x1f,0x03,0x21,0x15,0x21,0x47,0xd5,0x03,0x37,0x76,0x0d,0x7d,0x82,0xf6,0xda,0xa6,0x54,0x83,0x67, +0xa4,0x8a,0xa6,0x4e,0x8a,0xe4,0x62,0x2c,0xc8,0x92,0xec,0x91,0x94,0x53,0x13,0xcf,0x60,0x30,0x08,0x67, +0xd1,0xfc,0x8c,0x7c,0x06,0x3f,0x07,0x7e,0x80,0xbc,0x3a,0x16,0x36,0x88,0xe2,0x21,0x34,0x86,0x9c,0xcc, +0x07,0x48,0xf0,0x8a,0x17,0x10,0x53,0xf8,0xcc,0x18,0x96,0x6d,0x6f,0x6d,0x17,0x38,0xb9,0x4b,0xe5,0x75, +0x96,0xf6,0xd8,0x56,0x04,0x0c,0xbb,0xd0,0x9f,0x12,0x90,0x29,0x40,0x76,0x17,0x9d,0x29,0x89,0x04,0x94, +0x90,0x2d,0xd7,0x9e,0xc5,0x12,0x80,0xcc,0xa4,0xf3,0x00,0x7a,0xca,0x82,0x3b,0x39,0x90,0x30,0x48,0xe4, +0xdc,0x65,0xe9,0xe6,0x1a,0xd4,0x96,0x57,0x1c,0x13,0xe5,0x0b,0xe1,0xba,0x0c,0x71,0x17,0x3c,0xee,0x01, +0x08,0x0b,0xc9,0x8e,0x73,0x0c,0x7e,0x2d,0x2e,0xc8,0x47,0x19,0xa3,0x8d,0x5a,0x95,0x56,0x3f,0x95,0x50, +0xf9,0x8f,0xe9,0x2b,0xe2,0x15,0x14,0x4d,0x5d,0x2e,0x44,0x97,0x4d,0x35,0x00,0x0e,0x1e,0x83,0xa1,0x82, +0xa0,0x11,0xb5,0x63,0x25,0x2c,0xed,0x24,0x39,0x93,0xdc,0x46,0x66,0x09,0x3e,0xff,0xcb,0x5a,0x12,0x29, +0x09,0x50,0x24,0x2b,0x56,0x91,0x0c,0x2a,0x9c,0x7c,0x81,0x45,0xbb,0x8a,0x66,0x93,0x78,0xfe,0x8e,0xd9, +0xf3,0x9a,0x30,0x9b,0x15,0x0b,0x0a,0x5c,0x02,0x48,0x82,0xe1,0xf7,0x95,0x11,0x53,0x4b,0x9b,0x5d,0x17, +0x70,0x06,0xdc,0xbd,0x0a,0xaf,0x7b,0x41,0x67,0x69,0x2c,0xd7,0xa1,0x5e,0x15,0x5c,0x93,0xeb,0x35,0x79, +0xdf,0x89,0xfb,0x43,0xe1,0x18,0xb5,0x78,0x37,0x84,0xcb,0xaf,0x28,0x54,0x58,0x0f,0x6e,0x6f,0xa3,0x2f, +0xe2,0x29,0x0f,0x95,0x06,0x54,0x2d,0x39,0x0a,0x1d,0xc9,0xec,0x8b,0xbc,0x3b,0x33,0x2f,0xb0,0xdd,0xeb, +0xb5,0xfb,0xbd,0xcd,0x98,0x5f,0x30,0x65,0x93,0xa8,0xa4,0x81,0xcb,0x0d,0x4f,0x50,0x34,0x9b,0x81,0xde, +0x90,0x66,0xfe,0xf7,0x18,0xf4,0x45,0x8e,0xb6,0xda,0xd8,0x22,0x63,0x31,0xdf,0x2a,0xdd,0xac,0x86,0x0c, +0xb5,0xab,0xda,0xed,0x1b,0x1c,0x58,0x55,0x47,0x97,0x7d,0x35,0x77,0x60,0x80,0x3a,0x02,0x1b,0x8f,0xed, +0x38,0xe9,0x2c,0xc7,0x08,0xc6,0x72,0xe4,0x9c,0xe5,0x90,0xcc,0xee,0x82,0xda,0x80,0xa1,0x49,0x8d,0x36, +0x39,0x24,0x89,0xd0,0xd4,0xc6,0x98,0x22,0x87,0x48,0xb0,0xe5,0x3c,0xfe,0x2d,0x73,0xe4,0x1e,0x75,0xd0, +0xd4,0x5f,0x3d,0x4f,0x54,0x6d,0x8a,0x9b,0xe3,0x23,0x99,0x53,0x5d,0x53,0xa5,0xa4,0xa9,0x22,0xcb,0xad, +0x9e,0x2b,0x55,0x3d,0x8e,0xc9,0x92,0xca,0xc9,0x52,0x06,0x91,0xd1,0xaa,0x7b,0xb6,0xe0,0x66,0x12,0xa9, +0xd9,0x22,0x02,0xe5,0xc5,0xec,0x99,0x4b,0xbc,0xd6,0x8d,0xbc,0x82,0xdf,0x7b,0x06,0xde,0x9c,0xd4,0x73, +0x87,0x72,0xaf,0xca,0xdb,0x1e,0x9f,0xb7,0xce,0xba,0xd9,0x43,0x63,0x18,0xd5,0xa7,0x62,0x26,0xa7,0xc3, +0x77,0xea,0x71,0xf0,0x39,0xd1,0x43,0xc8,0x17,0x13,0x9c,0x33,0xd9,0x43,0xe7,0x2b,0x46,0xdb,0x15,0xf3, +0x35,0x73,0xcd,0x57,0x49,0x90,0xda,0x84,0x95,0xd4,0x77,0x96,0xa4,0x19,0xeb,0x2e,0xaa,0xcf,0x1f,0xa0, +0xa8,0x3e,0x67,0xd5,0x50,0x79,0xf5,0x2e,0xb9,0xce,0xd3,0xdb,0xee,0xe0,0xf7,0x39,0x62,0x83,0xac,0x9a, +0x93,0xa8,0xc7,0x48,0x47,0x6c,0x61,0x4e,0x49,0xe2,0x30,0x5d,0xf3,0x71,0x1d,0x66,0x24,0xec,0xf4,0x95, +0x56,0x8d,0x82,0x96,0x63,0x5d,0x9d,0x3d,0x42,0xdd,0x46,0x8a,0x07,0x49,0xeb,0x46,0x9d,0x54,0xa9,0x71, +0xf0,0x74,0xf1,0x25,0x39,0x93,0xaa,0x46,0xfa,0x59,0x91,0x19,0x0c,0x48,0x10,0x59,0x84,0x64,0x44,0x75, +0x11,0x46,0x8d,0x7a,0x58,0x85,0x4e,0x89,0xeb,0x2c,0x65,0x29,0xc5,0x40,0xb2,0xe2,0x01,0x87,0xaa,0xd8, +0x67,0x65,0x81,0x38,0x47,0x57,0x47,0x9c,0xc4,0x61,0x33,0xc8,0x9f,0x2f,0xd3,0xfe,0x67,0x3c,0x21,0x07, +0xde,0xfb,0x77,0x5e,0x00,0x34,0x34,0xd3,0x5e,0xbe,0xf4,0x6e,0x58,0x57,0x89,0xde,0x0c,0xba,0x49,0xc1, +0x8c,0xfa,0xbd,0x54,0x5f,0x22,0xc9,0x5f,0x56,0xec,0x46,0x64,0x68,0xc1,0xa8,0x21,0xab,0x1e,0xb9,0xac, +0x71,0xe3,0x8c,0xe6,0xc1,0xbb,0xb6,0x46,0x8e,0xe1,0xdd,0x6b,0x55,0xbd,0x47,0x6a,0xec,0x03,0xda,0x16, +0x47,0x27,0xa4,0xc2,0x61,0x8e,0x22,0xea,0x68,0x75,0xa7,0x0b,0x0c,0xb6,0x95,0x8b,0xb1,0xcc,0xe8,0x5b, +0x69,0x70,0xd1,0x38,0xe7,0xc6,0x38,0x1b,0x1a,0x43,0xea,0x59,0x1f,0xc7,0x4d,0x30,0x04,0x19,0x86,0xc2, +0x2e,0x1b,0x60,0xe9,0xd9,0xdf,0x00,0x5e,0x60,0x4a,0x4d,0xa4,0xa5,0xd4,0x02,0xea,0xb0,0xa7,0x17,0x45, +0x0d,0x5c,0x69,0x0b,0x18,0xe0,0x14,0x45,0xad,0x8e,0x88,0xae,0x5a,0x50,0x87,0x3f,0x4d,0xd2,0xcb,0x06, +0xe4,0x59,0xff,0xc0,0x28,0x92,0xa5,0xa7,0x28,0x99,0x44,0x6b,0x5c,0x7b,0x96,0xcb,0xab,0xd4,0x8d,0x35, +0x19,0x14,0xeb,0x68,0xad,0x61,0xc5,0xbd,0xad,0x58,0xc7,0xda,0x54,0xa8,0x98,0xbd,0xdf,0x3e,0x11,0x04, +0x1f,0x99,0x3b,0xf9,0xc8,0xcc,0xc9,0x47,0x66,0x8d,0x7c,0x64,0x35,0x95,0xa0,0x2b,0xa4,0x87,0x0d,0x3d, +0xd7,0xb7,0x88,0xbc,0xb6,0x45,0x18,0xc4,0xab,0xe8,0x50,0xa7,0xdd,0x7e,0x36,0xcf,0xf2,0x83,0x57,0xcf, +0x0c,0xce,0xed,0x0c,0x13,0xdd,0x44,0x8b,0x15,0xd1,0xca,0x0a,0x14,0xca,0xbb,0x0f,0x51,0x24,0x6c,0x59, +0x11,0x26,0xd5,0xb1,0xe2,0x46,0xea,0xb2,0x57,0x4a,0xa7,0x3d,0xff,0x6a,0x16,0xc7,0x73,0x42,0xf0,0x03, +0x1c,0x27,0x71,0xde,0xba,0x2e,0xe6,0x09,0xf9,0xd9,0xf5,0xae,0xf2,0xe9,0x78,0xe1,0x09,0x0f,0x19,0x9c, +0xba,0xd4,0xbd,0x3d,0xd8,0xcc,0x4a,0xad,0x2a,0x4f,0x2a,0x79,0x60,0x58,0x3c,0x7c,0xa2,0x19,0xea,0x97, +0x64,0xc2,0x01,0xee,0xc8,0xd0,0xca,0x80,0xa2,0xca,0xd1,0x8d,0x70,0x9c,0xe3,0x29,0x9f,0xf2,0x8b,0x0e, +0x81,0xcd,0x58,0xa3,0xb5,0xb1,0x59,0x11,0xff,0x6e,0x15,0xcf,0x54,0x50,0x38,0xe9,0x52,0x0c,0x71,0x6c, +0x5e,0xd6,0x25,0x1e,0x55,0xcb,0x8c,0x8e,0x3d,0x88,0xfb,0x47,0xe6,0xf8,0x9d,0x95,0xf6,0xe0,0xc1,0xb8, +0x7d,0xfb,0xd6,0xa2,0x69,0x8e,0x2a,0xe3,0x85,0x73,0xbc,0xe4,0x40,0x19,0xc3,0x84,0x22,0xfe,0xa0,0x2a, +0xf8,0x47,0x75,0x5d,0xb4,0x16,0x5c,0xf3,0x0f,0xee,0xb7,0xef,0x98,0xbc,0xaf,0x0f,0xff,0xf6,0x9b,0x26, +0x2f,0x94,0xff,0xa3,0x27,0xef,0xac,0xb8,0xfc,0xcd,0x93,0x97,0xbe,0x49,0xec,0xa3,0x76,0x90,0x1f,0x9f, +0xc2,0x4d,0xa8,0x3b,0xc3,0x1d,0xa4,0x0d,0xd3,0xba,0xda,0x5a,0xfa,0x3d,0xcc,0x28,0x9a,0x32,0x2e,0x49, +0xcc,0xe6,0x9a,0x77,0x80,0x28,0xca,0x87,0xea,0x13,0x0e,0x46,0x3f,0x8d,0xe7,0xd6,0x7e,0x7b,0x26,0x52, +0x2d,0xda,0xef,0xf6,0x38,0x60,0x8f,0xbe,0xd7,0x3a,0x07,0x69,0x17,0xdd,0xe9,0xc7,0x43,0xf4,0xce,0x03, +0x7f,0x7f,0xf8,0x31,0x80,0xab,0xfd,0xc6,0xb2,0x88,0x3f,0xce,0x12,0xd4,0xa9,0x68,0x45,0x9d,0x4e,0x00, +0x9f,0x30,0xdb,0x37,0x36,0xe0,0xb7,0xef,0x0b,0x09,0x72,0xdc,0x89,0x02,0xc3,0xe1,0x9b,0x4b,0xbb,0x4b, +0x08,0x14,0x4b,0x6b,0x82,0xa6,0xb7,0x4f,0xd0,0xb4,0x52,0xb4,0x36,0x68,0xc4,0xbd,0x65,0x29,0xa4,0x8c, +0x21,0x82,0xc4,0x0a,0x12,0x7c,0xfc,0xd1,0x29,0xd2,0x7c,0xa0,0x24,0x18,0x5b,0x7c,0x27,0x1a,0x26,0x92, +0x33,0x9c,0x84,0x59,0x3b,0x09,0xe6,0x50,0xba,0xa8,0x73,0x16,0x3c,0x57,0xbc,0x60,0x6e,0xee,0xf7,0x93, +0x6a,0x1a,0x36,0x83,0x18,0xab,0x96,0xe5,0x37,0xe2,0x90,0x9a,0x4b,0xf9,0x8e,0x18,0x55,0x3c,0x95,0xa0, +0xca,0xb9,0x31,0xdf,0xc5,0xd0,0x7a,0x1c,0xf3,0x8f,0xd1,0x8e,0x09,0x6d,0x9d,0xdd,0xe3,0x6b,0xd0,0xbd, +0xd8,0xbd,0x44,0xb2,0x7b,0x5a,0xeb,0x89,0xc1,0xef,0xe5,0xe7,0xe3,0x9f,0xe3,0x28,0xaf,0x0f,0xac,0x35, +0x62,0x34,0xb6,0xf2,0x48,0x8c,0xcd,0x09,0x0d,0x75,0xa0,0x3c,0x33,0xe5,0xd1,0x2a,0x35,0xda,0x74,0x12, +0xbc,0x25,0x4a,0x19,0xb2,0x9e,0xc1,0x69,0xe8,0x1c,0xca,0xc0,0xe5,0x65,0x96,0x4f,0x35,0xb9,0xfb,0xc3, +0x90,0x39,0xa7,0x4a,0x7e,0x07,0x6c,0xd0,0x35,0xc4,0x6f,0xc4,0xa5,0x20,0x07,0xb9,0xf7,0xc7,0x44,0xe8, +0x9e,0xf1,0x42,0xba,0x31,0xef,0xf9,0x07,0xe7,0x63,0xf4,0x55,0x62,0x6c,0xcc,0x39,0xa7,0xe1,0xaa,0x9f, +0xc7,0x53,0x6c,0x54,0x2e,0xfc,0xa0,0xd4,0x01,0xee,0xb2,0x1b,0xc3,0x46,0xa1,0xe2,0x72,0xaf,0xd5,0x56, +0x2a,0x71,0xbf,0xe9,0xfd,0xae,0xc9,0xb2,0xcf,0x01,0x15,0xae,0xe5,0x88,0x4e,0x07,0x11,0xbe,0x32,0x50, +0xf3,0xd1,0x8d,0xd1,0x8a,0xbc,0x0e,0x43,0x27,0x3a,0x3c,0xd5,0x8c,0xab,0xb0,0x9c,0xc4,0x8d,0x65,0xc4, +0x8c,0xb0,0x0b,0xf1,0x6c,0x6b,0x2c,0x55,0x30,0x19,0xcd,0x32,0x38,0x27,0x80,0x60,0x06,0xff,0x2c,0x68, +0x8f,0x02,0x91,0x6a,0xa0,0x34,0x8d,0x22,0xe1,0xba,0x01,0xbd,0x56,0x9d,0x92,0x22,0x6c,0xc5,0xe4,0xe2, +0xc3,0x82,0x4c,0x1e,0x12,0xc0,0x25,0x1c,0x63,0xf8,0x06,0x86,0x30,0xec,0xa5,0xa2,0x4d,0x51,0xd7,0xbb, +0x5a,0xa6,0x65,0xb3,0x52,0x26,0xe5,0x3c,0xd6,0x6d,0x56,0x3c,0xa9,0xef,0x5e,0xd5,0x12,0x77,0x65,0x1a, +0x54,0xd7,0xe1,0x38,0x69,0xea,0x49,0x95,0x2a,0x08,0xcb,0x1b,0xf6,0xf3,0xdb,0xfd,0x1c,0xd3,0x8d,0xbd, +0x0b,0x64,0x7b,0x61,0x7b,0x90,0x60,0x07,0x9a,0x11,0x99,0x79,0xd0,0x5b,0xe9,0x55,0x3c,0x26,0x25,0x65, +0x7c,0x1c,0x45,0x27,0x18,0x42,0x5f,0x86,0x44,0x3a,0x91,0xf9,0x34,0x20,0xa4,0x56,0xeb,0x95,0x1f,0x4c, +0xcc,0x5e,0x28,0x0d,0x1b,0x09,0xa0,0xf2,0xa1,0x27,0x91,0x34,0x01,0x0d,0x0d,0x3d,0x33,0x7a,0xa6,0xca, +0xa2,0x09,0x7b,0x62,0x63,0x20,0xed,0x99,0x99,0x1e,0x94,0x09,0x3d,0x18,0x9c,0xfd,0x6c,0x99,0x92,0x73, +0xc6,0xd2,0x17,0x29,0x79,0x74,0xf5,0x37,0x76,0x97,0x2a,0xd0,0xb6,0xef,0x73,0xac,0x42,0xcc,0x86,0x25, +0x34,0x4f,0x2f,0xa2,0x2f,0xbc,0x9c,0xbc,0xa0,0xdf,0x7f,0x0a,0x78,0x01,0x08,0x57,0x49,0x23,0x0b,0xbc, +0xac,0x81,0xa2,0xc9,0xfd,0xb3,0xd9,0xfd,0xdd,0xb9,0x19,0x8c,0xcb,0x2e,0xf8,0xe7,0x08,0xdd,0x24,0x50, +0x47,0x80,0x5d,0xe0,0x26,0xae,0x4d,0xee,0x4c,0x9c,0xd3,0x91,0x0c,0x3b,0x19,0x90,0xfd,0x43,0xa5,0xb1, +0x9d,0x77,0x67,0x61,0x76,0xdc,0x3b,0xd9,0x42,0x5b,0x9f,0xbc,0x5b,0xc0,0x47,0xff,0x64,0x0b,0x98,0x13, +0xf8,0xb8,0x84,0x8f,0x6d,0xfe,0x78,0x00,0x8a,0xcc,0x25,0xa1,0x0d,0x32,0xe2,0xa7,0x31,0xf0,0x3a,0x25, +0x6a,0xbc,0x3d,0xee,0x68,0x51,0x45,0x12,0x3a,0x7b,0x0d,0x00,0x71,0x7b,0xa7,0x4e,0xab,0xa3,0xb1,0x22, +0xb5,0xe0,0x5d,0xed,0x36,0x14,0x03,0xed,0xaa,0x5f,0x65,0xea,0x75,0x4b,0xe6,0x47,0xce,0x5c,0xf9,0x1d, +0x46,0xe4,0xb2,0x05,0x59,0x21,0x99,0xa5,0xee,0x01,0x82,0x45,0x22,0x10,0xed,0xe6,0xa7,0x61,0x57,0x49, +0xde,0xeb,0x73,0x56,0xcb,0xac,0x18,0xcb,0x88,0x2e,0xa5,0xbc,0x94,0x92,0xf3,0x44,0xab,0x4b,0x7b,0x4c, +0x15,0x78,0xb8,0x1f,0x52,0xb5,0x57,0x38,0xe3,0xfd,0x95,0x1f,0xd3,0x70,0x37,0x90,0x0f,0xa5,0x6a,0xb2, +0xeb,0x6f,0xa7,0xe2,0x1d,0xd6,0xd3,0x25,0xc1,0x4e,0xdc,0x55,0xae,0x13,0x79,0x25,0xa5,0xac,0x16,0x1a, +0xca,0x15,0x0e,0x79,0x6f,0xd7,0x96,0x8a,0x26,0x6d,0xb0,0x5b,0xa9,0x89,0x9f,0xc4,0x50,0x49,0x0b,0x8a, +0x3a,0x5e,0xb5,0x87,0xbc,0x28,0xd0,0xa0,0xab,0xdf,0xd5,0xb9,0x27,0x2b,0xac,0x04,0x1b,0x4d,0x95,0x9a, +0xaf,0x66,0x51,0x60,0x95,0x32,0xbf,0xad,0x06,0x94,0x59,0xc7,0xdd,0x50,0xd6,0xc0,0xb5,0x0f,0x47,0x9d, +0x0f,0xc0,0xda,0x2a,0x66,0x25,0x58,0x6d,0x08,0xfd,0x8d,0x7a,0xe5,0x6e,0x2d,0x8f,0xe8,0xc4,0x97,0x87, +0x00,0xbe,0x5e,0xdb,0x8b,0x52,0x3d,0x6a,0x0b,0x9e,0x55,0x5b,0x97,0x55,0x9e,0x72,0xa4,0xd2,0xd2,0x93, +0x51,0xb9,0x9a,0x73,0xd8,0x4d,0x47,0xc7,0x28,0xc3,0x2e,0x3b,0x5a,0xbe,0x14,0xf7,0x6b,0x56,0x11,0x72, +0x63,0x27,0xc4,0x12,0xd4,0x72,0x4a,0x34,0xbd,0x9d,0xce,0x4f,0x7c,0x84,0xa1,0x83,0x4a,0xa9,0x17,0x0e, +0x69,0x43,0xbd,0xab,0xfc,0x22,0x87,0x73,0xb9,0xe3,0xb5,0xf1,0xa6,0x80,0x8f,0xd9,0x93,0x04,0xf6,0x57, +0xb2,0xd2,0x49,0xd2,0x59,0x9c,0x27,0xa8,0x9b,0x47,0x33,0x89,0x34,0x0d,0x93,0x85,0xd8,0x9b,0xf9,0x9a, +0x61,0x9c,0xce,0x8f,0xe8,0x79,0x95,0x05,0xed,0xc2,0xb7,0xcf,0x70,0x22,0x8e,0x15,0x54,0x4f,0xf2,0xd0, +0xa5,0x4f,0xb9,0x18,0x60,0xec,0x18,0x20,0xd0,0xa4,0x9b,0x22,0xcb,0xee,0x9b,0x10,0x65,0x3c,0x4f,0xe3, +0x52,0xc0,0x50,0xc3,0x68,0x1e,0x5f,0x5b,0xa5,0x90,0x18,0x8a,0x35,0xa3,0x74,0xc5,0xe5,0xe6,0xa1,0x12, +0xec,0xe5,0xcb,0xe6,0x4b,0x62,0xa1,0x0a,0xe0,0x28,0x8c,0x46,0xde,0xfe,0xfb,0x77,0xef,0x5e,0xec,0x1f, +0xbd,0x78,0xee,0x0d,0xbc,0x77,0xef,0x8f,0xd6,0xaa,0x6f,0x28,0x93,0x96,0x0b,0x47,0x91,0xc3,0xbf,0xbf, +0xdb,0x7f,0x24,0xe1,0xc5,0x07,0x6e,0xa7,0x0b,0x74,0x77,0x26,0x68,0x14,0x4d,0x31,0xac,0x39,0x45,0x85, +0xb3,0x50,0xc1,0x10,0xe3,0x3f,0x3c,0xed,0x0d,0xb5,0xf4,0xb9,0xb0,0x0a,0x25,0xf8,0xe5,0xea,0xec,0x05, +0x64,0x6f,0x3f,0x36,0xb3,0xb7,0x1f,0xab,0xec,0x59,0x38,0x1f,0x46,0xe1,0xac,0xed,0x4d,0xd6,0x2a,0xeb, +0xd2,0x05,0x99,0x9b,0xce,0xb4,0x94,0x25,0xa5,0x5c,0x68,0x29,0x67,0x94,0x52,0x78,0x37,0x58,0xcb,0x79, +0x30,0x0d,0x2e,0x6c,0x55,0x11,0x35,0xc4,0xc3,0x0b,0xcd,0x76,0xb3,0x65,0x98,0xd7,0x5d,0x98,0xb6,0x75, +0x17,0xf6,0xb3,0x4b,0xd4,0xf4,0xa4,0x22,0xad,0xed,0x5c,0x75,0xe0,0x69,0x87,0xab,0x70,0xd0,0x3a,0x57, +0x99,0x8b,0x9c,0xcc,0xf0,0x3c,0x2f,0x98,0x56,0x69,0x18,0x64,0x82,0x13,0xb9,0xd0,0x79,0x3b,0x6a,0x4f, +0x7d,0xb1,0x80,0x2e,0x9b,0x66,0xec,0xf0,0x52,0xef,0xce,0x79,0x78,0xe9,0x68,0xe2,0xb2,0xde,0xc4,0x25, +0x1f,0xb4,0xa2,0x0d,0x6a,0xe2,0x2a,0xb4,0x85,0xd4,0x55,0x23,0x57,0x5a,0x23,0x57,0xe2,0x00,0xa7,0xe8, +0x1d,0xd7,0xda,0x0b,0x52,0xc4,0x97,0x7a,0x8a,0x33,0x1b,0xf9,0xea,0x4e,0xae,0x1d,0x32,0xc7,0x14,0xe0, +0xe7,0x11,0xe9,0x28,0xb8,0xde,0xb5,0xa2,0xe3,0xf4,0xa4,0x51,0x33,0xc4,0x0c,0x64,0x1b,0xf1,0x4a,0x1e, +0x87,0x58,0x26,0xf8,0x1a,0xea,0xaf,0xab,0xd7,0x74,0x35,0xbb,0x16,0xef,0x94,0x83,0xb1,0x7c,0xb1,0x44, +0x1f,0xbe,0x3a,0x03,0x3d,0x76,0x30,0xd0,0x8a,0xeb,0xc7,0xa8,0x62,0xb6,0x59,0x3a,0xa9,0xdf,0xa3,0xbc, +0xfe,0xab,0x61,0x9a,0x6e,0xd2,0xac,0x02,0xe1,0xde,0x89,0x9b,0x7e,0xb9,0xe2,0x8d,0xaa,0xb1,0xac,0xa2, +0x4c,0xd9,0x48,0x16,0x19,0x46,0xc5,0xa6,0xcc,0x67,0xa6,0xcc,0x7e,0xa8,0xeb,0x27,0x18,0xdd,0xff,0xec, +0xee,0x7e,0x53,0x9f,0xf7,0xb9,0xcf,0x9f,0x8f,0xd9,0xd7,0x63,0x35,0xfc,0xda,0x03,0x84,0x39,0x05,0x08, +0x8f,0x23,0xc6,0xe3,0x20,0x3c,0x62,0x5f,0xb6,0xe8,0xff,0xef,0x30,0x44,0x4d,0xcd,0x83,0xd1,0x11,0xeb, +0x62,0xb6,0x8f,0xba,0x4b,0xa8,0xa1,0x18,0x58,0x8e,0x14,0x0e,0xfc,0x60,0xcf,0x5e,0xc7,0x0a,0x04,0xa8, +0x66,0xcd,0xa6,0xe1,0x1e,0x21,0x78,0x68,0xbd,0x1f,0xec,0xa9,0x4d,0x5d,0xfd,0x10,0x6c,0xe6,0x91,0xf1, +0xa2,0x70,0x23,0xba,0x84,0x48,0x7f,0x09,0x23,0x25,0x3a,0xd5,0x05,0x7e,0x5f,0xea,0xfd,0xfb,0x40,0xfd, +0x53,0x33,0x45,0x88,0xa0,0x18,0x37,0x42,0x4d,0x1a,0xcc,0x7d,0xa8,0x5e,0xc1,0x9c,0x30,0x84,0xd2,0x07, +0x03,0x8d,0x37,0x70,0x73,0x82,0x6b,0x4c,0xd5,0xe6,0x1b,0x6e,0xf3,0x7d,0xf8,0x46,0x6f,0xd3,0xbe,0x13, +0x1d,0x8b,0xdb,0x3c,0xd2,0xe6,0x7d,0x37,0x99,0x20,0x79,0x8e,0xb5,0x7b,0x3c,0xa7,0xf3,0x6f,0xb1,0x10, +0x11,0xc1,0xf7,0xec,0x85,0x59,0x9f,0x4f,0x70,0x0a,0xa4,0x3b,0x84,0x03,0x5d,0xd1,0x86,0x69,0xbb,0xed, +0xeb,0xf2,0x0d,0x74,0xd7,0xcb,0x86,0xc9,0xab,0x4c,0x05,0x7d,0x74,0x7c,0x6a,0xda,0x1f,0xd6,0x55,0x8c, +0xd5,0xb5,0x1c,0xd5,0xd3,0x58,0x8b,0x5c,0xca,0x4f,0x82,0x72,0x68,0x99,0x41,0x1b,0x2f,0xfc,0xbc,0xd3, +0xb6,0x34,0x01,0x90,0x69,0xd9,0x1c,0x94,0xa1,0x57,0xe6,0xcb,0xb8,0x5e,0x54,0x99,0xea,0xf9,0xe4,0xe3, +0xaf,0x49,0x78,0x5f,0x03,0x1e,0x4a,0x51,0xae,0x9e,0x5f,0xe1,0xed,0x91,0x93,0xcb,0xc8,0xca,0x17,0xf7, +0x64,0x7f,0xa8,0x29,0x2f,0xaf,0x6b,0x2e,0x63,0x81,0x5f,0x48,0x89,0x37,0xc7,0x50,0x66,0xa8,0x80,0x5a, +0x92,0x9b,0x2f,0x94,0x07,0xb7,0xdb,0x95,0x6a,0xbd,0x6e,0x7c,0x10,0x12,0x30,0xe5,0x2a,0x25,0x72,0x65, +0x3e,0x61,0x64,0x62,0x4a,0xa0,0xdd,0xc8,0xab,0x1c,0x4c,0x09,0x1a,0x7b,0x12,0xa0,0x46,0x7a,0x5f,0xa0, +0xd1,0xe9,0xac,0x42,0x83,0x72,0x9b,0xd0,0x10,0x99,0x0e,0x34,0x44,0xce,0x2d,0x68,0x60,0x34,0x54,0x53, +0x08,0xff,0x4b,0xae,0x0b,0xe0,0x8f,0xbd,0x2b,0x64,0x9c,0x95,0x01,0x9a,0x27,0x15,0x4b,0xd1,0x5b,0xe9, +0xcc,0x3b,0x19,0x92,0xca,0x79,0x8e,0xa6,0x97,0x18,0xe7,0xc3,0x25,0x37,0x41,0x08,0x32,0xb3,0x8e,0xaf, +0xd6,0x7e,0x39,0xf8,0x99,0xbd,0xc7,0xc2,0x7d,0x12,0x0b,0x5e,0x15,0x2a,0x84,0x60,0x88,0x2d,0x69,0xea, +0x7b,0xdc,0xdd,0xa3,0x0c,0x8b,0xc4,0x7c,0xf5,0x17,0xa8,0x29,0xdb,0x37,0x0e,0x9f,0x28,0xc2,0x2b,0x29, +0x43,0x38,0x44,0x8c,0xb5,0xdf,0x55,0x0c,0x91,0xc1,0xb5,0x15,0x40,0x85,0xc2,0x07,0x3b,0x1c,0x00,0x0b, +0xb5,0x64,0x38,0x8c,0x85,0x7e,0xf2,0xd9,0x3c,0xa3,0x18,0x7f,0xe2,0x9b,0x3a,0xf1,0x31,0x1e,0x1f,0xc2, +0xef,0xb8,0x6c,0xc9,0x3e,0x50,0x24,0x48,0x09,0xd3,0xcd,0x52,0x71,0x4b,0x58,0xa9,0x65,0x6e,0x04,0xe3, +0xdb,0xfa,0x94,0x6e,0x4d,0x03,0xef,0x13,0x06,0x07,0xd7,0x12,0x73,0x4e,0xcc,0x8d,0xc4,0x92,0x13,0x4b, +0x5c,0x2f,0x30,0xbd,0x75,0x69,0x5b,0x49,0x91,0xc5,0x29,0xb6,0x99,0x26,0x91,0xd4,0x85,0xa8,0x9a,0xb1, +0x0f,0xfa,0x81,0x8b,0xf2,0xb2,0xa0,0xa0,0x3d,0xcc,0x88,0xe3,0x02,0xab,0x27,0x17,0x94,0x0e,0xeb,0xb8, +0xe2,0xd6,0x61,0x10,0x8c,0x01,0x92,0x63,0x1b,0xfb,0xf5,0xb6,0x8e,0x32,0xe1,0xb9,0x08,0x01,0xfc,0x6b, +0x67,0x39,0xcb,0xe4,0x16,0x6a,0x21,0xce,0x89,0x09,0x1a,0x28,0xc9,0xda,0x7a,0x3f,0xd0,0x24,0x09,0x81, +0x7e,0x33,0x57,0xbe,0xac,0x30,0x8c,0x40,0xc5,0xf0,0xf7,0x68,0x9e,0x61,0x14,0x58,0xc3,0x88,0xa6,0x32, +0x18,0x16,0xbf,0xa5,0xc9,0xb0,0xf8,0x64,0xa3,0xe1,0x40,0x09,0x46,0xa0,0x61,0x21,0xff,0x80,0x5f,0x78, +0xd5,0xe8,0x05,0xcc,0xcb,0x7f,0x4f,0x4e,0xf2,0xd0,0xf5,0x08,0x6c,0xbf,0x8d,0x3e,0x93,0x9b,0x64,0xc4, +0xc0,0x2e,0x2c,0xd0,0x94,0xaf,0x2e,0x67,0xac,0x18,0x79,0x62,0x2a,0xd0,0xb8,0x77,0xa4,0x7e,0x0d,0xca, +0xee,0xd5,0x2c,0x39,0xa3,0x27,0x39,0xbc,0xf1,0xf4,0x7f,0xd4,0xec,0xd1,0xd6,0xcc,0x80,0x55,0xf4,0xcc, +0x06,0x1b,0x80,0xee,0xe5,0xd5,0x70,0xb2,0x16,0x58,0xae,0x78,0xd0,0xc0,0xe8,0x0d,0x76,0x88,0x78,0xe5, +0xaa,0x54,0xe5,0xd1,0x88,0xad,0x56,0x6c,0x45,0x6a,0x4d,0x58,0x5c,0x29,0x3d,0x0b,0x63,0xab,0x0e,0xc2, +0x75,0xe6,0x35,0x40,0xa5,0x5d,0x4d,0x70,0x0d,0x86,0x8d,0x3d,0xb2,0x68,0xec,0xf7,0x7a,0xfc,0x5e,0x2e, +0xe5,0xd4,0x6c,0xab,0x6b,0x29,0x95,0x09,0x4b,0x31,0x07,0x60,0x47,0x13,0xb6,0x3a,0x4a,0x7c,0xd0,0x05, +0xb3,0x4a,0x14,0x2e,0xec,0xe5,0xcc,0x02,0x3c,0x71,0x2c,0x40,0x65,0xb6,0x66,0xc3,0x8a,0x0c,0x03,0x1c, +0xa5,0x5d,0x1d,0xd2,0xf8,0xb7,0xc0,0xd1,0xac,0xc0,0x80,0x9c,0x45,0x9d,0x33,0x29,0xad,0x32,0x20,0xa5, +0x5d,0x80,0x01,0x2d,0x94,0xf0,0x2d,0x50,0x5d,0xe1,0xbf,0xf6,0xb2,0x5c,0x69,0xfa,0xab,0x59,0xdc,0x72, +0x14,0xd1,0x5a,0xe8,0x50,0xd0,0x72,0x77,0x23,0x98,0x63,0xc0,0x4b,0x13,0x90,0x0e,0xfb,0xc8,0xb3,0x4b, +0xb1,0xa5,0x93,0xbb,0x84,0x34,0xb4,0xa9,0x51,0x94,0x92,0xdd,0x65,0x84,0xc1,0x88,0x5d,0x46,0xb7,0x6c, +0xe1,0x79,0xab,0x19,0xc3,0xe8,0x0f,0x98,0xba,0x89,0x94,0x35,0x87,0xf8,0xfc,0xab,0xcd,0x1d,0x4a,0x36, +0x40,0x81,0x47,0x83,0x65,0x6a,0x42,0x9a,0x5c,0x9a,0xab,0xe6,0x0e,0x5b,0xec,0x98,0xc5,0xea,0xde,0x1c, +0xad,0xd1,0xb3,0x4c,0xf2,0x35,0xbb,0x9e,0xda,0x40,0x6b,0xa0,0x5d,0xee,0x6e,0xdd,0x71,0x49,0x65,0x0b, +0x86,0x1a,0xee,0x56,0x05,0xd2,0xdd,0x48,0xe5,0xa8,0x82,0xf5,0xcf,0xcd,0x55,0x09,0x4c,0xac,0x5b,0xcf, +0xd8,0x34,0xa9,0x16,0xfa,0xbc,0xfa,0x15,0x4a,0x53,0xed,0xad,0xd5,0xc8,0x0a,0xb1,0x0d,0xea,0xa0,0xea, +0x3e,0xda,0xbf,0x09,0xb4,0xdb,0x6a,0xad,0x12,0x7a,0x45,0xbe,0xad,0x8e,0xed,0x5a,0x1d,0x13,0x15,0x06, +0x51,0x9f,0x29,0xf2,0xdd,0xb3,0xe2,0xa5,0x56,0xc0,0x4a,0x8f,0x31,0x3a,0xb0,0x87,0xf4,0x1c,0x20,0x5b, +0x6a,0xbb,0x9b,0x90,0x0c,0xd1,0xc6,0x86,0xf3,0x00,0x75,0xb8,0xcf,0xac,0x8d,0x64,0x90,0x90,0xe3,0xee, +0xe3,0x13,0x96,0xf4,0x0d,0x39,0x38,0xf4,0xf7,0x5d,0x61,0x16,0x46,0xcf,0x62,0x69,0x74,0x99,0x4c,0x23, +0x58,0x17,0x14,0xa7,0x6d,0x0f,0xa6,0x68,0x49,0x12,0x0c,0xf6,0xd7,0xd9,0x5d,0x46,0x14,0xed,0xb6,0xc6, +0xc2,0x24,0xca,0x0e,0x28,0xb4,0x62,0x86,0x07,0x49,0xb8,0xd5,0x3a,0x9b,0xe5,0x19,0x4c,0x8a,0xe3,0xb5, +0x4f,0x5b,0x27,0xad,0xe3,0x4f,0x57,0xdd,0x93,0xb6,0xbf,0x25,0x03,0x59,0x7c,0xfb,0xb6,0x85,0x86,0x5f, +0x9f,0x93,0x72,0x05,0x40,0x86,0x8e,0x10,0xfd,0xd6,0x68,0xd0,0xdd,0x94,0x6f,0x7e,0xa3,0x66,0xe8,0x8b, +0x22,0x89,0xfd,0x35,0x47,0x96,0x16,0x9c,0x02,0x5d,0x4a,0x00,0x69,0x49,0x34,0xba,0xd3,0xdb,0xd8,0x80, +0x52,0xd9,0x3f,0x93,0xf9,0x5c,0xb4,0x32,0x5a,0xcb,0x2f,0x07,0xb2,0x06,0x7f,0xa4,0xd5,0x01,0x9c,0xc4, +0xb5,0x20,0xd9,0x00,0xe3,0x6c,0xb0,0x84,0x87,0x91,0x82,0x84,0x6d,0x4c,0xe8,0x79,0x37,0xa8,0x9a,0x61, +0x52,0x0d,0x05,0x18,0x22,0x45,0x94,0x47,0x0e,0x24,0xd1,0xe8,0x6f,0xe6,0x1e,0xab,0x2c,0x0a,0x40,0x64, +0x66,0x76,0x45,0x8b,0x61,0xd2,0x55,0x8f,0xa0,0x16,0x04,0x13,0xb5,0x56,0x6d,0xb7,0x88,0xce,0xa3,0x3c, +0x81,0x2a,0x29,0x00,0x87,0xee,0x47,0x5c,0xf2,0x68,0x71,0x2b,0x51,0xe6,0x72,0x41,0x11,0x44,0x6c,0xc9, +0x89,0x11,0x18,0xe0,0x96,0x45,0x3e,0x97,0xbf,0xd7,0xc2,0x03,0x28,0x9f,0xda,0xc8,0x59,0x54,0xb7,0xe7, +0xc2,0x87,0x4c,0xb2,0x7f,0x7a,0x7f,0x95,0x62,0x48,0x9b,0x38,0x2f,0xbf,0x32,0x17,0x82,0x11,0x27,0x49, +0x42,0x5a,0xa0,0xb0,0x82,0x3c,0xc9,0xa7,0x27,0x28,0xa8,0x55,0xed,0x10,0x23,0xcc,0x41,0x23,0xf1,0xd7, +0x3b,0x0a,0x18,0x48,0x31,0x34,0x29,0x0d,0xa3,0x54,0xee,0x8b,0x3b,0x2a,0xb2,0xa4,0xcf,0x93,0x4b,0x64, +0x52,0x28,0x0f,0xb8,0x04,0x60,0xac,0xd8,0x2d,0xa5,0x4c,0x9b,0x24,0x05,0x7a,0x4a,0x40,0xbb,0xcb,0x43, +0x5a,0x76,0xd4,0x61,0xce,0x73,0x68,0x73,0xc3,0x7a,0x52,0x6c,0x13,0x2d,0x3c,0x8a,0xef,0xed,0x00,0x74, +0x04,0x12,0xa2,0x3a,0x75,0x7d,0xe6,0x8d,0x0d,0xf6,0x24,0x4c,0x72,0x0f,0xe8,0x3d,0x9e,0x38,0x90,0x89, +0x37,0x2e,0xcc,0xf6,0x04,0x1a,0x96,0x56,0x74,0x63,0xa9,0x33,0x09,0x21,0x0b,0x22,0xe3,0x06,0xb7,0x97, +0x0f,0xca,0xbf,0x37,0x8e,0x48,0x85,0x75,0x52,0x3c,0xe7,0xce,0x4f,0x9a,0x90,0x25,0x7a,0x27,0x45,0xcb, +0x1b,0x08,0x32,0x4d,0x3c,0xab,0x0e,0x17,0xb9,0x57,0xd6,0x86,0x05,0x38,0x3e,0xca,0xda,0x19,0x1a,0xbf, +0x91,0x74,0x93,0x88,0x2d,0xb1,0x27,0x9b,0xb8,0xb6,0xf7,0x68,0x6d,0x6b,0x57,0x76,0x44,0xe5,0x85,0x55, +0x45,0x0b,0xe5,0xfd,0x5f,0x78,0x63,0x26,0xf5,0x6f,0x94,0x80,0xec,0x90,0x46,0x91,0x55,0x3d,0xa5,0xbd, +0x3f,0x3f,0x97,0xb5,0xef,0x7e,0x4a,0xd7,0xd6,0x76,0x50,0x0a,0xb4,0x2b,0x20,0x4c,0x3d,0xf2,0xb6,0x07, +0xdb,0x26,0xe6,0x7e,0x4a,0x77,0xb6,0xa8,0x70,0x15,0xcf,0xe5,0x28,0x6b,0x99,0x68,0x55,0x48,0x1c,0x42, +0x91,0xd0,0xc0,0xa8,0xd2,0x1e,0x61,0xf5,0x10,0x09,0x9b,0xde,0x05,0xdf,0xb4,0x19,0xdd,0xdf,0x8c,0x6c, +0xfa,0x8c,0x1c,0xa0,0x13,0x06,0xda,0x70,0x24,0x1f,0x50,0xbc,0x49,0x63,0xca,0x00,0xef,0xd3,0x47,0x3b, +0x5b,0x46,0x3c,0x9b,0x15,0xfd,0xbf,0x6b,0x9d,0xe7,0xe7,0x77,0xae,0x34,0xd5,0x68,0x9a,0xae,0x22,0x29, +0xaf,0x1a,0xbb,0x6d,0x41,0x2e,0xce,0x54,0xe4,0xbc,0x63,0xe3,0xa2,0x14,0xb1,0xba,0xab,0x2b,0x26,0x90, +0xdb,0xaa,0x67,0x58,0xa3,0xee,0x03,0xe4,0x32,0x56,0x56,0x4d,0x10,0x77,0xad,0x79,0xbd,0x67,0xae,0x4f, +0xd7,0xf6,0xa6,0xaf,0x4f,0x74,0x36,0xab,0xb6,0x7f,0x3a,0x1c,0x15,0xe7,0x78,0xac,0x55,0x6c,0x2e,0x32, +0x63,0x06,0x5b,0x2b,0xf4,0x44,0x4a,0x8d,0x96,0x29,0xb3,0x31,0xd8,0x3c,0xf0,0x34,0x1c,0x0f,0x5c,0x47, +0xed,0x14,0x7d,0x6c,0xc8,0xfd,0x52,0x8f,0x1f,0x55,0x05,0xef,0x66,0x9f,0x77,0x74,0x67,0x06,0x96,0x7c, +0x19,0xcd,0x47,0xb1,0xf8,0x21,0x83,0xa0,0xd9,0x7b,0x9a,0xbd,0x2b,0xd6,0xf9,0x11,0xf2,0x12,0x8f,0x27, +0x97,0x34,0xe1,0x32,0xa7,0x16,0x2b,0x37,0x89,0x69,0x55,0x70,0x9e,0x81,0x29,0x3e,0x14,0x73,0xe0,0x03, +0xc8,0x6f,0x6b,0xcf,0x72,0xfc,0xfa,0x29,0x82,0x1e,0x74,0x44,0x4c,0x1f,0x7c,0xaa,0xb3,0x37,0x04,0xa3, +0x89,0xd2,0xd5,0x44,0x5a,0x35,0x51,0x6a,0x4d,0xa4,0x66,0x13,0x39,0xab,0x39,0x52,0x1b,0xda,0xe6,0xcf, +0x9e,0x95,0x92,0xb0,0xd8,0x2d,0x47,0xc5,0xa0,0x0c,0x92,0xb6,0xab,0x09,0x7d,0x70,0x65,0x63,0xfa,0xac, +0x7b,0x4b,0x61,0x12,0xac,0xc1,0xa5,0xf6,0xaf,0x09,0x7a,0x90,0xdc,0xa0,0xb0,0xb6,0x6a,0xa6,0xb6,0x18, +0x0c,0xe0,0xf6,0xe3,0x1b,0x63,0xda,0x9b,0x99,0x3f,0xa1,0x4e,0xb5,0x39,0x8e,0xe9,0xdb,0x0c,0xf8,0xcc, +0xe7,0xd9,0x95,0x36,0x35,0x12,0x19,0xb5,0x1c,0xdf,0xab,0x01,0x38,0xc6,0x93,0xfc,0x39,0x73,0x18,0x78, +0x8d,0xe1,0x43,0x4f,0x9d,0x6a,0x2d,0xe5,0x08,0xb6,0x0c,0x45,0xc4,0x9b,0x6f,0xdf,0x92,0xae,0x94,0x1f, +0x13,0x1f,0x20,0xee,0x36,0xb0,0x8e,0x96,0xb0,0xa1,0x8a,0x28,0xe5,0x00,0x88,0x81,0x3a,0x99,0x89,0x9e, +0x7f,0xdd,0x47,0x9e,0x1f,0x08,0x1e,0xea,0x34,0x83,0xa5,0x95,0x47,0x53,0x0a,0xa9,0x25,0xcf,0xd7,0xb0, +0x84,0x54,0xce,0xc6,0x28,0x28,0xec,0x72,0x57,0x13,0xcc,0x58,0xbd,0xf7,0xaa,0x29,0xf2,0xed,0x5b,0xcf, +0xee,0xfe,0x73,0xa8,0xfd,0x6d,0x76,0xa9,0x4d,0x60,0x9d,0xf1,0x1a,0x72,0x04,0xd0,0x1a,0x86,0xa1,0x8e, +0xa3,0xec,0x7d,0x11,0xb6,0xca,0x76,0x1d,0xb3,0x8e,0xa3,0x0b,0xfe,0x16,0x73,0x1c,0x38,0xb3,0x0e,0x93, +0x49,0x1c,0x14,0xc8,0x00,0xb7,0x8a,0x10,0xa6,0x58,0xb1,0xdb,0xa7,0x9f,0x7d,0x9c,0xd1,0xc5,0xa6,0x05, +0x58,0x1b,0x5b,0x8a,0x6e,0x93,0xde,0x98,0xc7,0x9d,0x3e,0xec,0xa9,0xb1,0xc9,0x45,0x93,0x64,0x59,0xdc, +0x98,0x07,0x29,0x43,0x73,0xc0,0x0e,0xda,0x05,0x07,0x1d,0xad,0x42,0x1b,0x82,0x22,0xcf,0x74,0x5a,0xfd, +0x4e,0xe1,0x5b,0xc8,0xdd,0xd4,0x26,0x17,0x52,0xf7,0x85,0xee,0x53,0xaf,0x22,0xee,0x9d,0x48,0x8b,0xde, +0x86,0x9b,0x26,0x1b,0x93,0x15,0x10,0x9a,0x62,0x8c,0xba,0xd6,0xdd,0xe8,0xac,0xf1,0x35,0xe6,0x83,0x63, +0xba,0x1b,0x76,0x9f,0xa8,0x2b,0xb8,0x2f,0xa3,0xc9,0x3b,0x20,0xd7,0x9b,0x72,0xfc,0xaa,0xb8,0x73,0x5a, +0x73,0xcc,0x56,0x85,0xb5,0x88,0x17,0x5d,0x8f,0x29,0x21,0xe8,0xce,0x57,0x52,0xc9,0x85,0x8a,0xcf,0x96, +0x6a,0xbc,0xb1,0x2b,0xbe,0xe2,0xb8,0x27,0xa2,0x8c,0x35,0x2c,0xe2,0x2d,0xb5,0x89,0x7d,0x6c,0x2c,0xa7, +0x32,0x6a,0xca,0xf7,0x7a,0xb0,0x56,0x63,0xac,0x46,0xd6,0x71,0x8f,0x3e,0xd6,0xd8,0x17,0x83,0x7e,0x29, +0xe0,0x24,0xe1,0xdc,0xcf,0x2a,0xc0,0x66,0xca,0xcd,0x65,0xe2,0xb0,0x91,0x0e,0x23,0x73,0xec,0xdb,0xdb, +0x83,0x9e,0xb1,0x7c,0x44,0x58,0x3c,0xb1,0x84,0x30,0x30,0x06,0xd5,0x2f,0xc2,0x47,0x58,0x0b,0x4a,0x01, +0xf3,0xa2,0x8a,0x1d,0x8b,0xca,0x5d,0x5e,0x2c,0x31,0x55,0xde,0x58,0x66,0x8d,0x8d,0xba,0xca,0xd0,0xc2, +0x8b,0x3b,0xd6,0x9a,0xb3,0x2a,0xb0,0xc6,0x4c,0xbf,0x8a,0xd5,0x86,0x0d,0xc5,0x11,0x6a,0xe8,0x38,0x7a, +0x64,0xec,0x94,0x95,0x03,0x42,0xaf,0x28,0x52,0x33,0xee,0x94,0x32,0x36,0x62,0x15,0x5f,0x89,0x8c,0x20, +0xaa,0xd8,0x42,0x8e,0x72,0xbf,0x2c,0x1c,0xa5,0x0c,0xc1,0x0c,0xc7,0xa5,0x69,0x79,0x17,0x78,0x1c,0xe1, +0x90,0xaf,0x95,0x78,0x54,0xe0,0x2f,0xa1,0xa4,0xdd,0x00,0xbb,0x5c,0x30,0x24,0xa9,0xb5,0x63,0xe8,0xa7, +0x6a,0x3e,0xd4,0xe5,0x69,0x0a,0x31,0xb1,0x06,0x5a,0x32,0x86,0xa3,0x36,0xe3,0xb4,0xba,0xd1,0x91,0x13, +0xd7,0x5e,0x70,0x4c,0xc7,0x86,0x4e,0xaa,0x33,0xf4,0xb6,0x5e,0xde,0xbd,0x8f,0x2b,0x7a,0x68,0x5f,0x2f, +0xcd,0xdb,0xa7,0x63,0x94,0x69,0xab,0x6d,0x64,0x4e,0x54,0xcf,0x35,0x66,0xc8,0xbc,0x58,0x55,0x67,0x89, +0x98,0x7d,0xaa,0x08,0xcf,0xfc,0xce,0xe3,0x1b,0xfb,0x66,0xa2,0x9d,0x4d,0x31,0x65,0x27,0xa1,0xab,0x64, +0xbb,0x1f,0x98,0x6c,0xf1,0xc6,0xc6,0xf7,0xb6,0x7c,0x65,0xe7,0x27,0xd4,0x77,0xed,0x84,0x3f,0xca,0x6b, +0xba,0x9c,0xfa,0xa1,0xc0,0xe6,0x76,0x86,0xab,0x93,0x68,0xb3,0x82,0xee,0xd9,0xd5,0x26,0x51,0xe3,0x17, +0x18,0x6b,0xfb,0x64,0x6b,0x3c,0x5e,0xad,0x4d,0xe6,0x01,0x67,0xad,0xdd,0x94,0xdc,0x04,0x1d,0x8d,0xf5, +0x6e,0x3b,0x96,0x6b,0x75,0x05,0xcd,0xcc,0xda,0xdd,0x77,0x66,0xfb,0x58,0xaf,0x36,0x03,0x37,0xd3,0x58, +0x3f,0xb4,0xd1,0xcd,0x66,0xed,0x44,0x54,0xba,0xe9,0x75,0x1e,0xf3,0x01,0x9c,0xe4,0x7a,0x75,0xb4,0x6e, +0x6c,0x90,0xbb,0xe8,0x68,0x5c,0xb4,0x1c,0x4c,0x41,0xa7,0xf4,0x77,0xb9,0x93,0x90,0x73,0x34,0xc3,0x7d, +0x20,0x9b,0x4f,0x28,0x52,0x92,0x3a,0x9b,0x31,0x6e,0xa0,0x20,0xb4,0xe4,0x10,0x89,0x77,0x71,0x53,0xe2, +0x97,0x85,0x9b,0x0e,0xff,0xf2,0x3e,0x6b,0x28,0xbe,0x40,0x87,0x11,0xa8,0x75,0xb5,0xde,0xd7,0x05,0x82, +0xe1,0xb5,0x3c,0x1a,0x28,0x28,0xfc,0xdd,0xcc,0xfa,0x6b,0xde,0x00,0x1c,0x0e,0x03,0x8c,0x19,0x32,0xf0, +0x34,0xd1,0x83,0x1c,0x75,0x2f,0x30,0x65,0x4d,0x06,0x90,0xaa,0xcb,0x0b,0x74,0x11,0x8c,0x01,0xf3,0x33, +0x67,0x48,0x08,0x21,0x54,0x72,0x80,0x9c,0x9f,0xa3,0x10,0x5f,0x09,0x1e,0x0c,0x08,0xee,0x84,0xca,0xaf, +0xe4,0x07,0x0e,0x28,0xce,0x95,0xb0,0x95,0x40,0xc0,0x01,0x7a,0xc0,0x11,0xfa,0x8c,0x29,0x34,0x78,0x12, +0xe8,0x97,0xba,0x41,0x5f,0x7e,0xf3,0x4e,0x30,0x78,0x1c,0x58,0xdb,0x1f,0x14,0x90,0xb2,0x55,0x68,0xa2, +0xd2,0x77,0xc3,0x17,0x2f,0xe1,0xb3,0x41,0xd7,0x17,0x80,0x71,0xc5,0x28,0xdc,0xdf,0xeb,0xaa,0x71,0xbc, +0xad,0x26,0xef,0x0f,0xa5,0x74,0x30,0x8c,0x03,0xba,0xc8,0xeb,0x30,0xd6,0x91,0x80,0x77,0x73,0xb8,0x99, +0x07,0xb3,0x20,0x0b,0xf2,0x60,0x1e,0x4c,0x82,0xb3,0x60,0x19,0x2c,0x84,0x89,0x62,0x7f,0xa7,0x1e,0x9a, +0x2d,0x65,0xa9,0x71,0x15,0x85,0xb9,0xe7,0x0f,0x8e,0xd1,0xa3,0x12,0x4b,0x0e,0x5a,0x13,0xf9,0xe3,0x2c, +0x4c,0x30,0x4a,0xe9,0xe8,0x4c,0x09,0x8d,0x45,0xfc,0x3a,0x7f,0x34,0x19,0x54,0xb3,0xb2,0x12,0x29,0x2f, +0xd5,0xeb,0x56,0x89,0x46,0x1c,0x03,0xa5,0xf7,0x84,0x36,0x23,0xbd,0x60,0x1e,0x2e,0xa5,0x62,0x5a,0xbe, +0x33,0x1f,0xe6,0xed,0xb6,0x5f,0x86,0x4b,0xf4,0xe6,0x14,0xb1,0x85,0x18,0x49,0xa9,0x0b,0x19,0xf9,0x36, +0x1a,0xb5,0x66,0x84,0x41,0x90,0x85,0xdb,0x3b,0xb0,0x9e,0x4c,0xfc,0x93,0xa0,0x4f,0x78,0x0b,0x64,0x17, +0x61,0x74,0x3c,0x3b,0x81,0xbd,0x49,0x72,0x27,0x51,0x90,0xa1,0x43,0xca,0xf8,0x6a,0x0d,0x5d,0xfc,0x53, +0x4f,0x74,0xd6,0xf6,0x46,0x50,0x56,0x23,0x76,0xe3,0x33,0x0c,0x3f,0xed,0x50,0xfc,0xb5,0xf0,0x9a,0xce, +0x3f,0x43,0x60,0x1f,0x5c,0x9b,0x4b,0xac,0x5f,0x5b,0x4f,0xa2,0x91,0x15,0x8b,0x49,0x40,0x34,0xaf,0x24, +0x01,0xd0,0xb8,0x8c,0x8c,0xfc,0xfa,0x1a,0x12,0xd9,0xab,0x16,0x90,0x01,0xb2,0x62,0xf5,0x18,0x70,0x72, +0xe9,0x54,0x33,0xbf,0x22,0xa8,0x27,0x0f,0x38,0x5d,0xfb,0x33,0x21,0xf5,0x19,0xa5,0x3d,0x51,0x7f,0x68, +0x5b,0x37,0xdd,0x33,0xc3,0x18,0xd9,0xe6,0x41,0xf6,0x12,0x60,0x09,0xf7,0xd0,0x11,0xbe,0x78,0xb7,0xe7, +0xb3,0x06,0x3f,0xbe,0xd2,0xcd,0x92,0x73,0x58,0x2a,0x61,0x22,0xe7,0x47,0xc5,0xd5,0x45,0xa1,0x0c,0x76, +0xaf,0xee,0x6d,0xc5,0xa8,0x20,0x8f,0xef,0xe4,0xed,0xbd,0x5b,0x66,0xbf,0x60,0xb4,0x1a,0x7e,0x83,0x6b, +0x17,0x42,0xb7,0x1f,0xe6,0x5f,0x31,0x24,0x7d,0x43,0xd6,0xf9,0x97,0xc1,0x1d,0xc5,0x0f,0x69,0x3a,0x25, +0xdb,0x19,0xae,0xd2,0x56,0x11,0xae,0xcd,0x84,0xce,0x0a,0x2d,0x04,0xef,0xd7,0xbf,0x7e,0xdc,0xff,0x00, +0x2c,0xa1,0x08,0xf0,0x45,0x6a,0x28,0x32,0xe4,0x64,0xf2,0xed,0x1b,0xcf,0xca,0x44,0x2a,0xb3,0x60,0xa8, +0x6d,0x3b,0x98,0x7b,0x81,0xe1,0x1b,0xc2,0x02,0x67,0x2c,0x2e,0x84,0xb2,0xab,0x1b,0x59,0xd1,0x1d,0x01, +0x6e,0x29,0x2b,0x1b,0x45,0x1e,0x55,0x6b,0x36,0x2c,0xbe,0x7d,0xab,0xb7,0xe2,0x33,0x15,0xc8,0x2e,0xa0, +0x76,0x03,0x4e,0x8e,0x0b,0x11,0xe9,0x78,0x1e,0xe2,0x6f,0x41,0x7e,0x0c,0x4f,0x8a,0x1d,0xc2,0xf8,0x1c, +0x89,0x3c,0x48,0xf3,0x70,0x8e,0x47,0xde,0xca,0xda,0x3c,0x8a,0xc6,0x19,0x9d,0x6c,0x6c,0x64,0xd5,0x28, +0xab,0xfa,0x65,0xee,0x6f,0x6e,0x65,0xca,0xf5,0x68,0x35,0x4f,0xef,0x5d,0x33,0x53,0x0d,0x01,0x84,0x8c, +0xb5,0x80,0xfe,0x1b,0x78,0xeb,0x19,0x64,0x47,0x37,0x64,0xcd,0xe4,0x86,0xb2,0x55,0x3b,0x7a,0x2a,0x06, +0x33,0x8a,0x59,0x41,0xb9,0xe5,0xbd,0x25,0x7d,0x3d,0x61,0xb2,0xbd,0x86,0xda,0x03,0x68,0x8f,0x50,0xb4, +0xbd,0xca,0x57,0x7e,0xfc,0x25,0x29,0x4a,0x74,0x63,0x2a,0x5e,0x32,0xed,0xf5,0xe5,0x51,0x5c,0xce,0xfc, +0x66,0x28,0x4d,0x48,0x1d,0x6b,0x70,0x58,0x6a,0x5c,0x09,0xfa,0x89,0x8e,0x28,0xd4,0xed,0x17,0x2f,0x40, +0x56,0x28,0x89,0xaf,0x70,0x1b,0x9c,0x27,0x97,0xc4,0x71,0xe0,0xe3,0x37,0xbd,0xe5,0xe3,0x87,0x74,0x21, +0x8d,0xbf,0x31,0x1a,0x3b,0xcb,0x9c,0xe5,0xd7,0x4b,0xae,0x0a,0xbe,0x50,0x69,0x2b,0xce,0x2f,0xe3,0x8f, +0xd8,0x32,0x45,0xf5,0x09,0x80,0x43,0x16,0x9b,0x10,0xee,0x7f,0x68,0xf6,0x39,0xf0,0x16,0xd9,0x02,0x3d, +0x30,0xe0,0xf5,0xfa,0xb9,0xce,0x1c,0xfd,0x63,0x09,0xed,0x94,0x5f,0x07,0xfd,0x40,0x3a,0x6f,0xa0,0x2a, +0x72,0x11,0x22,0x7b,0xb0,0x1d,0x5c,0x64,0xe3,0x84,0x39,0x22,0xfe,0xc5,0x01,0x7a,0x31,0x4e,0x19,0x9a, +0xbc,0xfd,0x25,0xfe,0x4a,0x3e,0x9b,0xb1,0x1f,0xa8,0xdd,0xfc,0x9e,0xc9,0x8d,0xe0,0x45,0x1a,0x2d,0xc8, +0x8d,0x3f,0xfc,0x3d,0xca,0xe6,0x71,0x8e,0x2b,0x65,0xd0,0xed,0x3d,0x81,0xfb,0x6a,0xf7,0xd9,0x2f,0xaf, +0x4e,0x0f,0x5e,0xfc,0xbc,0x77,0xf4,0xe6,0x6f,0x2f,0x4e,0x3f,0xec,0xbd,0x7a,0x71,0xfa,0xfe,0xe0,0xcd, +0xab,0x37,0xef,0x50,0xa9,0xad,0xec,0x8a,0xdf,0x7c,0x2d,0xe9,0x05,0x14,0xea,0x1b,0x4b,0x91,0x2d,0xe4, +0x51,0x76,0x58,0xe6,0xba,0x50,0xbf,0x94,0xfb,0x9b,0xe7,0x0d,0x59,0x3d,0x03,0x75,0xd7,0x30,0x66,0x16, +0x39,0x3e,0x19,0x40,0xc6,0x77,0xde,0x90,0xbe,0x91,0xf4,0x03,0xde,0x44,0xb4,0x40,0x2b,0xdb,0x4f,0x9e, +0x6c,0xc6,0xdd,0x1c,0x37,0x30,0x15,0x27,0xc5,0x1f,0xf6,0x43,0x75,0x98,0xe2,0x6d,0x0c,0x43,0xc9,0xb5, +0x13,0xd6,0x0b,0x2e,0xea,0xa5,0xa7,0xf5,0xd2,0x5a,0x1c,0xe1,0x82,0x4a,0x17,0xbe,0xf0,0x47,0x5c,0x2b, +0x3d,0xae,0x97,0x8e,0xaa,0xd2,0x11,0x95,0x46,0xa7,0x37,0xed,0x30,0x81,0x49,0x1a,0x0d,0xc7,0x79,0x1c, +0x7d,0x1e,0xca,0x2e,0x46,0x76,0x1f,0xa3,0xff,0xe0,0x4e,0x8a,0xf3,0xa0,0x56,0x3a,0xaa,0x97,0xce,0xaa, +0xd2,0x19,0x95,0xce,0x2a,0x12,0xb5,0x33,0x9d,0x48,0x68,0x1a,0x8c,0x34,0x82,0xbf,0x2d,0xaf,0xed,0xa0, +0x0a,0x79,0x0d,0x71,0xf4,0xd7,0x9d,0x3e,0x86,0x74,0xdf,0xb3,0x1a,0xf8,0x41,0x6b,0x81,0xdd,0x8e,0xe4, +0x6d,0xef,0x87,0x40,0x7e,0x4c,0xf5,0x8f,0x31,0x7c,0xd4,0x2a,0x88,0x64,0x05,0xd1,0xef,0x85,0x63,0x40, +0x26,0xeb,0x0e,0x5c,0xa3,0x1f,0xf4,0xb6,0xee,0x82,0xad,0xfa,0x88,0x6a,0xa8,0xa3,0x51,0x34,0xd6,0x06, +0x7f,0xa1,0x32,0xe1,0xa3,0x45,0x34,0x5e,0x88,0xbf,0x97,0x36,0x12,0x00,0xfc,0x83,0x56,0x8a,0xeb,0x9e, +0xe9,0x0d,0x15,0xfa,0xc7,0xa5,0xab,0xd5,0x48,0x56,0x10,0xad,0x6a,0xd7,0x4d,0x04,0x2c,0xf5,0x83,0x5e, +0xfe,0x2e,0x18,0xac,0x24,0xc2,0x58,0xd4,0x86,0xe3,0x7f,0x27,0x02,0x8c,0x7f,0xd0,0x4a,0x3c,0x84,0x00, +0x63,0x49,0x00,0x1a,0xc5,0x7b,0x75,0x7e,0xac,0x3a,0x3f,0x7e,0x60,0xe7,0xa5,0xb2,0x4a,0x8e,0x1b,0x33, +0xf0,0x85,0x47,0x19,0x9d,0x7b,0x75,0x45,0x73,0xb8,0x6f,0x25,0xe1,0x75,0x34,0xe8,0xdf,0x50,0x00,0x42, +0xba,0x87,0xc4,0x5d,0x8a,0x1a,0xdc,0xda,0xfa,0x3f,0xdf,0x1d,0xf7,0x3a,0x7f,0x8e,0x3a,0xe7,0x27,0xd7, +0x3f,0xde,0x7c,0xbf,0x95,0x90,0xba,0x54,0x3d,0xef,0x31,0xe5,0xd1,0x9b,0x72,0x52,0xbc,0x8b,0xde,0xb5, +0x92,0x6e,0x1e,0xf6,0x7f,0xda,0xd4,0xbc,0x6a,0x73,0xfc,0xd1,0x56,0x1f,0xee,0x3b,0x01,0xec,0x0f,0x5b, +0x18,0xa1,0xac,0xf2,0xc4,0xae,0x15,0x9c,0xba,0x0b,0x6e,0xdf,0x5a,0x70,0xec,0x2e,0xf8,0x63,0x63,0xc1, +0x27,0xe8,0x16,0x41,0x6e,0x51,0xb2,0x96,0xc8,0x5d,0xcb,0x63,0x67,0x2d,0x8a,0x47,0xb2,0xc9,0x56,0xa3, +0x5a,0x23,0xc0,0xdd,0x49,0xd7,0x7b,0x28,0xe9,0x6e,0xa7,0x79,0x03,0xe9,0x9a,0x69,0xfe,0xf8,0x1e,0xa4, +0x73,0x0f,0x40,0x23,0xe9,0xaa,0x59,0xf5,0xb4,0x81,0x76,0x15,0xc4,0x9f,0x5c,0xc4,0x73,0x11,0x60,0xfb, +0x56,0xca,0xb9,0xf0,0xbe,0xad,0xd4,0xd8,0x51,0xea,0x49,0x63,0xa9,0x3f,0xbb,0x69,0x56,0xaf,0xe2,0x27, +0x67,0x15,0xb7,0xcf,0xb5,0x26,0x7a,0xdd,0x97,0x5c,0xbd,0x07,0x91,0x6b,0xfb,0x41,0xe4,0x7a,0xdc,0x58, +0xea,0x4f,0x77,0x25,0xd7,0xd3,0xfb,0x91,0x0b,0x0f,0xd5,0x4f,0x05,0x86,0xa3,0x2d,0x36,0x5b,0x48,0x9a, +0x4f,0xdd,0x93,0xf6,0x0f,0xdf,0x8e,0x7b,0xfd,0x93,0xd1,0xa7,0xee,0x08,0x53,0x4e,0x36,0x7d,0xc8,0x0c, +0xfe,0xf5,0x00,0x9f,0x7c,0xf7,0x88,0x01,0x8e,0x7f,0x10,0x8a,0x8c,0x01,0x4d,0x89,0x3c,0xb4,0xd0,0x88, +0x20,0x87,0xbc,0xfa,0x57,0xb1,0xa3,0x35,0x5d,0xd9,0x96,0xe7,0xb7,0xfb,0x81,0x96,0x10,0xe0,0x3b,0xaf, +0xf7,0x03,0xde,0x3f,0xa5,0xd0,0x41,0x79,0x14,0xe8,0x3b,0x67,0xdd,0xcb,0x79,0x16,0x01,0x90,0x8f,0xce, +0x55,0x1c,0x23,0xe7,0x98,0xa3,0xa5,0x63,0xa2,0x34,0x62,0x18,0xd4,0x31,0x0c,0xec,0xec,0x3b,0xa3,0x3c, +0xbd,0x17,0xca,0xd3,0xdb,0x50,0xce,0x47,0x8d,0x48,0xd7,0x71,0xa4,0x5e,0x60,0xa8,0xe0,0x37,0x3a,0xad, +0x07,0x66,0x0d,0x76,0x7e,0xbd,0x90,0x7f,0xf7,0x01,0x1a,0xdf,0xab,0xb7,0xe3,0xd5,0xbd,0xcd,0x7d,0xc7, +0x28,0xfd,0xae,0xe8,0x46,0xf7,0x42,0xd7,0x82,0xb6,0x20,0xaf,0xc5,0x9e,0x11,0x6a,0xeb,0x11,0x79,0xd0, +0x7f,0xaf,0x3d,0x63,0x63,0xc3,0x81,0xe3,0x1f,0xba,0x67,0xb8,0x30,0xf8,0x77,0xdb,0x59,0x9d,0x38,0xfe, +0xb1,0x3b,0xab,0xb1,0x10,0xfe,0xb8,0x1d,0x76,0x76,0xaf,0x15,0x61,0x43,0xc3,0x65,0xed,0xff,0xc7,0x1e, +0x5b,0xdc,0x0b,0xe9,0xa2,0x69,0x19,0xff,0x47,0xec,0xb0,0x97,0xf7,0xea,0xeb,0xe5,0xaa,0xbe,0xfe,0xe7, +0xec,0xaf,0xf2,0xa5,0x19,0xef,0xa4,0xb0,0x5f,0x1d,0x65,0x07,0xd3,0xb1,0x21,0x2a,0x0c,0x72,0xf5,0x88, +0xb0,0x13,0xf6,0xb7,0x9e,0xc2,0x75,0x73,0x37,0x7c,0xb2,0xf5,0x74,0xd4,0x1f,0xc4,0x3b,0xfd,0xad,0x1f, +0x47,0xfd,0xce,0xd3,0xcd,0x56,0xdc,0x81,0x2c,0x18,0x9d,0xdd,0xc7,0x90,0x43,0xdf,0x8f,0xf1,0x1b,0x9d, +0x9e,0x02,0x38,0xe4,0x6d,0x6c,0x40,0xf1,0xee,0x13,0x51,0x0a,0x61,0x62,0xf8,0x85,0xd0,0xa2,0x7c,0xf7, +0x09,0x82,0x47,0x08,0xde,0x7d,0x42,0xd0,0xa2,0x91,0xdd,0x6d,0x2e,0x0d,0x85,0x09,0x70,0x9b,0x1b,0x7a, +0x52,0x15,0x7d,0xc2,0x4d,0x65,0x61,0x2b,0x69,0xb7,0xfa,0x9d,0xc4,0xdf,0x84,0xff,0x43,0x2f,0x37,0xf3, +0x20,0x0d,0x5b,0x45,0x9b,0xd5,0x10,0x55,0xda,0x3c,0x6c,0x45,0x98,0x16,0x55,0x69,0xe2,0x09,0xe5,0x3a, +0x1f,0x64,0xc1,0x74,0x90,0x06,0xe3,0xc1,0xfc,0x06,0x29,0x02,0x5c,0xdf,0x51,0xf6,0xba,0xb8,0x74,0x53, +0x84,0xde,0x47,0x85,0xe0,0xed,0x22,0xfa,0x22,0xf2,0xa0,0x4d,0x4e,0x49,0x24,0x34,0xb4,0x98,0x75,0x52, +0x15,0xb4,0x2a,0xec,0xad,0x87,0xd9,0x68,0xbe,0x95,0x01,0xce,0x09,0x3a,0xfd,0x98,0x8f,0x7a,0x83,0x38, +0x84,0xb4,0xd6,0xd3,0x76,0xab,0xec,0xe4,0xfe,0xd6,0xdc,0xff,0xe1,0xe9,0xa0,0xc4,0xa4,0xed,0x76,0x2b, +0xef,0xc4,0x90,0x32,0xc8,0xf1,0xf3,0x71,0x1b,0xfa,0x5b,0xe2,0x27,0x94,0xdd,0x0a,0x9f,0x02,0xc1,0xb2, +0xe0,0x7a,0x36,0x00,0x5c,0x06,0x45,0x70,0x39,0x88,0x08,0x6d,0xe7,0x9b,0x56,0x8e,0xba,0xdc,0xc2,0x14, +0x65,0xb1,0x84,0xd5,0x28,0x75,0x9a,0x50,0x06,0x01,0x55,0xc0,0x58,0xc1,0xbf,0xcb,0x41,0x3f,0xc8,0xe1, +0xdf,0x14,0xfe,0x8d,0xe1,0x1f,0x4a,0x21,0x18,0xb0,0xd0,0x43,0xa0,0x73,0x1d,0xec,0xa9,0x44,0x2a,0x41, +0xb0,0x20,0x1b,0x26,0xbd,0x78,0xc2,0x5c,0xef,0x05,0xd7,0x88,0x8d,0x94,0xe7,0xfb,0xaa,0x1e,0x21,0xf3, +0x46,0x1b,0x25,0x3e,0x0d,0xf4,0x0a,0x84,0x23,0x10,0x7c,0x62,0x72,0x25,0x87,0xde,0xd5,0xe5,0xc2,0x6b, +0x9b,0x79,0xfc,0x50,0x60,0xc6,0x44,0x0f,0x7b,0x23,0xf8,0x3b,0xf0,0x94,0xae,0x23,0xea,0x40,0xa1,0xba, +0xa2,0x41,0x9f,0xee,0x55,0x32,0x99,0xc6,0x25,0xeb,0x59,0x9a,0x39,0x18,0xd9,0x6e,0x1e,0x7d,0x75,0x65, +0x61,0x55,0x96,0xe6,0x7e,0x7f,0x3d,0xac,0xc3,0xa0,0x59,0xd5,0x1b,0xf8,0x0b,0x84,0x6f,0xcc,0x43,0xaf, +0xa5,0x2c,0x8d,0x8f,0x5b,0x8f,0x34,0xc3,0x03,0x7e,0x31,0xeb,0x08,0x2c,0xbc,0xb5,0x82,0x5e,0xe9,0xa5, +0x47,0xaf,0xc1,0x1a,0x7a,0xc6,0x18,0x7a,0xc2,0x06,0xe1,0x91,0x3f,0xcc,0x0d,0x2b,0xee,0x2e,0x3f,0xa3, +0xaa,0x5e,0x9c,0x52,0x86,0xdf,0xd0,0xc5,0x1c,0xc3,0x13,0x62,0x14,0xcd,0xb8,0xe5,0x8d,0xb3,0x89,0x16, +0x9e,0x21,0xaf,0x7c,0x95,0xe9,0x05,0x01,0x9c,0xde,0x4f,0xd0,0x73,0xc1,0x2f,0xf9,0xbc,0xb5,0x0d,0xdb, +0xcf,0x10,0x8d,0xa5,0xe2,0x68,0x52,0x15,0x7e,0xb4,0x43,0x48,0xaf,0x91,0x6b,0x1f,0x0f,0x7d,0xfa,0x6e, +0xe1,0xfb,0xc2,0x6e,0x97,0xbb,0x76,0x45,0x55,0xac,0x5d,0xa3,0x7d,0xf1,0x94,0x24,0xb1,0x83,0xb5,0x25, +0x54,0xf6,0xa8,0x9d,0xb4,0x3d,0x1f,0x3a,0xd8,0xc9,0xe3,0x45,0x1c,0x95,0x6b,0x67,0xf4,0x68,0x2c,0xfe, +0x0c,0x6f,0x76,0xb6,0xa8,0x5a,0xb4,0x48,0xc2,0x26,0xcb,0x8b,0xb9,0x30,0x08,0x15,0x9a,0x70,0xf5,0x87, +0x27,0x8d,0x1e,0x08,0x7e,0x2a,0x00,0xed,0xf2,0x52,0x83,0xee,0xc1,0x15,0x28,0xa5,0xbd,0x3b,0xd6,0x80, +0xa0,0x4e,0x24,0x1e,0x50,0x07,0x9b,0xa2,0x72,0x1d,0xac,0x37,0xb0,0xb2,0x02,0x06,0x3f,0x65,0x48,0xdf, +0xde,0x36,0xba,0xec,0x95,0xef,0x23,0x2f,0x8e,0xda,0xbb,0x78,0x6c,0x9a,0xc8,0xc8,0xe1,0x24,0xe8,0x47, +0xbb,0xae,0x2c,0xc4,0xa4,0x39,0xe7,0x3d,0xcf,0x43,0x69,0x51,0x43,0xb6,0x55,0x2e,0xb8,0xfd,0x65,0x5e, +0x64,0x39,0x82,0x91,0x85,0x95,0x80,0xae,0x57,0xfa,0x7a,0x19,0xaf,0xf1,0x4f,0xde,0x35,0x3a,0x68,0xe9, +0xb6,0x88,0xb1,0xe4,0x59,0x94,0x5e,0x46,0x45,0x1d,0xfe,0x90,0x00,0x8d,0x52,0x8f,0xd6,0x48,0xa1,0x2e, +0x7c,0xd4,0x7f,0xb4,0xc6,0xae,0xfb,0xc2,0x47,0x4f,0x7a,0x8f,0xd6,0xd8,0xef,0xec,0x23,0x28,0x84,0x98, +0x70,0x85,0x4e,0x9c,0x01,0x82,0x31,0x96,0xd5,0x9e,0xdd,0x11,0xff,0x43,0x98,0xf4,0xf7,0xc1,0x1f,0xe0, +0xef,0x8f,0x3f,0x14,0x12,0x0f,0x9b,0xb7,0x74,0x03,0x00,0x1f,0xd6,0x0d,0x38,0x2f,0xee,0xd5,0x0d,0x80, +0xbf,0x7f,0x37,0xe8,0x50,0xba,0xa5,0x07,0x00,0xf3,0xb0,0x1e,0x1c,0xc4,0x93,0x7b,0xf5,0x00,0xe0,0xef, +0xdf,0x03,0x28,0x74,0x0b,0xfe,0x00,0xf1,0x30,0xfc,0x5f,0xe5,0x18,0x76,0xfb,0x3e,0x3d,0xa0,0x12,0xf7, +0xef,0x03,0x15,0xbb,0xa5,0x17,0x04,0xf3,0xb0,0x7e,0x3c,0x9b,0xdf,0x73,0x45,0x63,0x81,0xfb,0xf7,0xe2, +0xd9,0xed,0x53,0x09,0x41,0x1e,0xd6,0x87,0xbd,0xf9,0x62,0x16,0xdd,0xab,0x13,0x54,0xe2,0xfe,0xbd,0xa0, +0x62,0xb7,0x74,0x83,0x60,0x1e,0xd6,0x8f,0x0f,0xac,0x88,0xd1,0x84,0xb4,0xc8,0x7e,0x96,0x7d,0x71,0xa1, +0xd9,0xaf,0xb6,0x1f,0xb2,0x48,0x84,0xf5,0x45,0xc7,0x8e,0x8e,0x2e,0x37,0x2c,0x6c,0x2b,0x2b,0x87,0xd0, +0xc2,0xd5,0xb9,0x7e,0x1e,0x04,0x6b,0x5d,0x17,0x3d,0xab,0x64,0xee,0x93,0x05,0xe6,0xad,0x30,0x8b,0x64, +0x6b,0xb0,0xce,0x45,0xf6,0xcf,0x0e,0x6a,0x97,0x74,0xa4,0xfb,0x07,0x76,0x44,0x26,0xb3,0xd9,0x66,0x7f, +0x05,0xc4,0xed,0x65,0xe9,0x98,0xef,0xa0,0xbe,0x1a,0x7a,0x19,0x97,0x30,0x81,0xe0,0xe2,0xb2,0x14,0xb9, +0x25,0xf4,0xbc,0xe3,0x38,0xc4,0x6b,0xb6,0x0a,0xe4,0x33,0x24,0xaf,0x38,0x10,0x34,0x49,0x70,0x94,0x33, +0x69,0x67,0x30,0x03,0x98,0x70,0xaa,0xca,0xca,0xca,0x2a,0xab,0x86,0xdf,0xa3,0xb6,0xbb,0xa3,0xc6,0xf3, +0xb2,0x56,0x25,0x27,0xff,0x26,0x34,0xef,0x59,0xf3,0x5d,0x50,0x96,0xe1,0x35,0xaa,0x2a,0x39,0xe5,0x81, +0x78,0xde,0xbd,0xba,0x3b,0x21,0x77,0x56,0xeb,0x30,0x57,0xf7,0x9b,0x68,0x79,0xaf,0x5a,0xf9,0x66,0x61, +0xf3,0x97,0xd6,0x05,0xc2,0xe1,0x6d,0x2d,0xde,0xda,0x0e,0xf2,0xb0,0x84,0x2b,0xb2,0x72,0xf8,0xcf,0x4c, +0xa9,0x08,0xa3,0x8e,0x01,0xfe,0x70,0xbf,0x40,0xfd,0xc5,0x2e,0x6f,0x34,0x71,0x90,0x08,0x1f,0xcb,0x61, +0xac,0x82,0x73,0xa1,0x66,0x26,0x05,0xc7,0x49,0x39,0xa8,0xc8,0x36,0x7a,0x3f,0x14,0x51,0xf8,0x28,0xfc, +0x9e,0x04,0x44,0x97,0x60,0x19,0xa4,0x65,0x32,0xf0,0x8a,0xb8,0xc8,0x17,0xff,0xc8,0xcb,0x16,0xfd,0x5a, +0x64,0x57,0x2d,0xb8,0x94,0xa0,0x5f,0x5d,0xf5,0x1d,0xd1,0x37,0x07,0x32,0x6f,0xa5,0xbb,0x65,0x7b,0xdb, +0x97,0xba,0x7d,0x2d,0x04,0x0e,0xe1,0x1e,0x1a,0xed,0xe4,0xa3,0x3f,0xf7,0x06,0xdb,0x3f,0xf5,0x06,0x6c, +0x73,0x50,0x46,0x69,0x0b,0xee,0xf5,0x91,0xbf,0x85,0x20,0xbe,0xbf,0x45,0xc9,0x1f,0xde,0x6c,0xf6,0xff, +0xd4,0xf3,0xdb,0xad,0x0c,0xe0,0xe1,0xd7,0x00,0x7e,0xa3,0xdc,0xef,0x07,0xf4,0x81,0x3f,0x09,0xd3,0xad, +0x32,0x98,0x85,0x2d,0x65,0xb5,0x30,0xa7,0xcc,0xb6,0x00,0xd8,0xe9,0x6f,0xf7,0x46,0xfd,0xc1,0x7c,0x77, +0xfb,0x71,0x6f,0xd4,0x82,0x8f,0x4e,0x05,0xd8,0x21,0xe9,0xe1,0xd6,0xd3,0xde,0x60,0x4e,0x60,0x94,0x3d, +0xa7,0x84,0x5e,0xb0,0x0c,0x35,0x40,0xc8,0xf0,0x77,0x9e,0x62,0x45,0x76,0xa2,0x2a,0x67,0x65,0x88,0x5a, +0xce,0xf4,0x5a,0x00,0x85,0x7a,0x2d,0x94,0xe8,0xaa,0x05,0x33,0x44,0x2d,0x0b,0x5b,0x8b,0xa9,0x35,0x43, +0x49,0xcd,0x8c,0x24,0x35,0x13,0x1f,0x6e,0xf2,0xfb,0x35,0x88,0x25,0x42,0x2c,0x2b,0x88,0xf3,0x1a,0xc4, +0x19,0x42,0x9c,0x29,0x88,0x21,0x69,0x92,0xcf,0x59,0xeb,0x5d,0xa8,0x1f,0x2d,0x48,0xf1,0x63,0x9f,0xfe, +0x7f,0x8e,0xca,0x1f,0x01,0x03,0x1d,0xa0,0xbf,0xbd,0x2c,0x88,0x02,0x7c,0xb1,0xbf,0x51,0xd2,0xb2,0x6e, +0x99,0xd1,0xc4,0x25,0x9f,0x3e,0xd6,0xcc,0xb6,0xed,0xdf,0x0b,0x97,0x00,0x41,0xb7,0xcc,0x42,0x61,0xcc, +0x4a,0x90,0x66,0x11,0x85,0xe6,0xf5,0x84,0xc4,0x38,0x2b,0x41,0x50,0xd4,0x48,0xcc,0xf2,0x6a,0xb0,0x4a, +0x3e,0xa3,0xc9,0x8e,0xc4,0x73,0xa4,0x25,0xdb,0xc9,0x4d,0xd1,0x4f,0x57,0xd3,0x67,0x54,0xab,0x2a,0x41, +0x27,0x33,0x9a,0x10,0x48,0x93,0x1e,0xcd,0xa2,0x62,0x0f,0xce,0xe1,0x64,0xbc,0x2c,0x63,0x11,0x53,0xe5, +0xea,0x6c,0xd1,0x41,0x7d,0xba,0x8d,0x0d,0xa5,0x19,0x9c,0x1f,0x27,0x27,0x1b,0x1b,0x2d,0xfc,0x13,0x6a, +0x85,0x81,0x22,0x4d,0x85,0x03,0xe9,0xd9,0x14,0xcb,0x8c,0xa8,0xe0,0x7a,0x0f,0x23,0xd2,0xcf,0x0b,0x99, +0x2a,0x2b,0x5c,0xef,0xfb,0x55,0x18,0x3f,0x42,0x95,0x44,0xb7,0x4a,0x49,0x56,0xef,0x1e,0xc0,0x4b,0x2f, +0xec,0x49,0xa3,0x0e,0x77,0xa2,0x74,0xb8,0x87,0x0d,0x56,0xbb,0x42,0x95,0xb8,0x38,0x19,0x19,0x5f,0x84, +0x8f,0xb0,0x28,0xae,0x1a,0x24,0x64,0xe5,0xb4,0x63,0xf3,0x82,0xe6,0x89,0x54,0x93,0x49,0xd5,0x85,0x4e, +0x2d,0x3f,0x40,0x41,0x15,0xdb,0x9f,0x49,0xd1,0x94,0xf6,0xa5,0x0b,0xa3,0x2a,0x62,0x93,0x9e,0x37,0x06, +0xcd,0xf5,0xc6,0xf3,0xec,0xec,0xb3,0x67,0x09,0xec,0x58,0x65,0x56,0x18,0xc9,0x89,0xc9,0xda,0x2c,0x4d, +0x20,0x67,0x53,0xb1,0x0e,0x8c,0xc1,0xc0,0xdd,0x4a,0xe2,0xa4,0x40,0x1e,0x60,0x38,0x6d,0xe0,0xa7,0xca, +0xbd,0xf3,0x52,0xa8,0x97,0x4b,0xb4,0xbc,0x24,0x9d,0x27,0x29,0x0d,0xaa,0xe9,0xef,0xde,0x1f,0x25,0x75, +0x07,0xf8,0x08,0xda,0xe1,0x1e,0xf8,0x03,0x3b,0xdf,0xae,0xa0,0x8a,0x50,0x6e,0xb4,0x98,0xcb,0xb8,0x15, +0x72,0x8a,0xe4,0x76,0x4c,0x5d,0x6c,0xda,0x0e,0xb3,0x5b,0x07,0x42,0x04,0x6c,0x28,0x69,0x4e,0x26,0xec, +0x4e,0x15,0xb9,0x44,0xe2,0x24,0x8f,0xae,0xf8,0x32,0x50,0xb4,0x94,0xe9,0x19,0x3b,0x48,0x94,0xc9,0x88, +0x34,0x9e,0xe2,0xe7,0x70,0x62,0x16,0xb7,0x88,0x7f,0xb0,0xf2,0x53,0x02,0x3c,0x25,0x9a,0xc8,0xb2,0xe3, +0xf9,0x32,0xbf,0x4b,0x51,0x84,0x13,0x25,0xfd,0x81,0x78,0x9f,0x75,0x89,0x56,0x51,0x8e,0xeb,0x92,0xb8, +0xde,0x3e,0x43,0x1c,0xa5,0x10,0x49,0x31,0x00,0x35,0x51,0x65,0x22,0x7b,0xb0,0x8a,0x31,0xaa,0x75,0x43, +0x01,0x9f,0x92,0xc6,0xb7,0x14,0x16,0x3b,0x91,0xe4,0x44,0xc1,0x29,0xdd,0x4e,0x63,0x9a,0x32,0x82,0xc4, +0x5c,0xb9,0x28,0x7a,0x2b,0x89,0xb9,0x24,0x51,0x58,0x62,0xc5,0x25,0x3f,0xc7,0x5f,0x6f,0x91,0x6f,0x72, +0x51,0x82,0x53,0xb7,0x09,0xb2,0x12,0xbb,0x43,0x29,0x06,0x84,0x65,0x65,0x5b,0x62,0x18,0xcb,0x9d,0x8e, +0x1a,0xb1,0xda,0x65,0x3c,0x9d,0x56,0x1d,0xc2,0x3a,0x1b,0xf8,0x80,0x12,0x76,0x5e,0x83,0x9a,0x5d,0x4c, +0x1d,0x56,0xca,0xff,0xcd,0x77,0x87,0x3b,0x37,0x61,0x66,0x29,0x4b,0x81,0x91,0xf4,0x16,0xb0,0x47,0x8b, +0x0f,0x66,0xdd,0x24,0x4b,0xe7,0x30,0x8b,0x06,0x72,0x8d,0xaa,0x24,0x8c,0x61,0x54,0x93,0x8b,0x6a,0x9e, +0x0e,0x62,0xe8,0x43,0xf6,0xd5,0x16,0x8e,0x96,0xf6,0xde,0x66,0x6d,0xa5,0x2b,0xf7,0x50,0x5a,0x2b,0xe3, +0x18,0x0e,0x24,0x73,0xfb,0x2d,0x55,0x24,0x76,0x8c,0x85,0x24,0x02,0xe4,0xe4,0x68,0x2e,0xdc,0x38,0x0f, +0x55,0xbe,0x7b,0xb2,0xa9,0xec,0x86,0x19,0xa5,0xf2,0x9b,0x26,0x0f,0x02,0xb8,0x37,0x6d,0xdc,0x0a,0x7c, +0x8c,0x11,0x1e,0x97,0xf1,0x2d,0x67,0x96,0xb1,0xd3,0xdd,0x81,0x92,0x3a,0xc9,0x60,0x8f,0x58,0xef,0x0f, +0x65,0x18,0x3a,0x92,0x41,0xc0,0x2e,0x6f,0x88,0xa2,0x31,0x86,0x87,0xa4,0x76,0xae,0x48,0x5c,0x56,0x66, +0xcc,0x02,0x5c,0x9c,0x09,0x81,0x96,0x43,0xc7,0x81,0x70,0x1f,0x21,0x9c,0x3c,0x26,0x69,0x1a,0xe7,0x64, +0xcc,0xb1,0x03,0xb5,0x69,0xb6,0x1d,0x1b,0x1b,0xa2,0x95,0x75,0xad,0x15,0x09,0x41,0x46,0x02,0xc0,0x2e, +0xd5,0x5b,0xe5,0x7c,0x7a,0x9e,0x7a,0x88,0x6c,0x43,0x0a,0x5a,0x54,0x28,0x25,0xad,0x01,0x48,0x98,0xc4, +0xe8,0x56,0x5d,0x5d,0x82,0x88,0xb5,0x91,0x6f,0x68,0x4c,0xdf,0x88,0xcf,0x74,0x69,0x00,0xe2,0x78,0x6b, +0x23,0x0b,0x2b,0xd2,0x7f,0xbe,0xf2,0x06,0x51,0xe8,0x44,0x13,0x1a,0xd1,0xf5,0xa4,0x5d,0x70,0xaf,0x97, +0xb1,0x09,0x55,0xb8,0xa0,0x0e,0xa3,0xd2,0x84,0xba,0x74,0x41,0xfd,0x2d,0xb2,0x5a,0xcc,0x5d,0x50,0x07, +0x68,0xb5,0xaf,0x43,0x4d,0x5d,0x50,0x24,0x8f,0x34,0xe1,0xc6,0x2e,0x38,0x14,0xf9,0x99,0x60,0x91,0x0b, +0x8c,0x44,0x6a,0x26,0xdc,0xc2,0x05,0xa7,0xc6,0xed,0x46,0xd8,0xa3,0xa2,0x2d,0x87,0xe5,0x42,0x4c,0x4e, +0xf9,0x48,0xac,0x76,0xc3,0xc5,0x89,0x1a,0x5e,0xf6,0xb4,0x9d,0x85,0x4f,0x7a,0x9b,0x79,0x57,0x18,0x26, +0x0d,0xad,0xe6,0x2c,0x91,0x17,0x5f,0x8f,0x31,0xfe,0xbb,0xf0,0xd7,0xff,0x5b,0xe7,0x5e,0x9a,0xc1,0x9d, +0xba,0xab,0x26,0x1c,0x5e,0x13,0xba,0x95,0xf9,0xd5,0xc6,0xc6,0x7a,0x22,0xaf,0xc3,0xbd,0x61,0xaa,0xbb, +0x29,0xf0,0xbc,0x80,0x91,0x81,0x5f,0x37,0x18,0x9b,0xd0,0x34,0x5d,0xd4,0x15,0x0f,0xf0,0x15,0x72,0xde, +0xd6,0x75,0x18,0x04,0xf7,0xc6,0x5e,0x0d,0x84,0x7f,0x2f,0xe5,0x66,0xdd,0x5b,0x00,0x33,0x85,0xef,0xbe, +0xed,0xc6,0x12,0xc2,0x5d,0x97,0xa3,0x08,0xb0,0x10,0x70,0xa3,0xe0,0x75,0xce,0x9e,0x3f,0x74,0xa4,0xe7, +0x6d,0x84,0xbc,0x11,0x71,0x5e,0x4a,0xb3,0x3f,0x37,0x4c,0xd3,0x49,0xd3,0x42,0xb1,0x68,0x05,0x97,0x79, +0xe7,0x58,0xdd,0x8f,0xda,0x13,0xc6,0x41,0x90,0xb2,0x54,0x31,0xa6,0x08,0xd1,0x40,0xb8,0x9f,0x50,0xa9, +0x37,0x18,0xa9,0xc9,0xb0,0x61,0x5d,0x02,0x12,0x57,0xdc,0xd9,0xce,0xc4,0xe8,0x7b,0x47,0xa3,0xde,0xe4, +0x4e,0xf4,0x6e,0x2e,0xd1,0x48,0xef,0xca,0xce,0x55,0x43,0x04,0xfb,0x35,0xb3,0x8c,0x30,0xcf,0xf4,0xe1, +0x9f,0xdd,0x7b,0xf8,0x67,0x77,0x44,0x67,0x76,0x07,0x72,0xb6,0x96,0x1d,0x85,0x5e,0xa7,0xef,0x6f,0x9e, +0xf9,0x5b,0xf2,0x53,0x4e,0x8f,0xbb,0x5d,0xd9,0x0c,0x9e,0xbe,0x3a,0xfe,0x38,0xe4,0x9c,0xa6,0x19,0x21, +0x76,0x03,0xad,0x4e,0xf3,0x92,0x26,0xf2,0x39,0xa0,0x9d,0xc5,0x58,0x29,0x33,0xe1,0xe3,0xde,0x09,0xf9, +0x0e,0xae,0x12,0xfa,0x27,0xcc,0x25,0xe1,0xb1,0xe5,0xb6,0x0c,0xae,0x35,0x99,0x98,0x47,0x70,0x21,0x1d, +0xb6,0x40,0xef,0x82,0x28,0xec,0x07,0xb4,0x17,0x25,0x72,0x2f,0x0a,0x52,0x48,0x82,0x85,0x1f,0xa0,0x3f, +0xfe,0x19,0xfa,0xe4,0x0f,0x51,0x52,0x84,0x72,0x9e,0xfe,0x30,0xe9,0xa2,0x19,0x27,0x1b,0x12,0x77,0x23, +0x00,0xb3,0xc4,0x36,0x70,0xe5,0x81,0xc9,0x5a,0x4f,0x9d,0xe2,0xc2,0xa9,0xa5,0x8e,0x7d,0xa8,0x1c,0xae, +0xb1,0x50,0x3d,0x1c,0x5f,0xd0,0x40,0xd1,0xbd,0xe4,0xe5,0xb8,0x1f,0xda,0x4f,0x07,0xd5,0x0b,0x05,0x2f, +0xa1,0xf5,0x7d,0xbc,0xfe,0xda,0x7b,0x2b,0xcd,0xba,0xf3,0x70,0x5f,0x08,0x30,0x6b,0x32,0xc4,0xe1,0xb9, +0x25,0x46,0x42,0xb3,0xa0,0x39,0x49,0x90,0x26,0xf4,0x7f,0x36,0x2e,0x4a,0x49,0x9a,0x74,0xde,0x25,0xcf, +0xeb,0x24,0x4e,0xea,0x05,0x3d,0x12,0x27,0x05,0xe7,0x95,0x88,0x49,0xa6,0xdd,0x28,0xc7,0x28,0x8a,0x31, +0x24,0x22,0xad,0xd7,0x47,0x7f,0x5a,0xeb,0x97,0xf6,0x5c,0x24,0x3a,0x36,0x75,0x74,0xec,0xdb,0x37,0x61, +0xfe,0x79,0x19,0x4e,0x9b,0xfa,0x16,0x5c,0x85,0x97,0xe2,0x4a,0xf6,0x33,0x5c,0x9a,0xa3,0xfc,0x15,0xc6, +0xf2,0x42,0xa1,0x2b,0x22,0xda,0xc3,0xd3,0xe3,0x8a,0xd8,0x0d,0x1c,0xf8,0xc3,0x32,0x5b,0x40,0x7a,0x13, +0x09,0xfa,0x3e,0xd6,0x67,0x42,0xf7,0x1b,0xa1,0x7b,0x08,0x7d,0xa9,0x51,0xf6,0x0a,0xbe,0x4c,0xda,0xa1, +0x03,0x06,0x01,0x62,0xa4,0xdd,0x70,0xe4,0x21,0x9b,0x2a,0xea,0x49,0x56,0xd0,0xe4,0xc3,0x2a,0x9a,0x7c, +0x0c,0x3f,0x34,0xd2,0x64,0x1c,0x7e,0xbc,0x85,0x26,0x63,0x17,0x4d,0x70,0x82,0xea,0x5d,0xc4,0x0e,0x8e, +0x5d,0xe4,0x40,0x78,0x13,0xec,0xa3,0x46,0x87,0xb1,0xf8,0xaa,0x77,0xf9,0xd7,0x5a,0x97,0xb5,0x37,0x5c, +0xd1,0xe9,0x5f,0x57,0x75,0xfa,0xaf,0xe1,0xaf,0x8d,0x9d,0xfe,0x1c,0xfe,0xf5,0x96,0x4e,0x7f,0x76,0x76, +0x9a,0x47,0x96,0xbb,0x2e,0x7a,0xf3,0xd9,0xd9,0x69,0x06,0xec,0x55,0x60,0x7f,0xd5,0x3a,0xfd,0x59,0x7c, +0xd5,0x3b,0xfd,0xb5,0xd6,0xe9,0xea,0xc5,0x57,0xf4,0xf9,0xeb,0xaa,0x3e,0x5f,0x84,0x5f,0x1b,0xfb,0x7c, +0x18,0x5e,0xdc,0xd2,0xe7,0xc3,0x15,0x7d,0xe6,0x31,0x44,0x95,0x7b,0xac,0x6a,0x45,0x9f,0x19,0x90,0x26, +0xfc,0x85,0xd6,0xe7,0x43,0xf1,0x55,0xef,0xf3,0xbb,0x5a,0x9f,0x5f,0x5b,0x5d,0x7e,0xb7,0xaa,0xcb,0x6f, +0xc2,0x77,0x8d,0x5d,0xfe,0x12,0xbe,0xb9,0xa5,0xcb,0x5f,0x6a,0x5d,0xfe,0xee,0xbc,0xd7,0xc3,0xa2,0x66, +0x46,0xb7,0xff,0x94,0xff,0xfb,0x09,0x21,0xce,0x5d,0x10,0x3f,0xca,0xff,0x00,0xa2,0xe7,0x84,0x78,0x42, +0x39,0xe7,0x8e,0x9c,0xa7,0x5a,0xed,0xbd,0x9e,0x0b,0xe2,0x4f,0x5a,0xed,0xe7,0x2e,0x88,0xbe,0x42,0xfd, +0x8d,0x46,0xf6,0x2f,0xe2,0xab,0x4e,0xf6,0xd7,0x35,0xb2,0x2b,0x75,0x1b,0x41,0xf6,0xd7,0xab,0xc8,0x7e, +0xea,0x76,0x74,0xa0,0xb4,0x6d,0x5b,0x4b,0xd8,0xf9,0x17,0xfe,0xf0,0xb4,0x9b,0xdb,0xc7,0xda,0x29,0x1e, +0x81,0xa7,0xdd,0x69,0x3d,0x7d,0x8a,0xe9,0xe3,0x7a,0xfa,0x98,0xcf,0xbc,0x83,0xf0,0x75,0xe3,0x50,0xbf, +0x0d,0x0f,0x6e,0x19,0xea,0xb7,0x0d,0xb3,0xfb,0x14,0x2d,0x9e,0x03,0xfc,0x3b,0x15,0x7f,0xc7,0xbc,0x64, +0xdf,0x36,0xcc,0x72,0x0b,0xbd,0x85,0xd3,0xf0,0xba,0x39,0x15,0xab,0x3e,0xd0,0x86,0xe8,0xad,0xf8,0xaa, +0x0f,0xd1,0xfb,0xda,0x10,0x29,0x55,0x22,0x31,0x44,0xef,0x57,0x0d,0xd1,0xde,0xed,0x43,0x74,0x06,0xe7, +0xd8,0x70,0xaf,0x3e,0x44,0x7b,0x38,0x44,0x7b,0xf5,0x21,0xda,0xc3,0x21,0xda,0xab,0x0f,0xd1,0x9e,0x1c, +0xa2,0x57,0xe1,0xfb,0xc6,0x21,0x3a,0x0a,0x5f,0xdd,0x32,0x44,0x47,0x0d,0x43,0xb4,0x27,0x86,0x68,0x4f, +0x0c,0xd1,0x9e,0x1c,0xa2,0xa3,0xfa,0x1a,0xe8,0xd1,0x1a,0x78,0xa5,0x11,0xf8,0x48,0x7c,0x99,0x04,0xbe, +0x13,0x2b,0x6b,0xc8,0xa1,0xad,0x67,0x88,0xdb,0x39,0xd9,0x26,0x51,0x0f,0x31,0x96,0x64,0x3c,0x40,0x6c, +0x6a,0x79,0x0f,0x36,0xb5,0x41,0x56,0x81,0x73,0x21,0x69,0x64,0xf7,0x0a,0x77,0x39,0xa1,0x35,0x80,0xcf, +0xc6,0xce,0x7c,0xa1,0xbe,0x08,0x00,0x42,0x1b,0xfc,0x2c,0x2b,0x5a,0xdb,0x9b,0xf2,0x51,0x17,0x26,0x92, +0x0f,0xff,0x2b,0xa4,0x66,0x78,0x91,0xa4,0xae,0xdc,0x79,0x98,0xc8,0x0b,0xd0,0xd6,0x36,0x70,0xbe,0x89, +0xba,0x7c,0x6c,0x6d,0x0f,0x0b,0xcd,0x4d,0x71,0x30,0x6f,0x67,0x9b,0x1a,0x2c,0x5d,0x3a,0xfc,0x40,0x80, +0xc0,0xf0,0x7a,0xc1,0xa4,0x93,0x6e,0xea,0xe5,0x05,0x48,0xdf,0x92,0x3a,0x1a,0xbe,0x50,0xa4,0xe7,0x9f, +0x66,0x88,0x8d,0x8d,0x9e,0x2d,0xb6,0x04,0xee,0x74,0x24,0xbc,0x6d,0x67,0x8b,0xe8,0x0c,0x98,0x7e,0x3c, +0xd2,0x06,0x76,0x52,0xbf,0xd3,0xca,0xbb,0x97,0x3b,0xdd,0xed,0x51,0x77,0x7b,0x00,0xbf,0x84,0xe8,0xa2, +0x76,0x03,0xae,0x9d,0x68,0xb3,0xc6,0xb1,0x5a,0xba,0xca,0xca,0x91,0x1a,0x2e,0x35,0x62,0x00,0x85,0x37, +0x67,0xe6,0x4d,0x8e,0x9b,0x3f,0x73,0x09,0xa1,0x8c,0xe6,0xcf,0x1a,0x9b,0x5f,0xb8,0xca,0xaa,0xe6,0x17, +0x5a,0xf3,0xad,0x7e,0x07,0x86,0x17,0xae,0x89,0x2e,0x14,0xf6,0x5d,0x12,0x2e,0x03,0x85,0x55,0x97,0x13, +0x47,0x59,0x85,0xc2,0xb9,0x8d,0xc2,0xa5,0xbf,0xb9,0xef,0x42,0x61,0xea,0x12,0x9f,0xdd,0x7a,0x8d,0x90, +0x77,0x08,0x47,0x59,0x85,0xc2,0xa5,0x8d,0x42,0xee,0x6f,0x4e,0x5d,0x28,0x5c,0xb9,0x65,0x73,0x06,0x12, +0x57,0x8d,0x48,0x7c,0x70,0x97,0x56,0x68,0x7c,0xb0,0xd1,0x98,0xfa,0x9b,0x57,0x2e,0x34,0x3e,0x3a,0x45, +0x7f,0x06,0x16,0x1f,0x1b,0xb1,0x18,0x3b,0x0b,0x2b,0x24,0xc6,0x36,0x12,0x63,0x7f,0xf3,0xa3,0x0b,0x89, +0x5f,0xdd,0x82,0xc5,0x5b,0xd9,0x79,0xc9,0xcb,0x3b,0x4b,0x2b,0x34,0xfe,0x6a,0xa3,0x11,0xf9,0x9b,0xbf, +0xda,0x68,0xdc,0x67,0xc7,0x77,0x05,0x32,0x30,0x63,0xac,0xe8,0xef,0x96,0x0d,0xaf,0x96,0x77,0x69,0xe9, +0x0d,0x29,0x4a,0xdc,0xf7,0x64,0xb1,0x5f,0x5f,0x6c,0xe3,0x15,0xf1,0x18,0x3e,0x95,0x8f,0x4c,0xbe,0x7c, +0x76,0xd2,0x60,0x6c,0x10,0xeb,0x6d,0x49,0x38,0xa6,0x42,0x95,0x02,0x26,0x6e,0x65,0xcf,0xe0,0x19,0x2e, +0x98,0x5a,0x9a,0xb0,0x84,0xdd,0xd7,0xc8,0xaa,0x28,0xad,0x7b,0xb9,0xdb,0x7d,0x32,0x12,0x75,0x50,0x8a, +0x87,0xcf,0x17,0x11,0x3d,0x57,0x5b,0xc9,0x57,0x18,0xd9,0x10,0x05,0xc0,0xb7,0x10,0x6d,0x0f,0x88,0x75, +0x49,0x3e,0x39,0xf3,0x6c,0x6e,0xe8,0x73,0x48,0xd1,0x6a,0xf5,0x8c,0xaa,0x9f,0xad,0x91,0x5e,0xce,0x63, +0xf5,0xa6,0xde,0xba,0xf2,0x7c,0x24,0x4f,0xcb,0x96,0xf5,0x4c,0xa5,0x91,0x85,0x0e,0x4b,0xe3,0x0c,0x97, +0x1a,0x1d,0x39,0xfb,0x25,0xc5,0x27,0x12,0xd3,0x81,0x29,0x9b,0x5f,0x54,0x3e,0xf6,0x88,0xa2,0x04,0x1b, +0x36,0x80,0x56,0x4e,0x4e,0x19,0xf0,0xef,0xb7,0x01,0xfe,0x9d,0x1e,0x90,0xd5,0xda,0x31,0x99,0x03,0xee, +0x55,0x06,0xbd,0x5c,0xc5,0x03,0xa4,0x61,0xcb,0x09,0x50,0x31,0x01,0x12,0xeb,0x4e,0x82,0x4f,0x68,0x05, +0x3e,0x68,0x77,0xf1,0xe0,0xee,0x68,0x67,0xb6,0xbf,0xd5,0xd2,0xbf,0xd0,0x46,0xac,0x23,0xca,0xfd,0x5d, +0x2f,0x07,0x0b,0xb5,0xa3,0x1f,0xe4,0x54,0x4e,0xfb,0x24,0xe6,0xa8,0xd1,0x39,0x98,0xcf,0x32,0x7e,0x85, +0x50,0x2b,0xd1,0x78,0xce,0x67,0xc2,0x65,0xd9,0xfe,0x1c,0x79,0x4b,0xe2,0xf9,0x04,0x9e,0xd2,0x9f,0x18, +0x7d,0xf9,0x2b,0xd0,0x36,0xb0,0xbe,0xbd,0x72,0xec,0x8c,0xaa,0x1b,0x3e,0xfc,0xd5,0x5d,0x63,0x61,0xba, +0x43,0x07,0x2f,0x35,0x34,0xf0,0xe6,0xa4,0x7f,0x37,0xa1,0x88,0x08,0x13,0x8c,0x88,0x50,0x74,0xd1,0x83, +0xda,0xc6,0xc6,0x64,0x87,0x7f,0x29,0x5f,0x6a,0x04,0xd0,0xe3,0x8a,0x67,0x68,0x79,0x97,0x12,0x47,0x83, +0xf6,0x77,0x95,0x5e,0xde,0x7c,0x2b,0x05,0x4c,0x14,0x7f,0xe6,0x0f,0x67,0x14,0x76,0x61,0xd6,0x46,0xdf, +0xff,0xc1,0x5c,0xff,0x90,0xef,0xd3,0xaf,0x8b,0xcb,0xd6,0x2c,0x98,0x04,0x11,0x9c,0xb1,0x95,0xed,0x65, +0x6d,0x9e,0x99,0xe2,0xfd,0xc6,0xf9,0x26,0xb5,0x2b,0x91,0xba,0x0d,0x53,0xc2,0xdf,0xaa,0x28,0x75,0x87, +0x19,0xa0,0xd5,0xf3,0x80,0x41,0x32,0x1a,0x63,0xce,0x0b,0xa8,0x00,0x34,0x9b,0xef,0xf6,0x51,0xe3,0x70, +0x28,0xe9,0xbd,0xb4,0xe9,0x3d,0x5a,0x86,0xbd,0x81,0xca,0xdd,0xed,0x77,0xea,0xe3,0xb1,0xd4,0x07,0x6c, +0x09,0x1b,0x60,0x1d,0x66,0xb9,0xd3,0x7d,0xd2,0x76,0x95,0xc4,0x21,0xc8,0xb4,0xf3,0x6c,0xa9,0xb1,0xbc, +0x82,0xe1,0x75,0x2c,0x76,0x7a,0x1b,0x14,0x11,0x13,0x80,0xa0,0x78,0xbd,0xeb,0x77,0x96,0x30,0x76,0x53, +0xf8,0x37,0x76,0x16,0x11,0x0f,0x85,0x66,0xa1,0xa8,0x9b,0x07,0x5c,0xd0,0x5d,0x88,0x5f,0x0d,0xeb,0x65, +0xb0,0x21,0x54,0x58,0x74,0x95,0x79,0x6d,0x16,0xc1,0x79,0x85,0x0d,0x14,0x34,0xb3,0x5c,0x05,0xe8,0xd1, +0xd4,0x2c,0x10,0x75,0x67,0x02,0x2f,0x77,0x11,0x7a,0x41,0xad,0x17,0xc1,0x56,0x9a,0xd0,0x12,0x2f,0x9b, +0x55,0x21,0x4a,0x20,0xb5,0xcb,0x9b,0x15,0x1a,0x12,0x53,0xa1,0x1c,0xd2,0xc4,0x1a,0xd0,0xc9,0xb0,0xb2, +0x38,0xab,0x2b,0xda,0xba,0xc1,0xa6,0x1e,0x80,0xcb,0x99,0x6e,0x2e,0x2c,0x42,0x51,0x49,0x41,0x7a,0x66, +0xdc,0x0d,0x7b,0xf2,0x6c,0xe7,0xe3,0xd6,0x70,0xb8,0xa7,0xa7,0x6f,0xaa,0xad,0xa5,0xdf,0xd3,0x2a,0x90, +0x6a,0xba,0x8e,0x8c,0xc6,0x63,0x3e,0x5e,0x71,0x42,0x17,0xf5,0xfe,0x55,0x6f,0x9e,0xba,0x87,0x30,0xe8, +0xb7,0xec,0x64,0x32,0x32,0xd5,0x6e,0x12,0x28,0x31,0x58,0xcd,0x3d,0x15,0xb5,0x51,0x20,0x07,0x90,0x5c, +0x61,0xed,0xb9,0x28,0x56,0x0d,0x30,0xb3,0x83,0xb0,0x03,0xe9,0x23,0x21,0x1f,0x69,0x93,0x39,0x6a,0x41, +0x42,0x00,0xc3,0x04,0xff,0xc6,0xf0,0x2f,0xd2,0x21,0x67,0x23,0x6d,0x7e,0x21,0xe4,0x0c,0x20,0x0a,0xf8, +0x77,0x69,0x43,0x46,0x23,0x73,0x52,0x89,0xec,0x5b,0xfb,0x84,0x18,0x18,0x94,0x0b,0xc8,0x1e,0x1b,0xe8, +0x27,0x15,0x47,0xe9,0x5d,0x1d,0x9d,0xb4,0x0b,0x07,0x89,0x1a,0x37,0x92,0x75,0x81,0x2f,0x84,0xbd,0x63, +0x1a,0xe6,0xf0,0xff,0x71,0x98,0x08,0x6f,0xcf,0x68,0x74,0x9c,0xc1,0xc4,0x28,0xaa,0xd7,0x71,0x69,0x02, +0xce,0x4d,0xa8,0x81,0xc8,0xba,0xb3,0x30,0x85,0x5e,0x65,0xdd,0x02,0xfe,0x16,0xf0,0xf7,0x12,0xfe,0x5e, +0x36,0xb3,0xb7,0x35,0x46,0x38,0x12,0xcb,0x49,0xe3,0x6e,0x6f,0xe5,0x84,0xb9,0xdf,0x96,0x35,0xba,0x16, +0xa3,0xcb,0x1c,0x1e,0xca,0x24,0x5d,0xdf,0x64,0xf5,0x34,0xc4,0x31,0xfa,0x0d,0xb4,0x9c,0x11,0x2d,0x0b, +0xa2,0xe5,0xe5,0x2a,0x5a,0x2a,0x79,0x9a,0x4d,0xcb,0x1c,0x68,0x97,0xd3,0x78,0xa4,0x30,0x9f,0x70,0x44, +0x52,0x98,0x53,0xff,0x72,0x5a,0xd6,0x2d,0xfb,0x1d,0xb4,0xe4,0x09,0x7c,0x67,0x5a,0xd2,0x2c,0x76,0xae, +0xb5,0x35,0x45,0x4d,0xd2,0xf3,0xaa,0xc2,0x07,0xc8,0xed,0x28,0xbe,0x47,0x8f,0xcb,0x87,0xf4,0x78,0x96, +0x5d,0xb9,0x7d,0x5c,0x33,0x03,0x1f,0xb0,0xaa,0x05,0xfa,0x6c,0xb0,0xb4,0x50,0xcc,0x0d,0x17,0x9f,0x99, +0xd9,0x3d,0x2e,0xf9,0x23,0x95,0x9a,0x6b,0xc5,0x4a,0x25,0x5e,0xa0,0x25,0x0a,0x1e,0xd7,0x7b,0xa8,0x56, +0x27,0x64,0x55,0xd7,0xe8,0xa7,0x36,0xbf,0x33,0x27,0x22,0x75,0x33,0x5e,0x1b,0x6f,0xf2,0xe4,0xf2,0xb6, +0xb9,0x92,0x3a,0x43,0x2b,0xde,0xe8,0xef,0xac,0x6b,0xbb,0xe2,0xce,0xaa,0xe9,0xd4,0xe7,0x7c,0x57,0x44, +0xbb,0x81,0x68,0x02,0x03,0x82,0x2a,0x3d,0x9a,0xef,0x60,0x54,0xe5,0xd1,0xdd,0xff,0xa2,0x5a,0x58,0x17, +0x55,0xf3,0x48,0x93,0xd5,0x69,0x95,0xef,0x2b,0x4d,0xbf,0xa2,0x76,0x24,0x2b,0xdd,0x31,0xc9,0x43,0x56, +0x36,0xe4,0xc5,0x19,0x5c,0xd9,0xe6,0x47,0x40,0x6b,0xbc,0xab,0xdc,0x9d,0xba,0xc3,0x74,0x27,0x1b,0x55, +0xd5,0xa8,0xb8,0x42,0xaa,0x3e,0x0c,0x20,0x36,0x48,0xed,0x41,0xd8,0xcd,0xda,0xba,0x7e,0x1c,0x27,0x03, +0x13,0x67,0x00,0x6d,0x6c,0xac,0xae,0xd8,0xae,0xb4,0x53,0xaf,0xb2,0x6d,0x55,0x79,0xb3,0x4a,0x37,0x13, +0x29,0xed,0xb2,0x5a,0x37,0xb4,0x25,0xf0,0x23,0x6c,0x54,0x7d,0xa0,0xcb,0x27,0x0e,0xe5,0xfb,0x65,0x69, +0x2a,0xc7,0x99,0xc3,0xda,0x38,0x78,0xac,0x94,0x47,0x9b,0x85,0xd0,0xb2,0x0d,0xaf,0x6f,0x56,0x69,0x07, +0x1b,0x0a,0x20,0x3a,0xc6,0x8d,0x7e,0xdb,0xa5,0x2e,0xa8,0xf0,0xa2,0x21,0xa1,0x2d,0x3d,0x56,0xec,0x4a, +0x43,0x16,0xaf,0xc5,0xb8,0x3c,0x4a,0x2e,0x62,0xa0,0xae,0xee,0x38,0x1e,0x76,0x02,0x71,0xad,0x6f,0x50, +0x98,0xbd,0x91,0xf1,0x14,0x1c,0xc1,0xa8,0xa5,0x37,0xa5,0xbd,0x74,0x92,0xe3,0xa6,0xd7,0xdd,0x5c,0x7b, +0x99,0xc0,0x52,0xcb,0xbe,0x6c,0x01,0x36,0xb7,0x36,0xe8,0xc2,0x52,0xcb,0xce,0xd2,0x98,0xd5,0x5a,0x0d, +0x53,0xc8,0x3b,0x20,0x7c,0x63,0x0c,0x47,0x4d,0xcb,0xfa,0x21,0x03,0xa0,0x4c,0x5f,0xb4,0xb5,0xfd,0xed, +0x5b,0x4b,0x99,0x09,0xe4,0xd5,0x16,0x21,0x44,0x4d,0xb4,0x4d,0xe0,0x82,0xe0,0x9a,0x81,0xff,0x9a,0x4e, +0x31,0xaa,0x85,0x88,0x38,0xee,0x42,0x91,0x74,0x74,0x9d,0xd2,0x9b,0x55,0xd8,0xa1,0x76,0x8e,0xce,0x45, +0x56,0xad,0xfb,0x43,0x38,0x9c,0x93,0x8a,0x8b,0x2c,0x30,0xaa,0x5a,0xbd,0xd9,0x33,0x2b,0x90,0xdb,0xef, +0xd0,0x6e,0x52,0xad,0x22,0xe5,0x94,0x1d,0x26,0xc4,0xc8,0x44,0xa6,0x87,0xd6,0x11,0x12,0x50,0xfa,0x75, +0xdf,0xd8,0x58,0x07,0xac,0x3d,0xcf,0x24,0xa3,0x56,0x3b,0xdb,0xf9,0x49,0x19,0x9d,0xde,0x9d,0xba,0xb1, +0xc3,0xbd,0x87,0x9a,0xcf,0x46,0x29,0x45,0xcc,0x8d,0x8d,0x5f,0x13,0x15,0xc2,0xed,0x49,0x0c,0xa8,0x68, +0x5b,0xe8,0x67,0x7b,0x2e,0x7c,0x2c,0xd3,0x83,0xdf,0x88,0x13,0x89,0x1c,0x56,0x6b,0x84,0x27,0xab,0x35, +0xc2,0xa5,0x49,0x8b,0xb4,0xc6,0xa1,0xd0,0x43,0x80,0xba,0x2f,0x8d,0x9e,0xcc,0x64,0x3a,0xbe,0xea,0x71, +0x2a,0x84,0x33,0xf3,0x6b,0xcc,0x1d,0x1c,0x9f,0xdc,0x54,0xa2,0x3f,0xe0,0x09,0x2d,0x63,0x4b,0x29,0xeb, +0x23,0x9b,0xcb,0x88,0x2a,0xec,0x2e,0x96,0xc5,0xac,0x55,0x1c,0x67,0x27,0x38,0x5b,0xf4,0x8e,0x17,0xcb, +0x02,0x55,0x64,0xe3,0x09,0x47,0xaa,0xf3,0x80,0x41,0x75,0x10,0xb5,0x32,0x4b,0xf9,0xfd,0xc6,0x78,0xdd, +0x1c,0x64,0x5c,0x3b,0xb5,0x65,0xeb,0x18,0x79,0xda,0xa2,0x4c,0x1c,0x5d,0xc6,0xc6,0xcd,0x78,0x02,0x42, +0x79,0xf7,0x6c,0x9e,0x15,0x71,0x51,0x6a,0xd2,0x46,0xa9,0xdb,0x5e,0x0d,0x49,0xad,0x27,0xc0,0x4c,0xb6, +0x94,0xcc,0xfb,0x2e,0x22,0x5e,0x12,0xa0,0x72,0x10,0x6f,0x21,0x20,0x42,0x8e,0x45,0xf5,0x92,0x45,0x57, +0x88,0xad,0xa3,0x43,0xff,0x7e,0x5d,0xb9,0x47,0x0f,0x6c,0xeb,0xea,0x7f,0x97,0x2e,0x3c,0x64,0x34,0xdc, +0x46,0xd8,0xff,0xc9,0x3d,0xd2,0x9d,0x2d,0xfd,0xfe,0xcf,0x17,0xc9,0x8a,0xce,0xc3,0xc5,0xb5,0xa9,0xf3, +0xc8,0x6d,0x47,0xda,0xb6,0xab,0x5d,0x86,0x4c,0x73,0x1e,0xff,0x3a,0x6a,0x60,0x10,0xb2,0xaa,0xeb,0xbc, +0x5b,0x53,0x23,0xa7,0xcf,0xdf,0xbf,0x3b,0x3a,0x3d,0x02,0x96,0xfc,0xd5,0x8b,0x83,0xd3,0x17,0x7f,0x7b, +0xf1,0xee,0xe8,0x10,0xdb,0x7b,0xb8,0xbd,0x59,0xf6,0x40,0x7b,0x33,0x71,0x65,0xcf,0x56,0x6e,0xc0,0xbe, +0xbe,0xb5,0xa7,0x6a,0x6b,0x9f,0xe3,0xe5,0x1d,0xaa,0x42,0xad,0xdf,0xe1,0x64,0x67,0x2e,0xf7,0xf8,0x09, +0xec,0xf1,0x15,0x3e,0x5e,0xbb,0xe5,0x01,0xc9,0xe6,0xc7,0x93,0x93,0x2e,0x46,0x93,0x29,0x16,0xd1,0x59, +0x3c,0xf2,0xbc,0x81,0xd7,0xf5,0xda,0x66,0xaa,0x1f,0xd0,0x37,0x87,0x8c,0xca,0xfd,0x1b,0x6d,0x24,0x81, +0x01,0xa8,0x0c,0x31,0xc5,0xb3,0x52,0xe4,0x7a,0xfb,0xc2,0x7b,0xed,0x9d,0xe6,0x29,0x5b,0x2f,0x65,0xf6, +0xd4,0x84,0xf1,0xf5,0xf9,0xc6,0xe1,0xf6,0xc0,0xe5,0x5c,0x64,0xf7,0x9a,0x9c,0xb9,0x9a,0x9c,0x65,0x2d, +0xec,0x9f,0x50,0x6a,0xf9,0x3d,0x16,0xab,0xf4,0x42,0xe8,0x24,0x52,0xe9,0x58,0x94,0x14,0x79,0x94,0x22, +0x06,0x9a,0xa7,0xad,0xe6,0x3e,0xcc,0xd9,0x79,0xea,0xfa,0x9a,0x89,0x67,0xd7,0xb0,0xb7,0x82,0x23,0xd6, +0x15,0xae,0xaa,0xbc,0x8d,0xeb,0x2e,0xeb,0xb7,0x76,0xfb,0xca,0x7e,0x63,0xec,0x22,0x86,0x0f,0x3c,0xdb, +0xaa,0x9d,0x2f,0x31,0x4e,0x63,0xd3,0x8a,0xdd,0x75,0x9a,0xa2,0x36,0x93,0xbc,0x8a,0xdb,0xa0,0x6c,0xad, +0xb4,0x21,0x28,0x74,0xce,0xa2,0x30,0x39,0x8b,0xc8,0xc1,0x59,0x14,0xe2,0x32,0x81,0xb2,0xf6,0x58,0x0b, +0xff,0x8a,0x57,0x9b,0xaf,0xe6,0x15,0xca,0x3b,0x66,0x4b,0x78,0x5c,0xeb,0x24,0x56,0x5a,0x10,0xca,0x27, +0x30,0x05,0xed,0xf5,0xdf,0xba,0x36,0xc3,0x0f,0xe1,0xf5,0x48,0xbf,0x4f,0xc9,0x75,0x15,0xcb,0x58,0xab, +0x18,0x9e,0x53,0x85,0x61,0xcd,0xfe,0x99,0xcc,0xe7,0x11,0xc5,0xc3,0x74,0x69,0xce,0xa9,0x18,0x7e,0xc2, +0x12,0x20,0xec,0x6e,0xfb,0xb7,0xe2,0x6e,0x9a,0xf3,0xb2,0x2f,0xc4,0x64,0x22,0x1d,0x21,0x7e,0x80,0xd5, +0xfd,0x9e,0xde,0x76,0x95,0x2f,0xc4,0x85,0x08,0xd6,0x39,0x58,0x8b,0xc6,0x45,0x36,0x5f,0x96,0xf1,0x70, +0x0d,0x45,0x4a,0xc0,0x84,0xae,0x91,0x58,0x08,0x7f,0x08,0x53,0x0e,0xfc,0xc9,0xe6,0x1b,0xf0,0x4b,0x73, +0x9b,0xc8,0xd3,0x55,0xb9,0x18,0x81,0x81,0x15,0xfe,0x45,0x9e,0x7d,0x7d,0x33,0x69,0xd5,0xdb,0x6e,0x7c, +0x38,0x1b,0xaa,0x28,0x4c,0xb9,0xe5,0x8d,0x8f,0x05,0x1d,0x62,0x8b,0x3f,0x88,0xe7,0x11,0x2e,0xb9,0xaa, +0xca,0x67,0xcb,0xe9,0xcb,0xe4,0x8b,0x71,0x97,0x45,0xa4,0xe2,0xdf,0x17,0xa9,0x38,0xe8,0xb1,0xfb,0xfe, +0xf3,0x92,0x1e,0x3d,0x63,0x94,0xf9,0xc0,0x4d,0x75,0x55,0x64,0xa9,0x1e,0xdd,0x99,0x6f,0x60,0xe6,0xb5, +0x38,0xa4,0x97,0x16,0x55,0x6f,0x0b,0x67,0xcf,0xee,0xff,0x03,0x23,0x7f,0x46,0xfa,0x63,0x70,0x03,0x00 }; \ No newline at end of file diff --git a/code/espurna/system.ino b/code/espurna/system.ino index fb1d1ed0..e437bccc 100644 --- a/code/espurna/system.ino +++ b/code/espurna/system.ino @@ -6,7 +6,7 @@ Copyright (C) 2018 by Xose Pérez */ -#include +#include // ----------------------------------------------------------------------------- @@ -30,7 +30,7 @@ unsigned short int _load_average = 100; bool _systemStable = true; void systemCheck(bool stable) { - unsigned char value = EEPROM.read(EEPROM_CRASH_COUNTER); + unsigned char value = EEPROMr.read(EEPROM_CRASH_COUNTER); if (stable) { value = 0; DEBUG_MSG_P(PSTR("[MAIN] System OK\n")); @@ -41,8 +41,8 @@ void systemCheck(bool stable) { DEBUG_MSG_P(PSTR("[MAIN] System UNSTABLE\n")); } } - EEPROM.write(EEPROM_CRASH_COUNTER, value); - EEPROM.commit(); + EEPROMr.write(EEPROM_CRASH_COUNTER, value); + EEPROMr.commit(); } bool systemCheck() { @@ -148,8 +148,6 @@ void _systemSetupSpecificHardware() { void systemSetup() { - EEPROM.begin(EEPROM_SIZE); - #if SPIFFS_SUPPORT SPIFFS.begin(); #endif diff --git a/code/espurna/telnet.ino b/code/espurna/telnet.ino index 006d5d21..4f858ab4 100644 --- a/code/espurna/telnet.ino +++ b/code/espurna/telnet.ino @@ -138,7 +138,7 @@ void _telnetNewClient(AsyncClient *client) { // If there is no terminal support automatically dump info and crash data #if TERMINAL_SUPPORT == 0 info(); - wifiStatus(); + wifiDebug(); debugDumpCrashInfo(); debugClearCrashInfo(); #endif diff --git a/code/espurna/utils.ino b/code/espurna/utils.ino index e6850152..d50ff79d 100644 --- a/code/espurna/utils.ino +++ b/code/espurna/utils.ino @@ -211,10 +211,42 @@ void heartbeat() { #endif /// HEARTBEAT_ENABLED -unsigned int sectors(size_t size) { +// ----------------------------------------------------------------------------- +// INFO +// ----------------------------------------------------------------------------- + +extern "C" uint32_t _SPIFFS_start; +extern "C" uint32_t _SPIFFS_end; + +unsigned int info_bytes2sectors(size_t size) { return (int) (size + SPI_FLASH_SEC_SIZE - 1) / SPI_FLASH_SEC_SIZE; } +unsigned long info_ota_space() { + return (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000; +} + +unsigned long info_filesystem_space() { + return ((uint32_t)&_SPIFFS_end - (uint32_t)&_SPIFFS_start); +} + +unsigned long info_eeprom_space() { + return EEPROMr.reserved() * SPI_FLASH_SEC_SIZE; +} + +void _info_print_memory_layout_line(const char * name, unsigned long bytes, bool reset) { + static unsigned long index = 0; + if (reset) index = 0; + if (0 == bytes) return; + unsigned int _sectors = info_bytes2sectors(bytes); + DEBUG_MSG_P(PSTR("[INIT] %-20s: %8lu bytes / %4d sectors (%4d to %4d)\n"), name, bytes, _sectors, index, index + _sectors - 1); + index += _sectors; +} + +void _info_print_memory_layout_line(const char * name, unsigned long bytes) { + _info_print_memory_layout_line(name, bytes, false); +} + void info() { DEBUG_MSG_P(PSTR("\n\n")); @@ -235,13 +267,18 @@ void info() { DEBUG_MSG_P(PSTR("[INIT] Flash speed: %u Hz\n"), ESP.getFlashChipSpeed()); DEBUG_MSG_P(PSTR("[INIT] Flash mode: %s\n"), mode == FM_QIO ? "QIO" : mode == FM_QOUT ? "QOUT" : mode == FM_DIO ? "DIO" : mode == FM_DOUT ? "DOUT" : "UNKNOWN"); DEBUG_MSG_P(PSTR("\n")); - DEBUG_MSG_P(PSTR("[INIT] Flash sector size: %8u bytes\n"), SPI_FLASH_SEC_SIZE); - DEBUG_MSG_P(PSTR("[INIT] Flash size (CHIP): %8u bytes\n"), ESP.getFlashChipRealSize()); - DEBUG_MSG_P(PSTR("[INIT] Flash size (SDK): %8u bytes / %4d sectors\n"), ESP.getFlashChipSize(), sectors(ESP.getFlashChipSize())); - DEBUG_MSG_P(PSTR("[INIT] Firmware size: %8u bytes / %4d sectors\n"), ESP.getSketchSize(), sectors(ESP.getSketchSize())); - DEBUG_MSG_P(PSTR("[INIT] Max OTA size: %8u bytes / %4d sectors\n"), maxSketchSpace(), sectors(maxSketchSpace())); - DEBUG_MSG_P(PSTR("[INIT] EEPROM size: %8u bytes / %4d sectors\n"), settingsMaxSize(), sectors(settingsMaxSize())); - DEBUG_MSG_P(PSTR("[INIT] Empty space: %8u bytes / 4 sectors\n"), 4 * SPI_FLASH_SEC_SIZE); + + _info_print_memory_layout_line("Flash size (CHIP)", ESP.getFlashChipRealSize(), true); + _info_print_memory_layout_line("Flash size (SDK)", ESP.getFlashChipSize(), true); + _info_print_memory_layout_line("Reserved", 1 * SPI_FLASH_SEC_SIZE, true); + _info_print_memory_layout_line("Firmware size", ESP.getSketchSize()); + _info_print_memory_layout_line("Max OTA size", info_ota_space()); + _info_print_memory_layout_line("SPIFFS size", info_filesystem_space()); + _info_print_memory_layout_line("EEPROM size", info_eeprom_space()); + _info_print_memory_layout_line("Reserved", 4 * SPI_FLASH_SEC_SIZE); + DEBUG_MSG_P(PSTR("\n")); + + DEBUG_MSG_P(PSTR("[INIT] EEPROM sectors: %s\n"), (char *) eepromSectors().c_str()); DEBUG_MSG_P(PSTR("\n")); // ------------------------------------------------------------------------- @@ -508,7 +545,7 @@ bool sslFingerPrintChar(const char * fingerprint, char * destination) { unsigned char resetReason() { static unsigned char status = 255; if (status == 255) { - status = EEPROM.read(EEPROM_CUSTOM_RESET); + status = EEPROMr.read(EEPROM_CUSTOM_RESET); if (status > 0) resetReason(0); if (status > CUSTOM_RESET_MAX) status = 0; } @@ -516,8 +553,8 @@ unsigned char resetReason() { } void resetReason(unsigned char reason) { - EEPROM.write(EEPROM_CUSTOM_RESET, reason); - EEPROM.commit(); + EEPROMr.write(EEPROM_CUSTOM_RESET, reason); + EEPROMr.commit(); } void reset(unsigned char reason) { diff --git a/code/espurna/web.ino b/code/espurna/web.ino index 8deb4c4d..3e8447fb 100644 --- a/code/espurna/web.ino +++ b/code/espurna/web.ino @@ -43,7 +43,7 @@ void _onReset(AsyncWebServerRequest *request) { void _onGetConfig(AsyncWebServerRequest *request) { webLog(request); - if (!_authenticate(request)) return request->requestAuthentication(getSetting("hostname").c_str()); + if (!webAuthenticate(request)) return request->requestAuthentication(getSetting("hostname").c_str()); AsyncResponseStream *response = request->beginResponseStream("text/json"); @@ -64,7 +64,7 @@ void _onGetConfig(AsyncWebServerRequest *request) { void _onPostConfig(AsyncWebServerRequest *request) { webLog(request); - if (!_authenticate(request)) return request->requestAuthentication(getSetting("hostname").c_str()); + if (!webAuthenticate(request)) return request->requestAuthentication(getSetting("hostname").c_str()); request->send(_webConfigSuccess ? 200 : 400); } @@ -112,7 +112,7 @@ void _onPostConfigData(AsyncWebServerRequest *request, String filename, size_t i void _onHome(AsyncWebServerRequest *request) { webLog(request); - if (!_authenticate(request)) return request->requestAuthentication(getSetting("hostname").c_str()); + if (!webAuthenticate(request)) return request->requestAuthentication(getSetting("hostname").c_str()); if (request->header("If-Modified-Since").equals(_last_modified)) { @@ -212,7 +212,7 @@ int _onCertificate(void * arg, const char *filename, uint8_t **buf) { void _onUpgrade(AsyncWebServerRequest *request) { webLog(request); - if (!_authenticate(request)) return request->requestAuthentication(getSetting("hostname").c_str()); + if (!webAuthenticate(request)) return request->requestAuthentication(getSetting("hostname").c_str()); char buffer[10]; if (!Update.hasError()) { @@ -223,7 +223,9 @@ void _onUpgrade(AsyncWebServerRequest *request) { AsyncWebServerResponse *response = request->beginResponse(200, "text/plain", buffer); response->addHeader("Connection", "close"); - if (!Update.hasError()) { + if (Update.hasError()) { + eepromRotate(true); + } else { deferredReset(100, CUSTOM_RESET_UPGRADE); } request->send(response); @@ -231,7 +233,12 @@ void _onUpgrade(AsyncWebServerRequest *request) { } void _onUpgradeData(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) { + if (!index) { + + // Disabling EEPROM rotation to prevent writing to EEPROM after the upgrade + eepromRotate(false); + DEBUG_MSG_P(PSTR("[UPGRADE] Start: %s\n"), filename.c_str()); Update.runAsync(true); if (!Update.begin((ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000)) { @@ -239,7 +246,9 @@ void _onUpgradeData(AsyncWebServerRequest *request, String filename, size_t inde Update.printError(DEBUG_PORT); #endif } + } + if (!Update.hasError()) { if (Update.write(data, len) != len) { #ifdef DEBUG_PORT @@ -247,6 +256,7 @@ void _onUpgradeData(AsyncWebServerRequest *request, String filename, size_t inde #endif } } + if (final) { if (Update.end(true)){ DEBUG_MSG_P(PSTR("[UPGRADE] Success: %u bytes\n"), index + len); @@ -262,7 +272,7 @@ void _onUpgradeData(AsyncWebServerRequest *request, String filename, size_t inde // ----------------------------------------------------------------------------- -bool _authenticate(AsyncWebServerRequest *request) { +bool webAuthenticate(AsyncWebServerRequest *request) { #if USE_PASSWORD String password = getSetting("adminPass", ADMIN_PASS); char httpPassword[password.length() + 1]; diff --git a/code/espurna/wifi.ino b/code/espurna/wifi.ino index 04e98d4d..37f55464 100644 --- a/code/espurna/wifi.ino +++ b/code/espurna/wifi.ino @@ -10,11 +10,26 @@ Copyright (C) 2016-2018 by Xose Pérez #include uint32_t _wifi_scan_client_id = 0; +bool _wifi_wps_running = false; +bool _wifi_smartconfig_running = false; +uint8_t _wifi_ap_mode = WIFI_AP_FALLBACK; // ----------------------------------------------------------------------------- // PRIVATE // ----------------------------------------------------------------------------- +void _wifiCheckAP() { + + if ((WIFI_AP_FALLBACK == _wifi_ap_mode) && + (jw.connected()) && + ((WiFi.getMode() & WIFI_AP) > 0) && + (WiFi.softAPgetStationNum() == 0) + ) { + jw.enableAP(false); + } + +} + void _wifiConfigure() { jw.setHostname(getSetting("hostname").c_str()); @@ -25,9 +40,11 @@ void _wifiConfigure() { #endif jw.setConnectTimeout(WIFI_CONNECT_TIMEOUT); wifiReconnectCheck(); - jw.setAPMode(WIFI_AP_MODE); + jw.enableAPFallback(true); jw.cleanNetworks(); + _wifi_ap_mode = getSetting("apmode", WIFI_AP_FALLBACK).toInt(); + // If system is flagged unstable we do not init wifi networks #if SYSTEM_CHECK_ENABLED if (!systemCheck()) return; @@ -56,7 +73,7 @@ void _wifiConfigure() { } } - jw.scanNetworks(getSetting("wifiScan", WIFI_SCAN_NETWORKS).toInt() == 1); + jw.enableScan(getSetting("wifiScan", WIFI_SCAN_NETWORKS).toInt() == 1); } @@ -196,6 +213,47 @@ void _wifiInject() { } } +void _wifiCallback(justwifi_messages_t code, char * parameter) { + + if (MESSAGE_WPS_START == code) { + _wifi_wps_running = true; + } + + if (MESSAGE_SMARTCONFIG_START == code) { + _wifi_smartconfig_running = true; + } + + if (MESSAGE_WPS_ERROR == code || MESSAGE_SMARTCONFIG_ERROR == code) { + _wifi_wps_running = false; + _wifi_smartconfig_running = false; + } + + if (MESSAGE_WPS_SUCCESS == code || MESSAGE_SMARTCONFIG_SUCCESS == code) { + + String ssid = WiFi.SSID(); + String pass = WiFi.psk(); + + // Look for the same SSID + uint8_t count = 0; + while (count < WIFI_MAX_NETWORKS) { + if (!hasSetting("ssid", count)) break; + if (ssid.equals(getSetting("ssid", count, ""))) break; + count++; + } + + // If we have reached the max we overwrite the first one + if (WIFI_MAX_NETWORKS == count) count = 0; + + setSetting("ssid", count, ssid); + setSetting("pass", count, pass); + + _wifi_wps_running = false; + _wifi_smartconfig_running = false; + + } + +} + #if WIFI_AP_CAPTIVE #include "DNSServer.h" @@ -221,7 +279,9 @@ void _wifiCaptivePortal(justwifi_messages_t code, char * parameter) { #if DEBUG_SUPPORT -void _wifiDebug(justwifi_messages_t code, char * parameter) { +void _wifiDebugCallback(justwifi_messages_t code, char * parameter) { + + // ------------------------------------------------------------------------- if (code == MESSAGE_SCANNING) { DEBUG_MSG_P(PSTR("[WIFI] Scanning\n")); @@ -243,6 +303,8 @@ void _wifiDebug(justwifi_messages_t code, char * parameter) { DEBUG_MSG_P(PSTR("[WIFI] %s\n"), parameter); } + // ------------------------------------------------------------------------- + if (code == MESSAGE_CONNECTING) { DEBUG_MSG_P(PSTR("[WIFI] Connecting to %s\n"), parameter); } @@ -256,25 +318,59 @@ void _wifiDebug(justwifi_messages_t code, char * parameter) { } if (code == MESSAGE_CONNECTED) { - wifiStatus(); - } - - if (code == MESSAGE_ACCESSPOINT_CREATED) { - wifiStatus(); + wifiDebug(WIFI_STA); } if (code == MESSAGE_DISCONNECTED) { DEBUG_MSG_P(PSTR("[WIFI] Disconnected\n")); } + // ------------------------------------------------------------------------- + if (code == MESSAGE_ACCESSPOINT_CREATING) { DEBUG_MSG_P(PSTR("[WIFI] Creating access point\n")); } + if (code == MESSAGE_ACCESSPOINT_CREATED) { + wifiDebug(WIFI_AP); + } + if (code == MESSAGE_ACCESSPOINT_FAILED) { DEBUG_MSG_P(PSTR("[WIFI] Could not create access point\n")); } + if (code == MESSAGE_ACCESSPOINT_DESTROYED) { + DEBUG_MSG_P(PSTR("[WIFI] Access point destroyed\n")); + } + + // ------------------------------------------------------------------------- + + if (code == MESSAGE_WPS_START) { + DEBUG_MSG_P(PSTR("[WIFI] WPS started\n")); + } + + if (code == MESSAGE_WPS_SUCCESS) { + DEBUG_MSG_P(PSTR("[WIFI] WPS succeded!\n")); + } + + if (code == MESSAGE_WPS_ERROR) { + DEBUG_MSG_P(PSTR("[WIFI] WPS failed\n")); + } + + // ------------------------------------------------------------------------ + + if (code == MESSAGE_SMARTCONFIG_START) { + DEBUG_MSG_P(PSTR("[WIFI] Smart Config started\n")); + } + + if (code == MESSAGE_SMARTCONFIG_SUCCESS) { + DEBUG_MSG_P(PSTR("[WIFI] Smart Config succeded!\n")); + } + + if (code == MESSAGE_SMARTCONFIG_ERROR) { + DEBUG_MSG_P(PSTR("[WIFI] Smart Config failed\n")); + } + } #endif // DEBUG_SUPPORT @@ -294,10 +390,24 @@ void _wifiInitCommands() { }); settingsRegisterCommand(F("WIFI.AP"), [](Embedis* e) { - createAP(); + wifiStartAP(); DEBUG_MSG_P(PSTR("+OK\n")); }); + #if defined(JUSTWIFI_ENABLE_WPS) + settingsRegisterCommand(F("WIFI.WPS"), [](Embedis* e) { + wifiStartWPS(); + DEBUG_MSG_P(PSTR("+OK\n")); + }); + #endif // defined(JUSTWIFI_ENABLE_WPS) + + #if defined(JUSTWIFI_ENABLE_SMARTCONFIG) + settingsRegisterCommand(F("WIFI.SMARTCONFIG"), [](Embedis* e) { + wifiStartSmartConfig(); + DEBUG_MSG_P(PSTR("+OK\n")); + }); + #endif // defined(JUSTWIFI_ENABLE_SMARTCONFIG) + settingsRegisterCommand(F("WIFI.SCAN"), [](Embedis* e) { _wifiScan(); DEBUG_MSG_P(PSTR("+OK\n")); @@ -346,6 +456,59 @@ void _wifiWebSocketOnAction(uint32_t client_id, const char * action, JsonObject& #endif +// ----------------------------------------------------------------------------- +// INFO +// ----------------------------------------------------------------------------- + +void wifiDebug(WiFiMode_t modes) { + + bool footer = false; + + if (((modes & WIFI_STA) > 0) && ((WiFi.getMode() & WIFI_STA) > 0)) { + + uint8_t * bssid = WiFi.BSSID(); + DEBUG_MSG_P(PSTR("[WIFI] ------------------------------------- MODE STA\n")); + DEBUG_MSG_P(PSTR("[WIFI] SSID %s\n"), WiFi.SSID().c_str()); + DEBUG_MSG_P(PSTR("[WIFI] IP %s\n"), WiFi.localIP().toString().c_str()); + DEBUG_MSG_P(PSTR("[WIFI] MAC %s\n"), WiFi.macAddress().c_str()); + DEBUG_MSG_P(PSTR("[WIFI] GW %s\n"), WiFi.gatewayIP().toString().c_str()); + DEBUG_MSG_P(PSTR("[WIFI] DNS %s\n"), WiFi.dnsIP().toString().c_str()); + DEBUG_MSG_P(PSTR("[WIFI] MASK %s\n"), WiFi.subnetMask().toString().c_str()); + DEBUG_MSG_P(PSTR("[WIFI] HOST http://%s.local\n"), WiFi.hostname().c_str()); + DEBUG_MSG_P(PSTR("[WIFI] BSSID %02X:%02X:%02X:%02X:%02X:%02X\n"), + bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5], bssid[6] + ); + DEBUG_MSG_P(PSTR("[WIFI] CH %d\n"), WiFi.channel()); + DEBUG_MSG_P(PSTR("[WIFI] RSSI %d\n"), WiFi.RSSI()); + footer = true; + + } + + if (((modes & WIFI_AP) > 0) && ((WiFi.getMode() & WIFI_AP) > 0)) { + DEBUG_MSG_P(PSTR("[WIFI] -------------------------------------- MODE AP\n")); + DEBUG_MSG_P(PSTR("[WIFI] SSID %s\n"), getSetting("hostname").c_str()); + DEBUG_MSG_P(PSTR("[WIFI] PASS %s\n"), getSetting("adminPass", ADMIN_PASS).c_str()); + DEBUG_MSG_P(PSTR("[WIFI] IP %s\n"), WiFi.softAPIP().toString().c_str()); + DEBUG_MSG_P(PSTR("[WIFI] MAC %s\n"), WiFi.softAPmacAddress().c_str()); + footer = true; + } + + if (WiFi.getMode() == 0) { + DEBUG_MSG_P(PSTR("[WIFI] ------------------------------------- MODE OFF\n")); + DEBUG_MSG_P(PSTR("[WIFI] No connection\n")); + footer = true; + } + + if (footer) { + DEBUG_MSG_P(PSTR("[WIFI] ----------------------------------------------\n")); + } + +} + +void wifiDebug() { + wifiDebug(WIFI_AP_STA); +} + // ----------------------------------------------------------------------------- // API // ----------------------------------------------------------------------------- @@ -372,11 +535,30 @@ void wifiDisconnect() { jw.disconnect(); } -bool createAP() { - jw.disconnect(); - jw.resetReconnectTimeout(); - return jw.createAP(); +void wifiStartAP(bool only) { + if (only) { + jw.enableSTA(false); + jw.disconnect(); + jw.resetReconnectTimeout(); + } + jw.enableAP(true); +} + +void wifiStartAP() { + wifiStartAP(true); +} + +#if defined(JUSTWIFI_ENABLE_WPS) +void wifiStartWPS() { + jw.startWPS(); } +#endif // defined(JUSTWIFI_ENABLE_WPS) + +#if defined(JUSTWIFI_ENABLE_SMARTCONFIG) +void wifiStartSmartConfig() { + jw.startSmartConfig(); +} +#endif // defined(JUSTWIFI_ENABLE_SMARTCONFIG) void wifiReconnectCheck() { bool connected = false; @@ -389,44 +571,13 @@ void wifiReconnectCheck() { jw.setReconnectTimeout(connected ? 0 : WIFI_RECONNECT_INTERVAL); } -void wifiStatus() { - - if (WiFi.getMode() == WIFI_AP_STA) { - DEBUG_MSG_P(PSTR("[WIFI] MODE AP + STA --------------------------------\n")); - } else if (WiFi.getMode() == WIFI_AP) { - DEBUG_MSG_P(PSTR("[WIFI] MODE AP --------------------------------------\n")); - } else if (WiFi.getMode() == WIFI_STA) { - DEBUG_MSG_P(PSTR("[WIFI] MODE STA -------------------------------------\n")); - } else { - DEBUG_MSG_P(PSTR("[WIFI] MODE OFF -------------------------------------\n")); - DEBUG_MSG_P(PSTR("[WIFI] No connection\n")); - } - - if ((WiFi.getMode() & WIFI_AP) == WIFI_AP) { - DEBUG_MSG_P(PSTR("[WIFI] SSID %s\n"), jw.getAPSSID().c_str()); - DEBUG_MSG_P(PSTR("[WIFI] PASS %s\n"), getSetting("adminPass", ADMIN_PASS).c_str()); - DEBUG_MSG_P(PSTR("[WIFI] IP %s\n"), WiFi.softAPIP().toString().c_str()); - DEBUG_MSG_P(PSTR("[WIFI] MAC %s\n"), WiFi.softAPmacAddress().c_str()); - } - - if ((WiFi.getMode() & WIFI_STA) == WIFI_STA) { - uint8_t * bssid = WiFi.BSSID(); - DEBUG_MSG_P(PSTR("[WIFI] SSID %s\n"), WiFi.SSID().c_str()); - DEBUG_MSG_P(PSTR("[WIFI] IP %s\n"), WiFi.localIP().toString().c_str()); - DEBUG_MSG_P(PSTR("[WIFI] MAC %s\n"), WiFi.macAddress().c_str()); - DEBUG_MSG_P(PSTR("[WIFI] GW %s\n"), WiFi.gatewayIP().toString().c_str()); - DEBUG_MSG_P(PSTR("[WIFI] DNS %s\n"), WiFi.dnsIP().toString().c_str()); - DEBUG_MSG_P(PSTR("[WIFI] MASK %s\n"), WiFi.subnetMask().toString().c_str()); - DEBUG_MSG_P(PSTR("[WIFI] HOST http://%s.local\n"), WiFi.hostname().c_str()); - DEBUG_MSG_P(PSTR("[WIFI] BSSID %02X:%02X:%02X:%02X:%02X:%02X\n"), - bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5], bssid[6] - ); - DEBUG_MSG_P(PSTR("[WIFI] CH %d\n"), WiFi.channel()); - DEBUG_MSG_P(PSTR("[WIFI] RSSI %d\n"), WiFi.RSSI()); - } - - DEBUG_MSG_P(PSTR("[WIFI] ----------------------------------------------\n")); - +uint8_t wifiState() { + uint8_t state = 0; + if (jw.connected()) state += WIFI_STATE_STA; + if (jw.connectable()) state += WIFI_STATE_AP; + if (_wifi_wps_running) state += WIFI_STATE_WPS; + if (_wifi_smartconfig_running) state += WIFI_STATE_SMARTCONFIG; + return state; } void wifiRegister(wifi_callback_f callback) { @@ -445,11 +596,12 @@ void wifiSetup() { _wifiConfigure(); // Message callbacks + wifiRegister(_wifiCallback); #if WIFI_AP_CAPTIVE wifiRegister(_wifiCaptivePortal); #endif #if DEBUG_SUPPORT - wifiRegister(_wifiDebug); + wifiRegister(_wifiDebugCallback); #endif #if WEB_SUPPORT @@ -470,17 +622,27 @@ void wifiSetup() { void wifiLoop() { + // Main wifi loop jw.loop(); + // Process captrive portal DNS queries if in AP mode only #if WIFI_AP_CAPTIVE if ((WiFi.getMode() & WIFI_AP) == WIFI_AP) { _wifi_dnsServer.processNextRequest(); } #endif + // Do we have a pending scan? if (_wifi_scan_client_id > 0) { _wifiScan(_wifi_scan_client_id); _wifi_scan_client_id = 0; } + // Check if we should disable AP + static unsigned long last = 0; + if (millis() - last > 60000) { + last = millis(); + _wifiCheckAP(); + } + } diff --git a/code/espurna/ws.ino b/code/espurna/ws.ino index 68a18ba2..caf5ce98 100644 --- a/code/espurna/ws.ino +++ b/code/espurna/ws.ino @@ -27,6 +27,57 @@ std::vector _ws_on_receive_callbacks; // Private methods // ----------------------------------------------------------------------------- +typedef struct { + IPAddress ip; + unsigned long timestamp = 0; +} ws_ticket_t; +ws_ticket_t _ticket[WS_BUFFER_SIZE]; + +void _onAuth(AsyncWebServerRequest *request) { + + webLog(request); + if (!webAuthenticate(request)) return request->requestAuthentication(); + + IPAddress ip = request->client()->remoteIP(); + unsigned long now = millis(); + unsigned short index; + for (index = 0; index < WS_BUFFER_SIZE; index++) { + if (_ticket[index].ip == ip) break; + if (_ticket[index].timestamp == 0) break; + if (now - _ticket[index].timestamp > WS_TIMEOUT) break; + } + if (index == WS_BUFFER_SIZE) { + request->send(429); + } else { + _ticket[index].ip = ip; + _ticket[index].timestamp = now; + request->send(200, "text/plain", "OK"); + } + +} + +bool _wsAuth(AsyncWebSocketClient * client) { + + IPAddress ip = client->remoteIP(); + unsigned long now = millis(); + unsigned short index = 0; + + for (index = 0; index < WS_BUFFER_SIZE; index++) { + if ((_ticket[index].ip == ip) && (now - _ticket[index].timestamp < WS_TIMEOUT)) break; + } + + if (index == WS_BUFFER_SIZE) { + DEBUG_MSG_P(PSTR("[WEBSOCKET] Validation check failed\n")); + wsSend_P(client->id(), PSTR("{\"message\": 10}")); + return false; + } + + return true; + +} + +// ----------------------------------------------------------------------------- + #if MQTT_SUPPORT void _wsMQTTCallback(unsigned int type, const char * topic, const char * payload) { if (type == MQTT_CONNECT_EVENT) wsSend_P(PSTR("{\"mqttStatus\": true}")); @@ -315,6 +366,11 @@ void _wsStart(uint32_t client_id) { void _wsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){ if (type == WS_EVT_CONNECT) { + + #ifndef NOWSAUTH + if (!_wsAuth(client)) return; + #endif + IPAddress ip = client->remoteIP(); DEBUG_MSG_P(PSTR("[WEBSOCKET] #%u connected, ip: %d.%d.%d.%d, url: %s\n"), client->id(), ip[0], ip[1], ip[2], ip[3], server->url()); _wsStart(client->id()); @@ -421,17 +477,6 @@ void wsSend_P(uint32_t client_id, PGM_P payload) { _ws.text(client_id, buffer); } -void wsConfigure() { - #if USE_PASSWORD - bool auth = getSetting("wsAuth", WS_AUTHENTICATION).toInt() == 1; - if (auth) { - _ws.setAuthentication(WEB_USERNAME, (const char *) getSetting("adminPass", ADMIN_PASS).c_str()); - } else { - _ws.setAuthentication("", ""); - } - #endif -} - // This method being public makes // _ws_on_after_parse_callbacks strange here, // it should belong somewhere else. @@ -443,14 +488,13 @@ void wsReload() { void wsSetup() { _ws.onEvent(_wsEvent); - wsConfigure(); webServer()->addHandler(&_ws); + webServer()->on("/auth", HTTP_GET, _onAuth); #if MQTT_SUPPORT mqttRegister(_wsMQTTCallback); #endif wsOnSendRegister(_wsOnStart); wsOnReceiveRegister(_wsOnReceive); - wsOnAfterParseRegister(wsConfigure); espurnaRegisterLoop(_wsLoop); } diff --git a/code/html/custom.js b/code/html/custom.js index 2efd3644..0355c4d6 100644 --- a/code/html/custom.js +++ b/code/html/custom.js @@ -510,7 +510,7 @@ function onFileUpload(event) { if (data) { sendAction("restore", data); } else { - alert(messages[4]); + window.alert(messages[4]); } }; reader.readAsText(inputFile); @@ -1351,7 +1351,7 @@ function hasChanged() { function initUrls(root) { - var paths = ["ws", "upgrade", "config"]; + var paths = ["ws", "upgrade", "config", "auth"]; urls["root"] = root; paths.forEach(function(path) { @@ -1363,15 +1363,26 @@ function initUrls(root) { } function connectToURL(url) { + initUrls(url); - if (websock) { websock.close(); } - websock = new WebSocket(urls.ws.href); - websock.onmessage = function(evt) { - var data = getJson(evt.data.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t")); - if (data) { - processData(data); - } - }; + + $.ajax({ + 'method': 'GET', + 'url': urls.auth.href, + 'xhrFields': { 'withCredentials': true } + }).done(function(data) { + if (websock) { websock.close(); } + websock = new WebSocket(urls.ws.href); + websock.onmessage = function(evt) { + var data = getJson(evt.data.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t")); + if (data) { + processData(data); + } + }; + }).fail(function() { + // Nothing to do, reload page and retry + }); + } function connect(host) { diff --git a/code/platformio.ini b/code/platformio.ini index 9fe2e893..d0e38f68 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -35,9 +35,11 @@ debug_flags = -DDEBUG_ESP_CORE -DDEBUG_ESP_SSL -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP # -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY v2 Lower Memory # -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH v2 Higher Bandwidth # ------------------------------------------------------------------------------ -build_flags = -g -DMQTT_MAX_PACKET_SIZE=400 ${env.ESPURNA_FLAGS} -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH -build_flags_512k = ${common.build_flags} -Wl,-Tesp8266.flash.512k0.ld -build_flags_1m = ${common.build_flags} -Wl,-Tesp8266.flash.1m0.ld +build_flags = -g -w -DMQTT_MAX_PACKET_SIZE=400 -DJUSTWIFI_ENABLE_SMARTCONFIG -DNO_GLOBAL_EEPROM ${env.ESPURNA_FLAGS} -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH +build_flags_512k = ${common.build_flags} -Wl,-Teagle.flash.512k0m1s.ld +build_flags_1m0m = ${common.build_flags} -Wl,-Teagle.flash.1m0m1s.ld +build_flags_4m1m = ${common.build_flags} -Wl,-Teagle.flash.4m1m4s.ld +build_flags_4m3m = ${common.build_flags} -Wl,-Teagle.flash.4m3m4s.ld # ------------------------------------------------------------------------------ # GLOBALS: @@ -57,14 +59,15 @@ lib_deps = https://github.com/marvinroger/async-mqtt-client#v0.8.1 Brzo I2C https://bitbucket.org/xoseperez/debounceevent.git#2.0.1 + https://github.com/xoseperez/eeprom_rotate#0.9.1 Embedis https://github.com/plerup/espsoftwareserial#3.4.1 https://github.com/me-no-dev/ESPAsyncTCP#55cd520 - https://github.com/me-no-dev/ESPAsyncWebServer#232b87a + https://github.com/me-no-dev/ESPAsyncWebServer#05306e4 https://bitbucket.org/xoseperez/fauxmoesp.git#2.4.2 https://github.com/xoseperez/hlw8012.git#1.1.0 https://github.com/markszabo/IRremoteESP8266#v2.2.0 - https://github.com/xoseperez/justwifi.git#1.2.0 + https://github.com/xoseperez/justwifi.git#2.0.0 https://github.com/madpilot/mDNSResolver#4cfcda1 https://github.com/xoseperez/my92xx#3.0.1 https://bitbucket.org/xoseperez/nofuss.git#0.2.5 @@ -85,22 +88,22 @@ extra_scripts = extra_scripts.py platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DESPURNA_CORE -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DESPURNA_CORE +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:espurna-core-4MB] platform = ${common.platform} framework = arduino board = d1_mini -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DESPURNA_CORE -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DESPURNA_CORE +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} # ------------------------------------------------------------------------------ @@ -111,10 +114,10 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -D${env.ESPURNA_BOARD} +build_flags = ${common.build_flags_1m0m} -D${env.ESPURNA_BOARD} upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -124,10 +127,10 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -D${env.ESPURNA_BOARD} +build_flags = ${common.build_flags_4m1m} -D${env.ESPURNA_BOARD} upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -142,8 +145,8 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DTRAVIS01 -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DTRAVIS01 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:travis02] @@ -152,8 +155,8 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DTRAVIS02 -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DTRAVIS02 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:travis03] @@ -162,8 +165,8 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DTRAVIS03 -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DTRAVIS03 -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} # ------------------------------------------------------------------------------ @@ -176,9 +179,9 @@ framework = arduino board = d1_mini lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH +build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH upload_speed = 460800 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:wemos-d1mini-relayshield-ssl] @@ -187,9 +190,9 @@ framework = arduino board = d1_mini lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 +build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 upload_speed = 460800 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:wemos-d1mini-relayshield-ota] @@ -198,7 +201,7 @@ framework = arduino board = d1_mini lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH +build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} @@ -210,9 +213,9 @@ framework = arduino board = nodemcuv2 lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH +build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH upload_speed = 460800 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:nodemcu-lolin-ssl] @@ -221,9 +224,9 @@ framework = arduino board = nodemcuv2 lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 +build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1 upload_speed = 460800 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:nodemcu-lolin-ota] @@ -232,11 +235,11 @@ framework = arduino board = nodemcuv2 lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH +build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} # ------------------------------------------------------------------------------ @@ -249,8 +252,8 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DTINKERMAN_ESPURNA_H06 -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H06 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:tinkerman-espurna-h06-ota] @@ -259,11 +262,11 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DTINKERMAN_ESPURNA_H06 +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H06 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:tinkerman-espurna-h08] @@ -272,8 +275,8 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DTINKERMAN_ESPURNA_H08 -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H08 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:tinkerman-espurna-h08-ota] @@ -282,11 +285,11 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DTINKERMAN_ESPURNA_H08 +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H08 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:tinkerman-espurna-switch] @@ -295,8 +298,8 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DTINKERMAN_ESPURNA_SWITCH -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_SWITCH +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:wemos-d1-tarpunashield] @@ -305,8 +308,8 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DWEMOS_D1_TARPUNA_SHIELD -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_TARPUNA_SHIELD +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} # ------------------------------------------------------------------------------ @@ -315,181 +318,181 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-basic-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-basic-dht] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-basic-dht-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-basic-dallas] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC -DDALLAS_SUPPORT=1 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDALLAS_SUPPORT=1 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-rf] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_RF -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RF +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-rf-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_RF +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RF upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-th] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_TH -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TH +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-th-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_TH +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TH upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-pow] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_POW -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-pow-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_POW +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-pow-r2] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_POW_R2 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW_R2 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-pow-r2-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_POW_R2 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW_R2 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-dual] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_DUAL +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL extra_scripts = ${common.extra_scripts} [env:itead-sonoff-dual-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_DUAL +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} @@ -499,20 +502,20 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_DUAL_R2 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL_R2 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-dual-ota-r2] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_DUAL_R2 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL_R2 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} @@ -522,250 +525,250 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_4CH -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-4ch-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_4CH +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-4ch-pro] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_4CH_PRO -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH_PRO +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-4ch-pro-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_4CH_PRO +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH_PRO upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-touch] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_TOUCH -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TOUCH +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-touch-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_TOUCH +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TOUCH upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-b1] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_B1 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_B1 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-b1-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_B1 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_B1 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-t1-1ch] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_1CH -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_1CH +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-t1-1ch-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_1CH +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_1CH upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-t1-2ch] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_2CH -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_2CH +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-t1-2ch-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_2CH +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_2CH upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-t1-3ch] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_3CH -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_3CH +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-t1-3ch-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_3CH +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_3CH upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-led] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_LED -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_LED +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-led-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_LED +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_LED upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-rfbridge] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_RFBRIDGE -monitor_baud = 19200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE +monitor_speed = 19200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-rfbridge-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_RFBRIDGE +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 19200 +monitor_speed = 19200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-rfbridge-direct] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_RFBRIDGE -DRFB_DIRECT -monitor_baud = 19200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE -DRFB_DIRECT +monitor_speed = 19200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-rfbridge-direct-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_RFBRIDGE -DRFB_DIRECT +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE -DRFB_DIRECT upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 -monitor_baud = 19200 +monitor_speed = 19200 extra_scripts = ${common.extra_scripts} # ------------------------------------------------------------------------------ @@ -774,148 +777,148 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SLAMPHER -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SLAMPHER +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-slampher-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SLAMPHER +build_flags = ${common.build_flags_1m0m} -DITEAD_SLAMPHER upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-s20] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_S20 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_S20 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-s20-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_S20 +build_flags = ${common.build_flags_1m0m} -DITEAD_S20 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-1ch-inching] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_1CH_INCHING -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_1CH_INCHING +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-1ch-inching-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_1CH_INCHING +build_flags = ${common.build_flags_1m0m} -DITEAD_1CH_INCHING upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-motor] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_MOTOR -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_MOTOR +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-motor-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_MOTOR +build_flags = ${common.build_flags_1m0m} -DITEAD_MOTOR upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-sv] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_SV -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_SV +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-sv-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_SV +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_SV upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-s31] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_S31 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_S31 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-sonoff-s31-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_S31 +build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_S31 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} # ------------------------------------------------------------------------------ @@ -926,8 +929,8 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1 -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:electrodragon-wifi-iot-ota] @@ -936,36 +939,36 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1 +build_flags = ${common.build_flags_4m1m} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:workchoice-ecoplug] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DWORKCHOICE_ECOPLUG -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DWORKCHOICE_ECOPLUG +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:workchoice-ecoplug-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DWORKCHOICE_ECOPLUG +build_flags = ${common.build_flags_1m0m} -DWORKCHOICE_ECOPLUG upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:jangoe-wifi-relay-nc] @@ -974,8 +977,8 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DJANGOE_WIFI_RELAY_NC -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NC +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:jangoe-wifi-relay-nc-ota] @@ -984,11 +987,11 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DJANGOE_WIFI_RELAY_NC +build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NC upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:jangoe-wifi-relay-no] @@ -997,8 +1000,8 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DJANGOE_WIFI_RELAY_NO -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NO +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:jangoe-wifi-relay-no-ota] @@ -1007,11 +1010,11 @@ framework = arduino board = esp12e lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DJANGOE_WIFI_RELAY_NO +build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NO upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:openenergymonitor-mqtt-relay] @@ -1020,8 +1023,8 @@ framework = arduino board = esp_wroom_02 lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1 -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:openenergymonitor-mqtt-relay-ota] @@ -1030,11 +1033,11 @@ framework = arduino board = esp_wroom_02 lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1 +build_flags = ${common.build_flags_4m1m} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:jorgegarcia-wifi-relays] @@ -1043,8 +1046,8 @@ framework = arduino board = esp01_1m lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DJORGEGARCIA_WIFI_RELAYS -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DJORGEGARCIA_WIFI_RELAYS +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:jorgegarcia-wifi-relays-ota] @@ -1053,335 +1056,335 @@ framework = arduino board = esp01_1m lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DJORGEGARCIA_WIFI_RELAYS +build_flags = ${common.build_flags_1m0m} -DJORGEGARCIA_WIFI_RELAYS upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:aithinker-ai-light] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DAITHINKER_AI_LIGHT -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DAITHINKER_AI_LIGHT +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:aithinker-ai-light-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DAITHINKER_AI_LIGHT +build_flags = ${common.build_flags_1m0m} -DAITHINKER_AI_LIGHT upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:magichome-led-controller] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DMAGICHOME_LED_CONTROLLER -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:magichome-led-controller-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DMAGICHOME_LED_CONTROLLER +build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:magichome-led-controller-20] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DMAGICHOME_LED_CONTROLLER_20 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER_20 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:magichome-led-controller-20-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DMAGICHOME_LED_CONTROLLER_20 +build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER_20 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:huacanxing-h801] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DHUACANXING_H801 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:huacanxing-h801-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DHUACANXING_H801 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:huacanxing-h802] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DHUACANXING_H802 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:huacanxing-h802-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DHUACANXING_H802 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:arilux-al-lc01] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC01 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:arilux-al-lc01-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC01 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:arilux-al-lc02] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC02 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:arilux-al-lc02-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC02 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:arilux-al-lc06] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC06 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:arilux-al-lc06-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC06 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:arilux-al-lc11] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC11 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:arilux-al-lc11-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC11 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:arilux-e27] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_E27 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:arilux-e27-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_E27 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-bnsz01] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_BNSZ01 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DITEAD_BNSZ01 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:itead-bnsz01-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DITEAD_BNSZ01 +build_flags = ${common.build_flags_1m0m} -DITEAD_BNSZ01 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:wion-50055] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DWION_50055 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DWION_50055 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:wion-50055-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DWION_50055 +build_flags = ${common.build_flags_1m0m} -DWION_50055 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:exs-wifi-relay-v31] platform = ${common.platform} framework = arduino board = esp07 -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DEXS_WIFI_RELAY_V31 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DEXS_WIFI_RELAY_V31 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:exs-wifi-relay-v31-ota] platform = ${common.platform} framework = arduino board = esp07 -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DEXS_WIFI_RELAY_V31 +build_flags = ${common.build_flags_1m0m} -DEXS_WIFI_RELAY_V31 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:wemos-v9261f] @@ -1390,9 +1393,9 @@ framework = arduino board = d1_mini lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DGENERIC_V9261F +build_flags = ${common.build_flags_4m1m} -DGENERIC_V9261F upload_speed = 460800 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:wemos-v9261f-ota] @@ -1401,36 +1404,36 @@ framework = arduino board = d1_mini lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DGENERIC_V9261F +build_flags = ${common.build_flags_4m1m} -DGENERIC_V9261F upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:esp01-v9261f] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_V9261F -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DGENERIC_V9261F +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:esp01-v9261f-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_V9261F +build_flags = ${common.build_flags_1m0m} -DGENERIC_V9261F upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:wemos-ech1560] @@ -1439,9 +1442,9 @@ framework = arduino board = d1_mini lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DGENERIC_ECH1560 +build_flags = ${common.build_flags_4m1m} -DGENERIC_ECH1560 upload_speed = 460800 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:wemos-ech1560-ota] @@ -1450,36 +1453,36 @@ framework = arduino board = d1_mini lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DGENERIC_ECH1560 +build_flags = ${common.build_flags_4m1m} -DGENERIC_ECH1560 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:esp01-ech1560] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_ECH1560 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DGENERIC_ECH1560 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:esp01-ech1560-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_ECH1560 +build_flags = ${common.build_flags_1m0m} -DGENERIC_ECH1560 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:mancavemade-esplive] @@ -1488,9 +1491,9 @@ framework = arduino board = d1_mini lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DMANCAVEMADE_ESPLIVE +build_flags = ${common.build_flags_4m1m} -DMANCAVEMADE_ESPLIVE upload_speed = 460800 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:mancavemade-esplive-ota] @@ -1499,136 +1502,136 @@ framework = arduino board = d1_mini lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DMANCAVEMADE_ESPLIVE +build_flags = ${common.build_flags_4m1m} -DMANCAVEMADE_ESPLIVE upload_speed = 460800 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:intermittech-quinled] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DINTERMITTECH_QUINLED -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DINTERMITTECH_QUINLED +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:intermittech-quinled-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DINTERMITTECH_QUINLED +build_flags = ${common.build_flags_1m0m} -DINTERMITTECH_QUINLED upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:xenon-sm-pw702u] platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DXENON_SM_PW702U -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DXENON_SM_PW702U +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:xenon-sm-pw702u-ota] platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DXENON_SM_PW702U +build_flags = ${common.build_flags_1m0m} -DXENON_SM_PW702U upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:authometion-lyt8266] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DAUTHOMETION_LYT8266 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DAUTHOMETION_LYT8266 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:authometion-lyt8266-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DAUTHOMETION_LYT8266 +build_flags = ${common.build_flags_1m0m} -DAUTHOMETION_LYT8266 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:kmc-70011] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DKMC_70011 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DKMC_70011 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:kmc-70011-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DKMC_70011 +build_flags = ${common.build_flags_1m0m} -DKMC_70011 upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:yjzk-switch-2ch] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DYJZK_SWITCH_2CH -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_2CH +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:yjzk-switch-2ch-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DYJZK_SWITCH_2CH +build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_2CH upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:generic-8ch] @@ -1637,30 +1640,30 @@ framework = arduino board = d1_mini lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DGENERIC_8CH +build_flags = ${common.build_flags_4m1m} -DGENERIC_8CH upload_speed = 460800 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:gizwits-witty-cloud] platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DGIZWITS_WITTY_CLOUD -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DGIZWITS_WITTY_CLOUD +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:gizwits-witty-cloud-ota] platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DGIZWITS_WITTY_CLOUD +build_flags = ${common.build_flags_4m1m} -DGIZWITS_WITTY_CLOUD upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1670,21 +1673,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DEUROMATE_WIFI_STECKER_SCHUKO -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DEUROMATE_WIFI_STECKER_SCHUKO +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:euromate-wifi-stecker-shuko-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DEUROMATE_WIFI_STECKER_SCHUKO +build_flags = ${common.build_flags_4m1m} -DEUROMATE_WIFI_STECKER_SCHUKO upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1694,21 +1697,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DTONBUX_POWERSTRIP02 -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DTONBUX_POWERSTRIP02 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:tonbux-powerstrip02-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DTONBUX_POWERSTRIP02 +build_flags = ${common.build_flags_4m1m} -DTONBUX_POWERSTRIP02 upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1718,21 +1721,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DLINGAN_SWA1 -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DLINGAN_SWA1 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:lingan-swa1-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DLINGAN_SWA1 +build_flags = ${common.build_flags_4m1m} -DLINGAN_SWA1 upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1742,46 +1745,46 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DSTM_RELAY -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DSTM_RELAY +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:stm-relay-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DSTM_RELAY +build_flags = ${common.build_flags_1m0m} -DSTM_RELAY upload_speed = 115200 upload_port = ${common.upload_port} upload_flags = ${common.upload_flags} -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:heygo-hy02] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DHEYGO_HY02 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DHEYGO_HY02 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:heygo-hy02-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DHEYGO_HY02 +build_flags = ${common.build_flags_1m0m} -DHEYGO_HY02 upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1791,21 +1794,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DMAXCIO_WUS002S -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DMAXCIO_WUS002S +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:maxcio-wus002s-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DMAXCIO_WUS002S +build_flags = ${common.build_flags_1m0m} -DMAXCIO_WUS002S upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1815,21 +1818,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DYIDIAN_XSSSA05 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DYIDIAN_XSSSA05 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:yidian-xsssa05-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DYIDIAN_XSSSA05 +build_flags = ${common.build_flags_1m0m} -DYIDIAN_XSSSA05 upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1839,21 +1842,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DTONBUX_XSSSA06 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DTONBUX_XSSSA06 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:tonbux-xsssa06-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DTONBUX_XSSSA06 +build_flags = ${common.build_flags_1m0m} -DTONBUX_XSSSA06 upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1863,21 +1866,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DGREEN_ESP8266RELAY -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DGREEN_ESP8266RELAY +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:green-esp8266relay-ota] platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DGREEN_ESP8266RELAY +build_flags = ${common.build_flags_4m1m} -DGREEN_ESP8266RELAY upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1887,21 +1890,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DIKE_ESPIKE -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DIKE_ESPIKE +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:ike-espike-ota] platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DIKE_ESPIKE +build_flags = ${common.build_flags_4m1m} -DIKE_ESPIKE upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1911,21 +1914,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DARNIEX_SWIFITCH +build_flags = ${common.build_flags_1m0m} -DARNIEX_SWIFITCH extra_scripts = ${common.extra_scripts} -monitor_baud = 115200 +monitor_speed = 115200 [env:arniex-swifitch-ota] platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DARNIEX_SWIFITCH +build_flags = ${common.build_flags_1m0m} -DARNIEX_SWIFITCH upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -1935,71 +1938,71 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DZHILDE_EU44_W -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DZHILDE_EU44_W +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:zhilde-eu44-w-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DZHILDE_EU44_W +build_flags = ${common.build_flags_1m0m} -DZHILDE_EU44_W upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:luani-hvio] platform = ${common.platform} framework = arduino board = esp07 -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DLUANI_HVIO -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DLUANI_HVIO +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:luani-hvio-ota] platform = ${common.platform} framework = arduino board = esp07 -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DZLUANI_HVIO +build_flags = ${common.build_flags_1m0m} -DZLUANI_HVIO upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:neo-coolcam-power-plug-wifi] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DNEO_COOLCAM_POWER_PLUG_WIFI -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DNEO_COOLCAM_POWER_PLUG_WIFI +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:neo-coolcam-power-plug-wifi-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DNEO_COOLCAM_POWER_PLUG_WIFI +build_flags = ${common.build_flags_4m1m} -DNEO_COOLCAM_POWER_PLUG_WIFI upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -2009,21 +2012,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DESTINK_WIFI_POWER_STRIP -monitor_baud = 115200 +build_flags = ${common.build_flags_4m1m} -DESTINK_WIFI_POWER_STRIP +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:estink-wifi-power-strip-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags} -DESTINK_WIFI_POWER_STRIP +build_flags = ${common.build_flags_4m1m} -DESTINK_WIFI_POWER_STRIP upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -2037,21 +2040,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_ESP01S_RELAY_V40 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RELAY_V40 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:generic-esp01s-relay-40-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_ESP01S_RELAY_V40 +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RELAY_V40 upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -2061,21 +2064,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_ESP01S_RGBLED_V10 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RGBLED_V10 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:generic-esp01s-rgbled-10-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_ESP01S_RGBLED_V10 +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RGBLED_V10 upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -2085,21 +2088,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_ESP01S_DHT11_V10 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DHT11_V10 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:generic-esp01s-dht11-10-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_ESP01S_DHT11_V10 +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DHT11_V10 upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -2109,21 +2112,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_ESP01S_DS18B20_V10 -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DS18B20_V10 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:generic-esp01s-ds18b20-10-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DGENERIC_ESP01S_DS18B20_V10 +build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DS18B20_V10 upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -2133,21 +2136,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DHELTEC_TOUCHRELAY -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DHELTEC_TOUCHRELAY +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:heltec-touch-relay-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DHELTEC_TOUCHRELAY +build_flags = ${common.build_flags_1m0m} -DHELTEC_TOUCHRELAY upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -2157,21 +2160,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DALLNET_4DUINO_IOT_WLAN_RELAIS -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DALLNET_4DUINO_IOT_WLAN_RELAIS +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:allnet-4duino-iot-wlan-relais-ota] platform = ${common.platform} framework = arduino board = esp12e -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DALLNET_4DUINO_IOT_WLAN_RELAIS +build_flags = ${common.build_flags_1m0m} -DALLNET_4DUINO_IOT_WLAN_RELAIS upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -2181,21 +2184,21 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DTONBUX_MOSQUITO_KILLER -monitor_baud = 115200 +build_flags = ${common.build_flags_1m0m} -DTONBUX_MOSQUITO_KILLER +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:tonbux-mosquito-killer-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} -build_flags = ${common.build_flags_1m} -DTONBUX_MOSQUITO_KILLER +build_flags = ${common.build_flags_1m0m} -DTONBUX_MOSQUITO_KILLER upload_speed = 115200 upload_port = "${env.ESPURNA_IP}" upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266 @@ -2205,18 +2208,18 @@ extra_scripts = ${common.extra_scripts} platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = ${common.build_flags_1m} -DPILOTAK_ESP_DIN_V1 -monitor_baud = 115200 +monitor_speed = 115200 extra_scripts = ${common.extra_scripts} [env:pilotak-esp-din-v1-ota] platform = ${common.platform} framework = arduino board = esp01_1m -board_flash_mode = dout +board_build.flash_mode = dout lib_deps = ${common.lib_deps} lib_ignore = ${common.lib_ignore} build_flags = ${common.build_flags_1m} -DPILOTAK_ESP_DIN_V1