├── 3d_models ├── ESP32 CYD Gopro mount lol.stl ├── README.md ├── bridas soporte pantalla vesc.stl ├── soporte pantalla vesc(1).stl └── tapa pantalla vesc.stl ├── README.md ├── imgs ├── demo.jpg └── demo.png ├── libraries ├── README.md └── libraries.zip └── src └── main ├── EEPROMAnything.h ├── background_image.h ├── main.ino └── startup_image.h /3d_models/ESP32 CYD Gopro mount lol.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/3d_models/ESP32 CYD Gopro mount lol.stl -------------------------------------------------------------------------------- /3d_models/README.md: -------------------------------------------------------------------------------- 1 | Credits by : t.me/Pandalgns 2 | -------------------------------------------------------------------------------- /3d_models/bridas soporte pantalla vesc.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/3d_models/bridas soporte pantalla vesc.stl -------------------------------------------------------------------------------- /3d_models/soporte pantalla vesc(1).stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/3d_models/soporte pantalla vesc(1).stl -------------------------------------------------------------------------------- /3d_models/tapa pantalla vesc.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/3d_models/tapa pantalla vesc.stl -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🚀 Simple VESC Display for ESP32-2432S028R 2 | 3 | > **Credits:** Based on the original project by [Gh0513d/SVD](https://github.com/Gh0513d/SVD) 🔗 4 | 5 | This is a modified version of the VESC display project, optimized for the **ESP32-2432S028R** display. The goal is to enhance functionality and add new features while keeping it simple and efficient. 6 | 7 | ## 🎨 Demo 8 | 9 | Demo Image 10 | 11 | ## ✨ Features 12 | 13 | ✅ Real-time speed, RPM, and power display 14 | ✅ Optimized data calculations similar to VESC Tool 15 | ✅ Trip and total distance tracking 16 | ✅ EEPROM storage for trip data 17 | ✅ Automatic brightness control using LDR sensor 18 | ✅ High-speed UART communication with VESC 19 | ✅ Overheating and battery warnings 20 | ✅ PNG image support for custom UI background and startup logo 21 | 22 | ## 📥 Installation 23 | 24 | Follow these steps to set up the project on your ESP32-2432S028: 25 | 26 | ### 1️⃣ Install Arduino IDE & ESP32 Board Support 27 | - Download and install the latest [Arduino IDE](https://www.arduino.cc/en/software). 28 | - Open **Arduino IDE** and go to **File** > **Preferences**. 29 | - In the "Additional Board Manager URLs" field, add: 30 | ``` 31 | https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json 32 | ``` 33 | - Go to **Tools** > **Board** > **Boards Manager**, search for "ESP32," and install the latest ESP32 board package. 34 | 35 | ### 2️⃣ Install Required Libraries 36 | - Extract the `libraries.zip` file into your Arduino libraries folder (`Documents/Arduino/libraries/`). 37 | - If you prefer manual installation, ensure you have the following libraries installed: 38 | - **TFT_eSPI** (for display control) 39 | - **FlickerFreePrint** (for flicker-free text rendering) 40 | - **ComEVesc** (for VESC communication) 41 | - **PNGdec** (for PNG image decoding) 42 | - **EEPROMAnything** (for EEPROM read/write support) 43 | 44 | ### 3️⃣ Flash the Code to ESP32 45 | - Open the `vesc_display.ino` file in **Arduino IDE**. 46 | - Select the correct board: **ESP32 Dev Module**. 47 | - Set the correct **COM Port**. 48 | - Click **Upload** and wait for the process to complete. 49 | 50 | ## 🔧 Configuration 51 | 52 | Before compiling, you may need to tweak some settings (if you install tft_espi byself): 53 | - **`User_Setup.h`** in the `TFT_eSPI` library to match your display pinout. 54 | - Adjust motor and wheel parameters in the `main.ino` file. 55 | 56 | ## 🚀 Coming Soon 57 | 58 | 🔹 More UI customization options (with new library instead as tft_espi :D) 🎨 59 | 🔹 BLE and WiFi bridge 🌐 60 | 🔹 Improved data logging & visualization 📊 61 | 🔹 Add CANBUS support for better and reliable communication 62 | 63 | ## 🤝 Contributing 64 | 65 | Feel free to fork the project and submit pull requests. Suggestions and improvements are always welcome! 😊 66 | 67 | ## 📜 License 68 | 69 | This project is open-source and licensed under the **MIT License**. 70 | 71 | --- 72 | 73 | Happy coding! 🚀 74 | -------------------------------------------------------------------------------- /imgs/demo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/imgs/demo.jpg -------------------------------------------------------------------------------- /imgs/demo.png: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /libraries/README.md: -------------------------------------------------------------------------------- 1 | Extract libraries.zip files to C:\Users\Username\Documents\Arduino\libraries 2 | -------------------------------------------------------------------------------- /libraries/libraries.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NetworkDir/SimpleVescDisplay/7c4fc8cdb1120faafb2faf9a64c125a375615a86/libraries/libraries.zip -------------------------------------------------------------------------------- /src/main/EEPROMAnything.h: -------------------------------------------------------------------------------- 1 | //EEPROMAnything is taken from here: http://www.arduino.cc/playground/Code/EEPROMWriteAnything 2 | #ifndef EEPROMAnything_h 3 | #define EEPROMAnything_h 4 | 5 | #include "EEPROM.h" 6 | #if ARDUINO < 100 7 | #include 8 | #else 9 | #include 10 | #endif 11 | 12 | template int EEPROM_writeAnything(int ee, const T& value){ 13 | const byte* p = (const byte*)(const void*)&value; 14 | int i; 15 | for (i = 0; i < sizeof(value); i++) 16 | EEPROM.write(ee++, *p++); 17 | EEPROM.commit(); 18 | return i; 19 | } 20 | 21 | template int EEPROM_readAnything(int ee, T& value){ 22 | byte* p = (byte*)(void*)&value; 23 | int i; 24 | for (i = 0; i < sizeof(value); i++) 25 | *p++ = EEPROM.read(ee++); 26 | return i; 27 | } 28 | 29 | #endif -------------------------------------------------------------------------------- /src/main/background_image.h: -------------------------------------------------------------------------------- 1 | // array size is 38164 2 | // For convert png to .h file you can use [https://notisrac.github.io/FileToCArray/] 3 | // array size is 9696 4 | static const unsigned char background_image[] PROGMEM = { 5 | 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 6 | 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0xf0, 0x08, 0x02, 0x00, 0x00, 0x00, 0xfe, 0x4f, 0x2a, 7 | 0x3c, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x01, 0xd9, 0xc9, 0x2c, 0x7f, 0x00, 0x00, 8 | 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 9 | 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x25, 0x85, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0x9d, 0x79, 10 | 0x70, 0x55, 0xc7, 0x95, 0xff, 0x2f, 0x92, 0x00, 0x49, 0x20, 0x40, 0x48, 0x02, 0x09, 0x10, 0x48, 11 | 0x42, 0x42, 0x02, 0x2d, 0x68, 0x41, 0x02, 0x09, 0xed, 0x96, 0x84, 0x84, 0x56, 0x56, 0x09, 0x10, 12 | 0x08, 0x04, 0xc6, 0xc2, 0x66, 0x33, 0x98, 0xdd, 0x22, 0xb1, 0x0d, 0xb1, 0x5d, 0xc9, 0xd8, 0x3f, 13 | 0xe7, 0x67, 0xc7, 0xf1, 0x24, 0x4e, 0x6c, 0x67, 0x12, 0xbb, 0x52, 0xe3, 0xc4, 0x1e, 0xcf, 0x24, 14 | 0x35, 0x4e, 0x3c, 0x93, 0x8c, 0x27, 0x9e, 0x49, 0xf2, 0xf3, 0x2f, 0x13, 0xa7, 0xe2, 0x85, 0xc4, 15 | 0x71, 0x12, 0x63, 0x67, 0xa6, 0x92, 0xfc, 0x91, 0x54, 0x52, 0x95, 0x3d, 0xf3, 0xd5, 0x6d, 0xbf, 16 | 0x76, 0xeb, 0x2e, 0xfd, 0xee, 0xbb, 0xab, 0xde, 0xd3, 0xf9, 0xd4, 0xab, 0x57, 0x7d, 0xfb, 0x76, 17 | 0x9f, 0x3e, 0xdd, 0x7d, 0xce, 0xed, 0xee, 0xbb, 0x2a, 0xc5, 0xd6, 0x58, 0xb3, 0x66, 0x8d, 0xc5, 18 | 0xc8, 0x88, 0x24, 0x58, 0x49, 0x29, 0xc9, 0x28, 0x97, 0xc9, 0xf6, 0x8a, 0x69, 0x78, 0x78, 0x4d, 19 | 0x84, 0xa4, 0xa4, 0xa4, 0x28, 0x8a, 0x32, 0x63, 0xc6, 0x0c, 0x25, 0x76, 0x99, 0x11, 0x0e, 0x7f, 20 | 0x74, 0xe0, 0xe1, 0xb4, 0xb4, 0x34, 0x2b, 0x5d, 0x63, 0x68, 0x30, 0x16, 0xb1, 0x62, 0x75, 0x72, 21 | 0x1b, 0xb3, 0x92, 0x40, 0xd4, 0xca, 0x4a, 0xca, 0xb0, 0xc2, 0xc5, 0x48, 0xa5, 0x48, 0x60, 0xb5, 22 | 0x4a, 0x51, 0x38, 0x34, 0xc9, 0xe4, 0x59, 0xf4, 0x29, 0xf5, 0xe9, 0xc3, 0x4a, 0xb3, 0xa2, 0x95, 23 | 0x1c, 0x4d, 0x11, 0x1c, 0xc3, 0x94, 0x9a, 0x78, 0x6c, 0x16, 0x16, 0x16, 0x26, 0x26, 0x26, 0xc6, 24 | 0xc7, 0xc7, 0xcf, 0x9c, 0x39, 0x33, 0xb6, 0xdd, 0x38, 0x40, 0xd8, 0x61, 0x22, 0x2e, 0x2e, 0x0e, 25 | 0xff, 0xf3, 0xe6, 0xcd, 0xd3, 0xf7, 0x91, 0x99, 0x19, 0x48, 0xcc, 0xc3, 0xba, 0xe5, 0x84, 0x2d, 26 | 0x4b, 0x6f, 0x15, 0xf6, 0x0a, 0x92, 0xa4, 0x37, 0x53, 0x40, 0x12, 0x56, 0x56, 0x11, 0xd6, 0xc8, 27 | 0xcb, 0xcb, 0x4b, 0x48, 0x48, 0x60, 0xe6, 0x15, 0xb4, 0xa9, 0xdb, 0xe7, 0xe3, 0x7f, 0xfb, 0xf0, 28 | 0xab, 0xaf, 0x7f, 0xff, 0xda, 0x9b, 0x6f, 0x7c, 0xea, 0xd3, 0x8f, 0x96, 0x94, 0x94, 0xcc, 0x9a, 29 | 0x35, 0x2b, 0x68, 0x8d, 0xde, 0x87, 0x79, 0x2f, 0x02, 0x38, 0x56, 0xe6, 0xe7, 0xe7, 0x07, 0xdd, 30 | 0xe1, 0xd1, 0x81, 0x92, 0x3f, 0x99, 0x82, 0x82, 0x82, 0x7c, 0x0b, 0x58, 0x4c, 0xa6, 0x49, 0x69, 31 | 0x3d, 0x97, 0xed, 0xe2, 0xac, 0x64, 0x2c, 0x50, 0xb1, 0x9e, 0x85, 0xc5, 0xe0, 0x68, 0x87, 0xa9, 32 | 0x0b, 0x06, 0xe1, 0xe8, 0x75, 0xe0, 0xe7, 0xfe, 0xe9, 0x1f, 0xde, 0xfd, 0x9f, 0x77, 0xf8, 0xef, 33 | 0x3f, 0xbf, 0xfd, 0x1f, 0xa9, 0xa9, 0xa9, 0x41, 0x2b, 0xf5, 0x3e, 0xcc, 0x7b, 0xb1, 0x5a, 0xa9, 34 | 0xac, 0xac, 0x44, 0x53, 0xb3, 0x66, 0xb7, 0xdd, 0xf5, 0x12, 0xcc, 0x64, 0xba, 0x58, 0x96, 0x3d, 35 | 0x51, 0x56, 0x14, 0xd3, 0x84, 0x95, 0x95, 0x44, 0x38, 0xd0, 0x52, 0xb0, 0xa7, 0x9a, 0x9a, 0x9a, 36 | 0x8e, 0x8e, 0x0e, 0xd8, 0x56, 0xd0, 0x76, 0x6e, 0x93, 0x23, 0xb7, 0x1c, 0x79, 0xe7, 0xbf, 0xaf, 37 | 0x8b, 0x0e, 0x8c, 0xdf, 0xcd, 0xb7, 0x1c, 0x09, 0x5a, 0xaf, 0x49, 0x60, 0x85, 0x52, 0x5f, 0x5f, 38 | 0xdf, 0xd8, 0xd8, 0x58, 0x5e, 0x5e, 0x8e, 0x65, 0x0b, 0x5a, 0x3e, 0xe8, 0xce, 0x9f, 0xea, 0x28, 39 | 0xb9, 0x6e, 0x90, 0x93, 0x93, 0xe3, 0x8a, 0x9c, 0x88, 0xc8, 0x0b, 0x61, 0x5b, 0x42, 0x8e, 0x8a, 40 | 0x95, 0x82, 0xb0, 0xde, 0xa8, 0xae, 0xae, 0xde, 0xb4, 0x69, 0x53, 0x6f, 0x6f, 0x2f, 0xc2, 0x30, 41 | 0x35, 0x0c, 0xc5, 0x71, 0x2a, 0xd1, 0x32, 0x20, 0x5f, 0xbd, 0xfb, 0xaa, 0xc6, 0x7b, 0xf1, 0x3b, 42 | 0x7d, 0xe6, 0x74, 0xd0, 0x7a, 0xbd, 0x0f, 0x1a, 0xb3, 0xae, 0xae, 0x0e, 0x47, 0x49, 0xfc, 0x63, 43 | 0x7a, 0x0f, 0xef, 0xb5, 0xdd, 0xb3, 0x3e, 0xe3, 0x9d, 0xfd, 0x87, 0x95, 0xac, 0xac, 0x58, 0xb1, 44 | 0x62, 0xb9, 0xca, 0x0a, 0x01, 0xc3, 0xcd, 0xe5, 0x93, 0x31, 0xdb, 0xa5, 0x11, 0x28, 0x17, 0x65, 45 | 0x98, 0xc0, 0x50, 0xb8, 0x44, 0x3d, 0x0d, 0x62, 0x76, 0xb1, 0x08, 0x7d, 0xbc, 0x15, 0x69, 0x00, 46 | 0x8d, 0x88, 0xb9, 0xca, 0xda, 0xb5, 0x6b, 0x9b, 0x9a, 0x9a, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 47 | 0x91, 0x45, 0x51, 0x7d, 0x38, 0x5a, 0xbc, 0x17, 0xdc, 0x7a, 0xea, 0xa4, 0xde, 0x81, 0x4f, 0x9c, 48 | 0x3c, 0x1e, 0xb4, 0x5e, 0x13, 0xb0, 0xc9, 0x73, 0x55, 0x55, 0x15, 0x8e, 0x8f, 0xed, 0xed, 0xed, 49 | 0x15, 0x15, 0x15, 0x38, 0x4a, 0xc2, 0x3a, 0xad, 0x98, 0x81, 0x61, 0x57, 0x4a, 0xfa, 0x5d, 0x63, 50 | 0x60, 0x7a, 0x83, 0x94, 0x17, 0x61, 0x68, 0x30, 0x86, 0x26, 0x64, 0x3b, 0xaf, 0x99, 0x7d, 0x1a, 51 | 0xba, 0x8c, 0x92, 0xed, 0x25, 0x28, 0xc9, 0x30, 0x3c, 0x15, 0x60, 0xcd, 0x61, 0x31, 0x31, 0x5a, 52 | 0x0a, 0xf6, 0x84, 0x49, 0x5d, 0x57, 0x57, 0xd7, 0xce, 0x9d, 0x3b, 0xbb, 0xbb, 0xbb, 0xd9, 0xea, 53 | 0x91, 0x59, 0x1e, 0x88, 0x0a, 0x4f, 0xfe, 0xfa, 0xbf, 0x7f, 0x4d, 0xf4, 0xde, 0xef, 0xbd, 0xfa, 54 | 0x0a, 0x8e, 0x41, 0x41, 0x2b, 0xf5, 0x5e, 0x1b, 0x96, 0x95, 0x95, 0xe1, 0xc8, 0x38, 0x30, 0x30, 55 | 0x50, 0x5b, 0x5b, 0xcb, 0x5c, 0xd7, 0xd3, 0xde, 0xf7, 0x08, 0xff, 0x8d, 0x5c, 0x59, 0x3a, 0x5d, 56 | 0x59, 0xa6, 0x12, 0x51, 0x62, 0x80, 0x71, 0x78, 0xfb, 0xf6, 0xed, 0xf0, 0xe1, 0xb6, 0xb6, 0xb6, 57 | 0xb9, 0x73, 0xe7, 0x2a, 0x51, 0xe2, 0xba, 0x8c, 0xe4, 0xe4, 0xe4, 0x2f, 0x3f, 0xff, 0xa5, 0xeb, 58 | 0x3f, 0x7b, 0x1b, 0xde, 0xfb, 0x95, 0x7f, 0xf9, 0x4a, 0x75, 0x4d, 0x75, 0xb0, 0xfa, 0xf0, 0xd3, 59 | 0xce, 0x58, 0xa4, 0x6c, 0xdd, 0xba, 0x75, 0xc7, 0x8e, 0x1d, 0x98, 0x3f, 0x23, 0x6c, 0xb1, 0x47, 60 | 0x6c, 0xf7, 0xa6, 0xeb, 0x04, 0x58, 0xb4, 0xb2, 0xc4, 0x88, 0xac, 0xac, 0x2c, 0xf6, 0xcf, 0x03, 61 | 0xfc, 0x5f, 0x93, 0x46, 0x9f, 0xd1, 0x30, 0xde, 0x22, 0x3c, 0xaf, 0x3e, 0x60, 0x25, 0xa3, 0x24, 62 | 0xb1, 0xd9, 0x2e, 0x7d, 0xa5, 0xe4, 0x25, 0xe2, 0x98, 0x57, 0x53, 0x53, 0xb3, 0x4b, 0xa5, 0xa5, 63 | 0xa5, 0x85, 0x8d, 0x60, 0xbe, 0xdd, 0xe7, 0x10, 0x4b, 0xf0, 0xd3, 0x07, 0x8b, 0x17, 0x2f, 0xc6, 64 | 0xc0, 0x3b, 0x38, 0x38, 0x88, 0x11, 0x18, 0x33, 0x67, 0xeb, 0x7d, 0xca, 0xfb, 0x4b, 0x9f, 0x06, 65 | 0x96, 0x2d, 0xc9, 0xa5, 0xe9, 0xfa, 0xb0, 0x56, 0x67, 0x66, 0xea, 0x56, 0x62, 0xcc, 0x6a, 0x11, 66 | 0xb6, 0x08, 0x8b, 0x2e, 0xa0, 0x64, 0xea, 0x40, 0x06, 0x7d, 0xa4, 0xe1, 0x5e, 0x1e, 0x96, 0x67, 67 | 0x31, 0x4c, 0x69, 0x98, 0xc5, 0x9e, 0x1c, 0xeb, 0xb9, 0x24, 0x7b, 0xc3, 0xca, 0xe1, 0xb6, 0x82, 68 | 0xc3, 0x2d, 0x5c, 0x77, 0x64, 0x64, 0x04, 0x43, 0xf1, 0xfa, 0xf5, 0xeb, 0xd9, 0x30, 0xc2, 0xe7, 69 | 0xd2, 0x81, 0xf0, 0xc0, 0xff, 0x7d, 0xe0, 0xdf, 0xbe, 0xf1, 0x6f, 0x2f, 0x86, 0x7e, 0x62, 0x58, 70 | 0x8c, 0x7c, 0xe1, 0x5f, 0xbf, 0xfa, 0x37, 0xf7, 0x7d, 0x64, 0x2a, 0x5c, 0xfb, 0xe5, 0x2d, 0x36, 71 | 0x6f, 0xde, 0x3c, 0xac, 0x7b, 0x87, 0x86, 0x86, 0x30, 0x02, 0x97, 0x96, 0x96, 0x32, 0x7b, 0xcd, 72 | 0x34, 0x31, 0x33, 0x49, 0x9f, 0x6a, 0xec, 0x41, 0xb4, 0x7e, 0xb3, 0x94, 0xfa, 0x5c, 0x92, 0xde, 73 | 0x37, 0x53, 0xc3, 0x3a, 0x62, 0xbd, 0xac, 0x58, 0x9a, 0x3e, 0x97, 0x61, 0x46, 0x65, 0x11, 0x61, 74 | 0x19, 0x8c, 0x15, 0x68, 0x32, 0xfc, 0x63, 0xa9, 0xb3, 0x69, 0xd3, 0xa6, 0x3d, 0x7b, 0xf6, 0x6c, 75 | 0xd9, 0xb2, 0xa5, 0xa2, 0xa2, 0x22, 0x68, 0x77, 0x50, 0xbe, 0xfb, 0xbd, 0xff, 0xd2, 0x9f, 0xa0, 76 | 0x32, 0xfb, 0xfd, 0xe4, 0xfa, 0x8f, 0xcf, 0x9c, 0x3b, 0x13, 0xa0, 0xb6, 0x7c, 0xc2, 0x92, 0x94, 77 | 0x94, 0xd4, 0xda, 0xda, 0x0a, 0xef, 0x45, 0x4b, 0x96, 0x97, 0x97, 0xb3, 0xb6, 0x05, 0xae, 0x74, 78 | 0x13, 0x97, 0xe6, 0x5c, 0xe0, 0x54, 0x46, 0x49, 0xd7, 0x91, 0x91, 0x91, 0xa1, 0x09, 0xeb, 0xff, 79 | 0x59, 0xc0, 0x2c, 0x2c, 0x91, 0xc9, 0x85, 0x68, 0x02, 0x66, 0x79, 0x35, 0x31, 0xfa, 0x52, 0xcc, 80 | 0xd4, 0xd0, 0xe4, 0x32, 0x8c, 0x37, 0xd4, 0x5c, 0x9e, 0x12, 0xa0, 0xd5, 0xb0, 0x99, 0x9b, 0x9b, 81 | 0xdb, 0xdd, 0xdd, 0x3d, 0x3c, 0x3c, 0x0c, 0x1f, 0x9e, 0xb8, 0x21, 0x26, 0x50, 0x30, 0x93, 0xef, 82 | 0xed, 0xeb, 0xc5, 0xaf, 0xaf, 0xbf, 0x97, 0x05, 0xde, 0xdb, 0x14, 0xc2, 0x95, 0x55, 0x95, 0x3d, 83 | 0x3d, 0xdd, 0x9f, 0x7d, 0xea, 0xb3, 0xef, 0xfc, 0xf7, 0xf5, 0x1f, 0xfd, 0xe4, 0xcd, 0x00, 0xb5, 84 | 0x65, 0xde, 0x8b, 0xff, 0xfa, 0xfa, 0x7a, 0x78, 0x2f, 0x16, 0x23, 0x75, 0x75, 0x75, 0x98, 0xd7, 85 | 0xa0, 0x55, 0x99, 0x51, 0xb2, 0x46, 0xce, 0x98, 0x8c, 0x59, 0x77, 0xe8, 0x7b, 0x8d, 0x77, 0x93, 86 | 0x61, 0x5e, 0x89, 0xe5, 0x98, 0x59, 0x82, 0xa1, 0x61, 0x84, 0xb5, 0xd5, 0xf4, 0xc9, 0xd6, 0xae, 87 | 0x71, 0x22, 0x89, 0xb4, 0xb0, 0x8a, 0x89, 0x81, 0x89, 0x5b, 0xc6, 0x83, 0x42, 0xac, 0x40, 0x80, 88 | 0x6a, 0x44, 0x0a, 0x57, 0x38, 0x2f, 0x2f, 0x0f, 0x8b, 0x37, 0xd8, 0x5f, 0x57, 0x57, 0xd7, 0xc4, 89 | 0xe9, 0x84, 0xd0, 0x59, 0x19, 0xdf, 0xd6, 0xc3, 0x28, 0x68, 0xcb, 0xd6, 0x01, 0xfc, 0x86, 0x76, 90 | 0x0d, 0xaa, 0xbf, 0x21, 0xe1, 0x7f, 0x52, 0x4c, 0xdd, 0xc6, 0x3a, 0x9e, 0xeb, 0x1f, 0xfe, 0xf1, 91 | 0x59, 0x8c, 0xc3, 0x27, 0x6f, 0x3d, 0xe1, 0x8f, 0x92, 0x5c, 0x55, 0x4d, 0xcb, 0x54, 0x55, 0x55, 92 | 0x61, 0x0d, 0x82, 0x23, 0x60, 0x53, 0x53, 0x13, 0xe6, 0xba, 0xac, 0x49, 0x79, 0xdb, 0x8a, 0x26, 93 | 0x61, 0xcf, 0x42, 0xbc, 0x33, 0xaa, 0x29, 0x65, 0xb1, 0xca, 0xc2, 0x40, 0x81, 0x06, 0xc1, 0x2a, 94 | 0x60, 0x03, 0xd6, 0x70, 0x2c, 0x5c, 0x58, 0x58, 0xb8, 0x6d, 0xdb, 0x36, 0xf8, 0x70, 0x67, 0x67, 95 | 0x27, 0x36, 0x61, 0x97, 0xec, 0x7e, 0x69, 0x7f, 0x96, 0xc4, 0x2f, 0xff, 0xd7, 0xff, 0xb3, 0x38, 96 | 0x6d, 0x7e, 0xfb, 0xdd, 0x9f, 0x36, 0x34, 0x36, 0xb0, 0x5c, 0x9f, 0x78, 0xf4, 0x13, 0x88, 0xb9, 97 | 0x70, 0xf1, 0xbc, 0x0f, 0x1a, 0x32, 0xf8, 0x9c, 0x99, 0xb7, 0xcc, 0x9a, 0x35, 0x6b, 0x30, 0x73, 98 | 0xd9, 0xbd, 0x7b, 0x77, 0x7b, 0x7b, 0x3b, 0xc6, 0xde, 0x40, 0xfb, 0x33, 0xba, 0x51, 0x16, 0x2c, 99 | 0x58, 0x90, 0x9a, 0x9a, 0xca, 0xfe, 0x59, 0x80, 0xa1, 0x09, 0x8b, 0x9b, 0x1a, 0x78, 0x76, 0x31, 100 | 0xa5, 0x3e, 0xbb, 0xa1, 0x40, 0x1e, 0x69, 0x98, 0x5e, 0x92, 0x46, 0x42, 0xea, 0x64, 0x0c, 0x0b, 101 | 0x15, 0x77, 0x19, 0x86, 0xf5, 0x65, 0x69, 0x62, 0xd0, 0x76, 0x88, 0xc1, 0x7f, 0x59, 0x59, 0x19, 102 | 0x1c, 0x78, 0xe7, 0xce, 0x9d, 0xcd, 0xcd, 0xcd, 0xc9, 0xc9, 0xc9, 0xb0, 0x54, 0xf8, 0xb0, 0x3f, 103 | 0xe7, 0xa5, 0x1f, 0xf8, 0xe8, 0xff, 0x79, 0xfe, 0xab, 0xff, 0xfc, 0xde, 0xef, 0x85, 0xe7, 0x9f, 104 | 0x7f, 0x81, 0x05, 0x42, 0xbf, 0xaf, 0xbe, 0xbf, 0xf9, 0xdc, 0x97, 0x9e, 0xe3, 0xb9, 0xbe, 0xfc, 105 | 0xcf, 0x5f, 0x82, 0x03, 0x63, 0xdc, 0xf6, 0x5a, 0x3d, 0x0e, 0x1f, 0x7e, 0x99, 0xf7, 0xae, 0x58, 106 | 0xb1, 0x02, 0xab, 0x0f, 0x78, 0x2f, 0xfe, 0x73, 0x72, 0x72, 0xd0, 0x8c, 0x38, 0x20, 0x9a, 0xb5, 107 | 0xbc, 0xa1, 0x39, 0x85, 0x0d, 0x1b, 0x9a, 0x8d, 0x59, 0x8f, 0x1b, 0x76, 0xb4, 0xdc, 0x72, 0x24, 108 | 0x2e, 0x63, 0x68, 0xb7, 0x86, 0x7a, 0xea, 0x4d, 0xd4, 0xac, 0x2e, 0x86, 0xf2, 0x19, 0xca, 0x7c, 109 | 0xc2, 0x16, 0xac, 0xf9, 0x10, 0x80, 0xf1, 0x61, 0x36, 0x08, 0x1f, 0xde, 0xb1, 0x63, 0x47, 0x6d, 110 | 0x6d, 0x2d, 0x7b, 0xde, 0x90, 0x2f, 0xf3, 0x7c, 0x73, 0x12, 0x8b, 0xcc, 0x9b, 0x37, 0xef, 0x8d, 111 | 0x1f, 0xbe, 0xfe, 0xd6, 0x4f, 0x7f, 0xe4, 0x4f, 0x71, 0xbc, 0x05, 0x10, 0x60, 0x97, 0xdc, 0xb0, 112 | 0x78, 0xc3, 0x8a, 0x03, 0x4b, 0xdf, 0xbe, 0xbe, 0x3e, 0xac, 0x41, 0xd0, 0x80, 0xdc, 0x22, 0x83, 113 | 0xee, 0x52, 0x19, 0xdc, 0x61, 0x82, 0x56, 0x44, 0xcb, 0xc4, 0xc3, 0x1f, 0x22, 0xe8, 0x60, 0x31, 114 | 0x20, 0xfe, 0xdb, 0x40, 0x93, 0x51, 0xbf, 0xa9, 0x91, 0xcf, 0x63, 0x24, 0xb9, 0xc2, 0xea, 0xa3, 115 | 0xa9, 0x82, 0x61, 0x02, 0xdb, 0x35, 0xd2, 0xc8, 0x47, 0x0b, 0x22, 0x00, 0x1f, 0xae, 0xab, 0xab, 116 | 0xc3, 0x72, 0x0e, 0x8b, 0xba, 0x75, 0xeb, 0xd6, 0xe9, 0xcd, 0xd7, 0x07, 0xf2, 0xf3, 0xf3, 0xbf, 117 | 0xf2, 0x2f, 0xcf, 0xff, 0xfb, 0x4b, 0x2f, 0x8a, 0xbf, 0x17, 0x5f, 0x7a, 0xf1, 0xe9, 0x2f, 0xfe, 118 | 0xbd, 0x98, 0xec, 0xec, 0xb9, 0x33, 0x18, 0x7e, 0xbf, 0xf0, 0xcc, 0x17, 0x7c, 0x53, 0x8c, 0xc1, 119 | 0xbc, 0x17, 0x6d, 0xd5, 0xd2, 0xd2, 0x82, 0x83, 0x1d, 0xd6, 0x1d, 0xab, 0x56, 0xad, 0xe2, 0xbd, 120 | 0xcf, 0x5b, 0xd2, 0x4a, 0xe3, 0x8b, 0x7d, 0x17, 0x51, 0x17, 0xcb, 0x8d, 0x59, 0x62, 0x12, 0xf3, 121 | 0x26, 0x13, 0x36, 0xbd, 0x75, 0x0c, 0xeb, 0x12, 0x91, 0x64, 0x65, 0xae, 0x8f, 0xa0, 0x3c, 0x3f, 122 | 0x8b, 0xf3, 0x08, 0xb1, 0x16, 0x2c, 0x8c, 0xff, 0x45, 0x8b, 0x16, 0xb5, 0xb6, 0xb6, 0xc2, 0x87, 123 | 0x07, 0x06, 0x06, 0x26, 0xde, 0x93, 0xa0, 0xe2, 0xe7, 0xc5, 0xe1, 0x3b, 0xee, 0xfc, 0xa0, 0xfe, 124 | 0x61, 0x23, 0xf6, 0x3b, 0x76, 0xfc, 0x28, 0x4f, 0xf6, 0x85, 0x67, 0x9f, 0x46, 0xcc, 0xd9, 0xf3, 125 | 0x67, 0x7d, 0x53, 0x4c, 0x09, 0x1d, 0xc8, 0xd8, 0x93, 0x46, 0x58, 0x6b, 0x60, 0xf8, 0x2d, 0x2d, 126 | 0x2d, 0x85, 0xc7, 0xc2, 0x52, 0x79, 0x33, 0xf2, 0xb0, 0xeb, 0x9d, 0xe5, 0xa2, 0xd5, 0x4d, 0x41, 127 | 0x03, 0x56, 0xe6, 0xc4, 0x22, 0xac, 0x6e, 0xde, 0x09, 0xd7, 0x94, 0x82, 0x7e, 0xc5, 0x7f, 0x66, 128 | 0x66, 0x66, 0x67, 0x67, 0xe7, 0x9e, 0x3d, 0x7b, 0xb0, 0xb4, 0xc3, 0xe4, 0x50, 0x11, 0x6e, 0x36, 129 | 0xf2, 0x87, 0xda, 0x8d, 0xb5, 0x7d, 0xfd, 0x7d, 0x23, 0xfb, 0xf7, 0x7d, 0xfa, 0xf1, 0x4f, 0x71, 130 | 0xef, 0x85, 0x57, 0x8b, 0x69, 0x7e, 0xfc, 0xf6, 0x5b, 0xd7, 0xde, 0x7c, 0x63, 0xfe, 0x82, 0xf9, 131 | 0xbe, 0x69, 0xc5, 0x40, 0x53, 0x54, 0x57, 0x57, 0x0f, 0x0e, 0x0e, 0xe2, 0x18, 0x87, 0x15, 0x07, 132 | 0x1b, 0x6f, 0xe1, 0xb4, 0xfa, 0x56, 0xf5, 0xae, 0xbf, 0x62, 0x92, 0x89, 0xfb, 0x63, 0x63, 0x03, 133 | 0x56, 0x1f, 0x31, 0xe0, 0x43, 0x89, 0xdc, 0x81, 0x11, 0x40, 0x4c, 0x76, 0x76, 0x76, 0x4f, 0x4f, 134 | 0x0f, 0xf3, 0x61, 0x76, 0x61, 0x29, 0x28, 0x1e, 0xfb, 0xcc, 0x63, 0xcc, 0x81, 0x3f, 0xfb, 0xe4, 135 | 0xdf, 0xf1, 0xc8, 0xb1, 0x23, 0x63, 0x88, 0xf9, 0xa7, 0x2f, 0xff, 0xa3, 0xff, 0xfa, 0xac, 0x5d, 136 | 0xbb, 0x76, 0xc7, 0x8e, 0x1d, 0xfb, 0xf6, 0xed, 0xc3, 0x5a, 0x03, 0x2b, 0x5e, 0xb4, 0x15, 0x1f, 137 | 0x1b, 0x59, 0x7f, 0xb1, 0x06, 0xf4, 0xa2, 0x8f, 0xfc, 0x31, 0x86, 0xa0, 0x98, 0xb8, 0x1b, 0x26, 138 | 0x5a, 0x80, 0xba, 0x3c, 0x20, 0x86, 0x79, 0x8c, 0x18, 0x16, 0xd3, 0x7b, 0xaa, 0x92, 0x58, 0x34, 139 | 0xc0, 0xd8, 0xcb, 0x2e, 0x6f, 0x76, 0x74, 0x74, 0xa4, 0x4e, 0x7e, 0x62, 0xc9, 0x4f, 0xce, 0x9c, 140 | 0xbd, 0x0d, 0xbe, 0xfa, 0xe6, 0x8f, 0x7f, 0x28, 0x3e, 0x6f, 0xf4, 0xd4, 0xe7, 0x9f, 0x44, 0xe4, 141 | 0xf8, 0x07, 0xc6, 0xfd, 0xd1, 0x81, 0x9f, 0xcc, 0x2b, 0x28, 0x28, 0xc0, 0xca, 0x62, 0x74, 0x74, 142 | 0x14, 0xab, 0x8c, 0x85, 0x0b, 0x17, 0xea, 0xdb, 0x4d, 0x6c, 0x40, 0xaf, 0x3b, 0x28, 0xc6, 0x98, 143 | 0x78, 0xff, 0x90, 0x9f, 0xa0, 0x48, 0x9f, 0x4b, 0xf4, 0x19, 0x54, 0x70, 0xcd, 0x9a, 0x35, 0x98, 144 | 0x2b, 0xee, 0xda, 0xb5, 0xab, 0xb1, 0xb1, 0x71, 0x62, 0x92, 0x13, 0x84, 0x0f, 0x7f, 0xe1, 0x99, 145 | 0x89, 0xb5, 0x2e, 0xe6, 0xd2, 0x62, 0xe4, 0xf7, 0x5e, 0x7d, 0xe5, 0xfa, 0xbb, 0x6f, 0x2f, 0x5e, 146 | 0xbc, 0xd8, 0x07, 0x05, 0xb8, 0xf7, 0x2e, 0x5f, 0xbe, 0x1c, 0xb3, 0x12, 0x1c, 0xd1, 0x30, 0x2b, 147 | 0xc1, 0x2a, 0x23, 0xe8, 0xfe, 0x89, 0x35, 0x94, 0xd9, 0x84, 0x7b, 0xa0, 0x41, 0xf1, 0x0f, 0xa7, 148 | 0xc5, 0x8c, 0x71, 0x68, 0x68, 0x08, 0x93, 0xc6, 0x0d, 0x1b, 0x36, 0xb0, 0x87, 0x07, 0x7c, 0xbe, 149 | 0xa4, 0xf4, 0xd3, 0xeb, 0x3f, 0xd1, 0x5c, 0x2b, 0x1a, 0x3b, 0x72, 0x13, 0xd6, 0xc3, 0x2f, 0xfc, 150 | 0xeb, 0x57, 0xbd, 0x2e, 0x5a, 0x7c, 0x0d, 0xed, 0xa2, 0x45, 0x8b, 0xd8, 0x79, 0x81, 0xbe, 0xbe, 151 | 0x3e, 0xac, 0x2f, 0xd0, 0x38, 0x38, 0xc0, 0x05, 0xdd, 0x4b, 0x31, 0xc5, 0xc4, 0xb9, 0x41, 0x00, 152 | 0x23, 0x63, 0xff, 0x2c, 0xc0, 0x23, 0x35, 0x68, 0xe2, 0xcd, 0xd2, 0xe8, 0x03, 0x66, 0x61, 0x33, 153 | 0x21, 0x62, 0x4a, 0x7d, 0x32, 0x7d, 0x11, 0x66, 0x4a, 0x9a, 0x09, 0x9f, 0x65, 0x54, 0x4d, 0xbd, 154 | 0x62, 0x86, 0x6d, 0x62, 0xa8, 0x0f, 0xdf, 0x44, 0x9b, 0xe2, 0x1f, 0x2b, 0xba, 0xea, 0xea, 0x6a, 155 | 0x76, 0x71, 0xb8, 0xbc, 0xbc, 0xdc, 0x67, 0xef, 0xc5, 0x88, 0x87, 0xe1, 0xf7, 0xe1, 0x47, 0x3e, 156 | 0x26, 0x46, 0xb2, 0x55, 0xf1, 0x95, 0xab, 0x77, 0x79, 0x5d, 0x3a, 0x9f, 0x6e, 0x60, 0x89, 0xcb, 157 | 0xce, 0xcc, 0x6f, 0xd9, 0xb2, 0x65, 0xe5, 0xca, 0x95, 0xac, 0x7d, 0x70, 0x8c, 0xd3, 0xf7, 0x8b, 158 | 0xde, 0x02, 0x67, 0xe9, 0x8c, 0xcd, 0x30, 0xa5, 0xf5, 0xce, 0xd5, 0x77, 0x71, 0x58, 0xf9, 0x7a, 159 | 0xa3, 0x15, 0x15, 0xd3, 0x28, 0xa9, 0x0f, 0x98, 0x19, 0x89, 0x61, 0xf6, 0xb0, 0x95, 0x32, 0xdb, 160 | 0xab, 0xcc, 0x24, 0x5c, 0x85, 0x37, 0x37, 0xcc, 0xb7, 0xa1, 0xa1, 0x61, 0xef, 0xde, 0xbd, 0x58, 161 | 0xfe, 0xb1, 0xd7, 0x68, 0x29, 0x7e, 0x8d, 0xc3, 0x1f, 0x7d, 0xf0, 0xa3, 0xaf, 0xff, 0xe0, 0x35, 162 | 0x4d, 0xe4, 0x1b, 0x3f, 0x7c, 0x1d, 0x0e, 0x9c, 0x9f, 0x9f, 0xef, 0x5d, 0xb9, 0xfc, 0xc5, 0xce, 163 | 0x8a, 0xfa, 0x6a, 0xd8, 0xda, 0xda, 0xda, 0x21, 0x95, 0xd5, 0xab, 0x57, 0xe3, 0xb8, 0x36, 0x53, 164 | 0xe7, 0x3c, 0x84, 0x73, 0x26, 0xee, 0xdd, 0x25, 0x5c, 0x84, 0xb7, 0x2c, 0xc2, 0xe9, 0xe9, 0xe9, 165 | 0x6d, 0x6d, 0x6d, 0x6c, 0x02, 0x39, 0xf1, 0xfe, 0xb1, 0xc9, 0xd3, 0x4b, 0xef, 0xf8, 0xf6, 0xff, 166 | 0xff, 0x96, 0x66, 0xf5, 0xdb, 0xde, 0xd1, 0xce, 0xce, 0x69, 0x79, 0x5a, 0x2e, 0x5c, 0x97, 0x9d, 167 | 0x33, 0x43, 0xf5, 0xab, 0xaa, 0xaa, 0x30, 0xfb, 0xd8, 0xbd, 0x7b, 0x37, 0x26, 0x20, 0x70, 0x66, 168 | 0xb4, 0x06, 0x77, 0xdd, 0xa0, 0xbb, 0x28, 0xa6, 0x98, 0xb8, 0x45, 0x86, 0x70, 0x0b, 0x34, 0x28, 169 | 0xfb, 0xe7, 0x64, 0x66, 0x66, 0x6e, 0xde, 0xbc, 0x19, 0xe3, 0x70, 0x57, 0x57, 0x17, 0x3b, 0x7b, 170 | 0xe4, 0xb5, 0x03, 0xaf, 0x5a, 0xb5, 0x0a, 0xbe, 0x7a, 0xfb, 0xf8, 0x25, 0x31, 0xf2, 0x89, 0xbf, 171 | 0x7b, 0x1c, 0x91, 0xf7, 0x3f, 0x70, 0xbf, 0x77, 0xe5, 0x2a, 0xa1, 0xeb, 0xde, 0xa0, 0xb8, 0xb8, 172 | 0x98, 0x9d, 0x8a, 0xaf, 0xab, 0xab, 0x4b, 0x4e, 0x4e, 0x66, 0x6d, 0x02, 0x07, 0x66, 0x6d, 0x12, 173 | 0x74, 0x2f, 0xc5, 0x14, 0xef, 0x3d, 0x20, 0xa2, 0x27, 0x3e, 0xf4, 0xda, 0x54, 0xc3, 0x78, 0xcd, 174 | 0x5e, 0x7d, 0x24, 0x0f, 0x1b, 0xa6, 0xd7, 0x17, 0xa1, 0x09, 0x6b, 0xb2, 0x4b, 0xf2, 0x86, 0x4d, 175 | 0x60, 0x45, 0x7f, 0x79, 0x16, 0x4d, 0x1a, 0xc3, 0xba, 0xf3, 0x5d, 0x1c, 0x6e, 0xac, 0xd9, 0xd9, 176 | 0xd9, 0x58, 0x04, 0x62, 0x1c, 0xc6, 0x82, 0x70, 0xe2, 0xe6, 0x55, 0x8f, 0xd9, 0xb0, 0x61, 0x3d, 177 | 0x7c, 0xf5, 0x33, 0x9f, 0xfd, 0x0c, 0x8f, 0xc9, 0xcd, 0xcb, 0xc5, 0xd8, 0x8b, 0x48, 0x0c, 0x86, 178 | 0x5e, 0x97, 0x0e, 0x0a, 0x0b, 0x0b, 0x51, 0x5f, 0x1c, 0xb3, 0x58, 0x7d, 0xe3, 0x85, 0xe3, 0x9a, 179 | 0xa6, 0x89, 0x22, 0xed, 0x20, 0x2b, 0xdd, 0x61, 0x31, 0x97, 0x61, 0x58, 0xbe, 0xcb, 0x50, 0xc9, 180 | 0x88, 0xec, 0xd3, 0x2c, 0xbd, 0x59, 0xa4, 0x5e, 0x37, 0xb1, 0xe9, 0xd8, 0xff, 0xfb, 0xeb, 0x96, 181 | 0xb8, 0xd0, 0xf3, 0x22, 0x91, 0x22, 0x3e, 0x6b, 0x62, 0x23, 0x41, 0x44, 0x85, 0x4a, 0x44, 0xc9, 182 | 0x6b, 0x61, 0x98, 0x51, 0xdc, 0x0c, 0x9b, 0x40, 0x1e, 0xaf, 0x89, 0xd1, 0x34, 0x74, 0x41, 0x41, 183 | 0x01, 0xe6, 0x93, 0xec, 0xc9, 0x75, 0x76, 0x61, 0xc9, 0xd3, 0x41, 0xf8, 0xb5, 0x6b, 0xaf, 0xbd, 184 | 0xfd, 0xee, 0x4f, 0x1f, 0x7b, 0xe2, 0xd3, 0x3b, 0x76, 0x6e, 0xc7, 0x50, 0xfc, 0xa3, 0x1f, 0xbf, 185 | 0x09, 0xef, 0xd5, 0xdc, 0x14, 0xed, 0x2e, 0x71, 0xa1, 0x13, 0x57, 0x4b, 0x96, 0x2c, 0xe9, 0xef, 186 | 0xef, 0xdf, 0xb7, 0x6f, 0x5f, 0x47, 0x47, 0x07, 0x56, 0x10, 0x71, 0x82, 0x21, 0x9a, 0xd9, 0x7a, 187 | 0x58, 0x03, 0xb0, 0xd2, 0x0b, 0xa2, 0x19, 0x5b, 0x91, 0x69, 0x31, 0x8d, 0x15, 0x44, 0xcb, 0x31, 188 | 0xb3, 0x22, 0x89, 0xaa, 0x0e, 0xb5, 0x0a, 0xff, 0x4d, 0x3a, 0xc2, 0x39, 0x18, 0x7c, 0xd8, 0x85, 189 | 0xa5, 0x9d, 0x3b, 0x77, 0x56, 0x57, 0x57, 0x4f, 0x9c, 0xfd, 0x17, 0x26, 0x9c, 0x56, 0x3c, 0x44, 190 | 0x94, 0xa6, 0xef, 0x45, 0x8d, 0x6f, 0xdc, 0x78, 0xf8, 0x46, 0xcd, 0xed, 0xd0, 0xff, 0xf9, 0xed, 191 | 0xff, 0xd0, 0xa8, 0x34, 0xc9, 0x08, 0x8c, 0x4a, 0x99, 0x11, 0x7a, 0xa0, 0x4a, 0x0e, 0xab, 0x45, 192 | 0xbc, 0xba, 0xf4, 0x4d, 0x4b, 0x4b, 0xdb, 0xb4, 0x69, 0x13, 0x66, 0xce, 0x58, 0x35, 0x60, 0xbd, 193 | 0x60, 0xbf, 0xbd, 0x08, 0xcb, 0xb8, 0x7f, 0x30, 0x26, 0x0c, 0x81, 0xd3, 0x56, 0x55, 0x55, 0x61, 194 | 0x22, 0x0d, 0x1f, 0x86, 0x33, 0xc7, 0x7b, 0xfc, 0x42, 0xe6, 0x92, 0xd2, 0x92, 0x3b, 0xee, 0xfc, 195 | 0xe0, 0x23, 0x9f, 0x78, 0xe4, 0xa1, 0x87, 0x1f, 0x3a, 0x74, 0xe3, 0x21, 0x4f, 0xcb, 0x62, 0x60, 196 | 0xad, 0xdb, 0xd2, 0xd2, 0x82, 0x99, 0x33, 0xe6, 0xcf, 0xcb, 0x96, 0x2d, 0xf3, 0xa1, 0x44, 0x82, 197 | 0xf0, 0x83, 0x19, 0xc2, 0x95, 0x95, 0xa6, 0xa6, 0x26, 0x0c, 0x50, 0xec, 0x61, 0xba, 0x99, 0x33, 198 | 0x67, 0x4a, 0xe6, 0x51, 0x61, 0xd1, 0xac, 0xb4, 0x35, 0x27, 0x27, 0xc5, 0x93, 0xe1, 0x1c, 0xcd, 199 | 0x12, 0x3d, 0xde, 0x04, 0x43, 0x4d, 0xcc, 0xd4, 0x8b, 0x57, 0x3f, 0x4f, 0x91, 0x94, 0x94, 0xb4, 200 | 0x7e, 0xfd, 0xfa, 0xdd, 0xbb, 0x77, 0x63, 0xa5, 0x80, 0x35, 0xb0, 0x32, 0x25, 0x9f, 0x85, 0x26, 201 | 0x08, 0x3b, 0x70, 0xeb, 0x47, 0x78, 0xc1, 0x82, 0x05, 0x6d, 0x6d, 0x6d, 0x18, 0xa6, 0x7a, 0x7b, 202 | 0x7b, 0x4b, 0x4b, 0x4b, 0xb1, 0x36, 0x86, 0x27, 0x17, 0x0a, 0xb0, 0x4d, 0xf6, 0xe9, 0x57, 0x50, 203 | 0x5c, 0x5c, 0x5c, 0x52, 0x52, 0x52, 0xaa, 0x82, 0x71, 0xbb, 0x5c, 0xa5, 0xa2, 0xa2, 0xa2, 0xb2, 204 | 0xb2, 0x12, 0x53, 0x71, 0xf8, 0x4c, 0x6d, 0x6d, 0x2d, 0xd6, 0xd5, 0x1b, 0x37, 0x6e, 0xac, 0xaf, 205 | 0xaf, 0x6f, 0x68, 0x68, 0x68, 0x6c, 0x6c, 0x6c, 0x56, 0x69, 0x09, 0x81, 0x70, 0x93, 0x4a, 0xa3, 206 | 0x0a, 0xd2, 0x20, 0x31, 0xb2, 0x6c, 0xd8, 0xb0, 0xa1, 0xa6, 0xa6, 0x06, 0x42, 0xd6, 0xad, 0x5b, 207 | 0x57, 0xa9, 0x02, 0xb1, 0x10, 0x5e, 0x56, 0x56, 0x56, 0xa2, 0xc2, 0x3e, 0x48, 0x0d, 0x4d, 0xb8, 208 | 0x56, 0x66, 0x5f, 0xb8, 0x44, 0x2d, 0x20, 0x07, 0xde, 0x8b, 0xc9, 0x05, 0x32, 0x4e, 0x5c, 0xdb, 209 | 0x08, 0x3d, 0x00, 0x4c, 0x10, 0xb1, 0x00, 0x1f, 0x84, 0x15, 0xf5, 0xee, 0xc2, 0xae, 0xae, 0x2e, 210 | 0x36, 0x97, 0xde, 0xa6, 0xb2, 0x5d, 0x00, 0x9b, 0x18, 0xc4, 0xb0, 0x5a, 0x86, 0x3f, 0x20, 0xcd, 211 | 0xbe, 0x7d, 0xfb, 0x0e, 0x1c, 0x38, 0x30, 0x3a, 0x3a, 0x7a, 0xe8, 0xd0, 0xa1, 0xb1, 0xb1, 0xb1, 212 | 0x23, 0x47, 0x8e, 0xdc, 0x72, 0xcb, 0x2d, 0xc7, 0x8e, 0x1d, 0x3b, 0x71, 0xe2, 0xc4, 0xad, 0xb7, 213 | 0xde, 0x7a, 0xfa, 0xf4, 0xe9, 0x33, 0x67, 0xce, 0x9c, 0x55, 0x39, 0x77, 0xee, 0xdc, 0xf9, 0xf3, 214 | 0xe7, 0x2f, 0x5c, 0xb8, 0x70, 0xe9, 0xd2, 0xa5, 0xf1, 0xf1, 0xf1, 0x0f, 0x86, 0x40, 0x18, 0x31, 215 | 0x17, 0x2f, 0x5e, 0xbc, 0xa0, 0x72, 0x5e, 0x05, 0xe9, 0x6f, 0xbb, 0xed, 0x36, 0x48, 0x80, 0x1c, 216 | 0x48, 0x3b, 0x7a, 0xf4, 0x28, 0xc4, 0x42, 0xfe, 0xe1, 0xc3, 0x87, 0x51, 0x10, 0x4a, 0x1c, 0x19, 217 | 0x19, 0xc1, 0x4c, 0x01, 0x0a, 0xb0, 0x75, 0x3b, 0x54, 0x12, 0x95, 0xdc, 0x11, 0x02, 0xe1, 0x81, 218 | 0x81, 0x01, 0xe8, 0xcc, 0x12, 0xe3, 0x58, 0x30, 0x4b, 0xbd, 0x6f, 0x34, 0x2e, 0x7a, 0xbe, 0xf9, 219 | 0x46, 0x10, 0x96, 0x10, 0x6d, 0x7a, 0xe9, 0xd2, 0xa5, 0xec, 0x54, 0x2d, 0x18, 0x31, 0x82, 0x79, 220 | 0x2c, 0xdc, 0x09, 0x1e, 0x0b, 0xef, 0x3a, 0x7e, 0xfc, 0xf8, 0xc9, 0x93, 0x27, 0xe1, 0xae, 0xf0, 221 | 0x3a, 0x38, 0x2a, 0xbc, 0x11, 0x6e, 0xf9, 0x01, 0x23, 0xe0, 0xb1, 0x77, 0xde, 0x79, 0xe7, 0x95, 222 | 0x2b, 0x57, 0x3e, 0xf4, 0xa1, 0x0f, 0xdd, 0xad, 0x72, 0xf5, 0xea, 0xd5, 0xbb, 0xee, 0xba, 0x0b, 223 | 0x91, 0x86, 0xe9, 0x2f, 0x5f, 0xbe, 0x7c, 0x49, 0x85, 0x79, 0xf5, 0xa9, 0x53, 0xa7, 0x50, 0x10, 224 | 0x73, 0x69, 0x14, 0x0d, 0x05, 0x0e, 0x1e, 0x3c, 0xb8, 0x7f, 0xff, 0x7e, 0x43, 0x25, 0xa1, 0x3c, 225 | 0xa6, 0x12, 0xec, 0x28, 0xc3, 0x9e, 0x13, 0x9c, 0x78, 0xba, 0xcd, 0xf7, 0x57, 0x73, 0x12, 0x84, 226 | 0x1f, 0xc4, 0x09, 0xd7, 0x18, 0x14, 0xf5, 0x0d, 0x38, 0xb5, 0x2a, 0x6c, 0x36, 0x0b, 0xd8, 0x26, 227 | 0x0b, 0x23, 0x92, 0x4d, 0x89, 0x31, 0xf5, 0xc5, 0x34, 0xf8, 0x86, 0x1b, 0x6e, 0xc0, 0xc4, 0xbb, 228 | 0xbd, 0xbd, 0xbd, 0xa3, 0xa3, 0xa3, 0xb3, 0xb3, 0x73, 0xf3, 0xe6, 0xcd, 0xdd, 0xdd, 0xdd, 0x98, 229 | 0x84, 0xe3, 0x28, 0xb0, 0x65, 0xcb, 0x96, 0x6d, 0x21, 0x30, 0x24, 0xb2, 0xa7, 0xa0, 0x00, 0xfc, 230 | 0x6a, 0x58, 0x05, 0x01, 0x16, 0x83, 0x81, 0x74, 0xeb, 0xd6, 0xad, 0x48, 0x8f, 0x31, 0x93, 0x65, 231 | 0xc4, 0x7f, 0x5f, 0x5f, 0x5f, 0x4f, 0x4f, 0x0f, 0x04, 0x6e, 0xda, 0xb4, 0x09, 0xc2, 0x51, 0x0a, 232 | 0xca, 0x62, 0x73, 0x6f, 0x36, 0xeb, 0x86, 0x1a, 0x50, 0x86, 0xeb, 0x56, 0x2b, 0xc0, 0x36, 0x99, 233 | 0xc2, 0x18, 0x7b, 0x27, 0x5e, 0xef, 0x12, 0xba, 0x9e, 0x44, 0x0e, 0x4c, 0xc4, 0x1a, 0xe2, 0xa9, 234 | 0x20, 0x45, 0x35, 0x71, 0xcd, 0x43, 0xcb, 0x9a, 0x87, 0x9c, 0x19, 0xfc, 0x61, 0x77, 0x8e, 0xe6, 235 | 0x8d, 0x4a, 0xec, 0x6d, 0x52, 0x22, 0xfa, 0x77, 0x29, 0x1a, 0xbe, 0x8d, 0x4d, 0x7c, 0xc9, 0x13, 236 | 0x17, 0x2e, 0xbe, 0xea, 0x21, 0x59, 0xf7, 0x34, 0x7c, 0xd2, 0xe4, 0xc7, 0x6b, 0xc5, 0x78, 0x76, 237 | 0x61, 0x2c, 0x3e, 0xf4, 0xbd, 0x55, 0xba, 0xc2, 0x41, 0x10, 0xd1, 0x07, 0x39, 0x2d, 0x41, 0x10, 238 | 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 239 | 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x58, 0x45, 0xf2, 0x2a, 0x00, 0xba, 0x81, 0x8e, 0x20, 240 | 0xa6, 0x0a, 0x72, 0x2f, 0x25, 0x07, 0x26, 0x88, 0x29, 0x4d, 0x58, 0x47, 0x8d, 0xc8, 0x87, 0xe9, 241 | 0x15, 0x3e, 0x04, 0x31, 0x55, 0x10, 0x9f, 0xaa, 0x31, 0xdb, 0xa5, 0xf7, 0x55, 0xfe, 0x30, 0x1d, 242 | 0xb9, 0x31, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x04, 0x08, 0xcd, 0xc9, 0x09, 0x22, 0xa6, 243 | 0xa0, 0x13, 0x66, 0x04, 0x11, 0x3b, 0x90, 0x33, 0x13, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 244 | 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 245 | 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 246 | 0xd3, 0x09, 0x7a, 0xa8, 0x8e, 0x20, 0xa2, 0x15, 0xf2, 0x5e, 0x82, 0x88, 0x4a, 0xe8, 0x05, 0x15, 247 | 0x04, 0x11, 0xc5, 0x90, 0x03, 0x13, 0x44, 0x54, 0x42, 0xae, 0x4b, 0x10, 0xd1, 0x0a, 0x7f, 0x8f, 248 | 0x7a, 0xd0, 0x8a, 0x10, 0x04, 0x11, 0x21, 0x92, 0x6f, 0x27, 0x10, 0x04, 0x31, 0xa5, 0xa1, 0x6f, 249 | 0x98, 0x10, 0x44, 0x14, 0x63, 0xf6, 0x71, 0x22, 0x82, 0x20, 0xa6, 0x3a, 0x34, 0x79, 0x26, 0x88, 250 | 0x28, 0x86, 0x86, 0x5f, 0x82, 0x88, 0x56, 0xe2, 0x42, 0x90, 0x03, 0x13, 0x44, 0x34, 0x01, 0x8f, 251 | 0x8d, 0x8f, 0x8f, 0x4f, 0x48, 0x48, 0xa0, 0xc9, 0x33, 0x41, 0x44, 0x1f, 0x6c, 0xe9, 0x0b, 0x1f, 252 | 0xa6, 0xb1, 0x97, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 253 | 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 254 | 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 255 | 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0xc2, 0x6d, 0xe8, 0xf3, 0x02, 0x04, 0x11, 0xc5, 256 | 0xb0, 0x77, 0xb5, 0x05, 0xad, 0x05, 0x41, 0x10, 0xb6, 0xa0, 0xe1, 0x97, 0x20, 0x08, 0x82, 0x20, 257 | 0x08, 0x82, 0x20, 0x22, 0x25, 0x3e, 0x3e, 0x3e, 0x68, 0x15, 0x08, 0x82, 0xb0, 0x0b, 0x2d, 0x83, 258 | 0x09, 0x22, 0x2a, 0xa1, 0x53, 0xd0, 0x04, 0x11, 0xc5, 0x90, 0x03, 0x13, 0x44, 0x74, 0x43, 0x37, 259 | 0x72, 0x10, 0x44, 0x14, 0x43, 0xde, 0x4b, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 260 | 0x4c, 0x47, 0x66, 0x84, 0x08, 0x5a, 0x11, 0x82, 0x20, 0x6c, 0x41, 0x0e, 0x4c, 0x10, 0x04, 0x41, 261 | 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x41, 0x10, 0x04, 0x61, 0x06, 0x9d, 0x3e, 0x25, 262 | 0x88, 0x28, 0x26, 0x58, 0x07, 0x66, 0x4f, 0xf6, 0x78, 0xaa, 0x03, 0x2b, 0xc2, 0xeb, 0x52, 0x08, 263 | 0x22, 0x00, 0x82, 0xbd, 0x80, 0x89, 0xa2, 0x13, 0x54, 0xbc, 0x2e, 0x05, 0xde, 0x3b, 0x73, 0xe6, 264 | 0x4c, 0x7a, 0x87, 0x06, 0x11, 0x6b, 0x04, 0xe8, 0xc0, 0xcc, 0x7b, 0x13, 0x13, 0x13, 0x67, 0xcf, 265 | 0x9e, 0xed, 0xb5, 0x0e, 0x70, 0xe0, 0xa4, 0xa4, 0x24, 0x1f, 0x0a, 0x22, 0x08, 0x5f, 0x09, 0xd0, 266 | 0xa0, 0xe1, 0x54, 0x73, 0xe7, 0xce, 0x9d, 0x33, 0x67, 0x8e, 0xd7, 0x23, 0xb0, 0xa2, 0x56, 0x13, 267 | 0x0e, 0x8c, 0xb2, 0xc8, 0x87, 0x09, 0xc2, 0x1d, 0x66, 0xcd, 0x9a, 0x95, 0x96, 0x96, 0x06, 0x1f, 268 | 0xf6, 0xa7, 0x38, 0x4c, 0xa1, 0xe7, 0xcd, 0x9b, 0x37, 0x7f, 0xfe, 0x7c, 0x7a, 0x99, 0x06, 0x41, 269 | 0x38, 0x85, 0xb9, 0x53, 0x46, 0x46, 0x46, 0x72, 0x72, 0xb2, 0xf5, 0x5c, 0x0e, 0xcf, 0x78, 0xa1, 270 | 0xc4, 0xc5, 0x8b, 0x17, 0x63, 0x10, 0xb6, 0x97, 0x9d, 0x20, 0x88, 0xf7, 0xc0, 0xc0, 0x9b, 0x95, 271 | 0x95, 0x95, 0x9a, 0x9a, 0x8a, 0x71, 0xd8, 0x7a, 0x2e, 0xb8, 0x6e, 0xbc, 0x8a, 0x3d, 0x1f, 0xc6, 272 | 0x14, 0x3a, 0x33, 0x33, 0x73, 0xe1, 0xc2, 0x85, 0x11, 0x15, 0x4a, 0x10, 0x84, 0x96, 0xf4, 0xf4, 273 | 0xf4, 0x9c, 0x9c, 0x9c, 0x88, 0x86, 0x5f, 0x45, 0x75, 0x60, 0x8c, 0x9f, 0x70, 0x3f, 0x7b, 0x0e, 274 | 0x8c, 0x8c, 0xf0, 0xde, 0xec, 0xec, 0x6c, 0x0c, 0xc5, 0x36, 0xb2, 0x13, 0x04, 0x31, 0xe1, 0x84, 275 | 0x18, 0x7e, 0x97, 0x2d, 0x5b, 0x06, 0x47, 0xc2, 0x44, 0x3a, 0xa2, 0xbc, 0x98, 0x3f, 0xc3, 0xe7, 276 | 0x93, 0x92, 0x92, 0x6c, 0xcf, 0xa2, 0x91, 0x7d, 0xe5, 0xca, 0x95, 0x98, 0x48, 0xd3, 0xa9, 0x2c, 277 | 0x82, 0xb0, 0x03, 0x9c, 0x70, 0xe9, 0xd2, 0xa5, 0xb9, 0xb9, 0xb9, 0x98, 0x3f, 0x47, 0x7a, 0x61, 278 | 0x96, 0x39, 0xb0, 0x93, 0x13, 0xd7, 0x38, 0x64, 0xe4, 0xa8, 0x60, 0x10, 0x26, 0x1f, 0x26, 0x88, 279 | 0x88, 0xc1, 0x1c, 0xb8, 0xb0, 0xb0, 0x10, 0x2e, 0x04, 0x27, 0xb4, 0xe1, 0x42, 0x29, 0x29, 0x29, 280 | 0xf0, 0x7c, 0xdb, 0x0e, 0x8c, 0x43, 0x06, 0x66, 0xd1, 0xf9, 0xf9, 0xf9, 0x2b, 0x56, 0xac, 0xa0, 281 | 0xd3, 0xd1, 0x04, 0x11, 0x19, 0x58, 0x85, 0x62, 0xfa, 0x5a, 0x52, 0x52, 0xb2, 0x64, 0xc9, 0x12, 282 | 0x1b, 0xd9, 0x99, 0xfb, 0x65, 0x64, 0x64, 0x38, 0xb9, 0xa7, 0x0a, 0x79, 0xf3, 0xf2, 0xf2, 0x8a, 283 | 0x8b, 0x8b, 0x13, 0x13, 0x13, 0x6d, 0x0b, 0x21, 0x88, 0xe9, 0xc8, 0xfc, 0xf9, 0xf3, 0x57, 0xaf, 284 | 0x5e, 0x8d, 0x01, 0x10, 0x01, 0x1b, 0xd9, 0x31, 0x01, 0x4e, 0x4f, 0x4f, 0x5f, 0xb4, 0x68, 0x91, 285 | 0xc3, 0xd3, 0xc8, 0x58, 0x81, 0x97, 0x97, 0x97, 0xe3, 0x20, 0x42, 0x97, 0x94, 0x08, 0x22, 0x02, 286 | 0xb2, 0xb2, 0xb2, 0xd6, 0xaf, 0x5f, 0x9f, 0x99, 0x99, 0x69, 0x6f, 0xfa, 0x8a, 0xc1, 0x13, 0x0e, 287 | 0x8c, 0x25, 0x34, 0x56, 0xc2, 0x4e, 0x56, 0xb0, 0x38, 0x7c, 0x14, 0x14, 0x14, 0x94, 0x96, 0x96, 288 | 0x62, 0x36, 0x6e, 0x5b, 0x08, 0x41, 0x4c, 0x2f, 0xe6, 0xcc, 0x99, 0x53, 0x54, 0x54, 0x54, 0x5d, 289 | 0x5d, 0x6d, 0xfb, 0x2a, 0x0e, 0x9c, 0x16, 0xc3, 0x26, 0x96, 0xaf, 0x49, 0x49, 0x49, 0x4e, 0x34, 290 | 0x81, 0x1c, 0x1c, 0x44, 0x36, 0x6e, 0xdc, 0x98, 0x9d, 0x9d, 0xed, 0x44, 0x0e, 0x41, 0x4c, 0x23, 291 | 0xb0, 0xf2, 0xac, 0xaa, 0xaa, 0xc2, 0xfc, 0xd9, 0xf6, 0xe2, 0x13, 0x53, 0xe8, 0xe5, 0xcb, 0x97, 292 | 0xe7, 0xe4, 0xe4, 0x38, 0x5f, 0xbe, 0xa6, 0xa4, 0xa4, 0x6c, 0xd8, 0xb0, 0x01, 0x2b, 0x61, 0x04, 293 | 0x1c, 0x8a, 0x22, 0x88, 0xd8, 0x07, 0xb3, 0xdf, 0x75, 0xeb, 0xd6, 0xd5, 0xd4, 0xd4, 0x60, 0xf8, 294 | 0xb5, 0x7d, 0xfa, 0x37, 0x21, 0x21, 0x01, 0xf3, 0xe7, 0x95, 0x2b, 0x57, 0x3a, 0xbf, 0x83, 0x1a, 295 | 0x87, 0x00, 0x1c, 0x4a, 0xa0, 0x0f, 0xe6, 0xd2, 0x0e, 0x45, 0x11, 0x44, 0x8c, 0x03, 0xc7, 0x5b, 296 | 0xb4, 0x68, 0x51, 0x63, 0x63, 0x63, 0x79, 0x79, 0xb9, 0x43, 0x51, 0x98, 0xf4, 0xae, 0x59, 0xb3, 297 | 0xc6, 0xf9, 0xb0, 0xc9, 0x9e, 0x85, 0xaa, 0xad, 0xad, 0xc5, 0x38, 0xec, 0xc3, 0xe3, 0x50, 0x04, 298 | 0x11, 0xc5, 0x60, 0xd4, 0xad, 0xac, 0xac, 0x84, 0xb7, 0x60, 0xf9, 0xea, 0x44, 0x0e, 0xa6, 0xd0, 299 | 0x18, 0x36, 0x4b, 0x4a, 0x4a, 0xdc, 0x3a, 0x7b, 0x5c, 0x51, 0x51, 0xd1, 0xd2, 0xd2, 0x92, 0x95, 300 | 0x95, 0x15, 0xe9, 0x3d, 0x61, 0x04, 0x31, 0x8d, 0x80, 0x87, 0x74, 0x75, 0x75, 0x61, 0xc1, 0xe9, 301 | 0xf0, 0xe4, 0x13, 0xfc, 0x16, 0x0b, 0x60, 0x38, 0xb0, 0x5b, 0xf7, 0x51, 0x61, 0x45, 0xbd, 0x71, 302 | 0xe3, 0xc6, 0xf5, 0xeb, 0xd7, 0x2f, 0x58, 0xb0, 0xc0, 0xb9, 0x34, 0x82, 0x88, 0x41, 0xe0, 0x75, 303 | 0x70, 0xdd, 0xde, 0xde, 0x5e, 0x2c, 0x5f, 0x1d, 0x8a, 0xc2, 0xbc, 0x17, 0x63, 0x38, 0x06, 0xf3, 304 | 0xb4, 0xb4, 0x34, 0x57, 0x1c, 0x18, 0xba, 0x61, 0x42, 0xde, 0xd3, 0xd3, 0xe3, 0x5c, 0x37, 0x82, 305 | 0x88, 0x4d, 0x72, 0x73, 0x73, 0x9b, 0x9b, 0x9b, 0xeb, 0xeb, 0xeb, 0x9d, 0x5f, 0x74, 0x8d, 0x8f, 306 | 0x8f, 0x2f, 0x2a, 0x2a, 0xc2, 0xaa, 0xd5, 0xc5, 0x01, 0x73, 0xd9, 0xb2, 0x65, 0xfd, 0xfd, 0xfd, 307 | 0x65, 0x65, 0x65, 0x0e, 0x67, 0x07, 0x04, 0x11, 0x9b, 0xc0, 0xdf, 0x30, 0xc4, 0x65, 0x67, 0x67, 308 | 0x3b, 0x7f, 0x0a, 0x37, 0x31, 0x31, 0x11, 0x03, 0x66, 0x55, 0x55, 0x95, 0x8b, 0x0e, 0x8c, 0xc3, 309 | 0x0a, 0x66, 0xd1, 0x6d, 0x6d, 0x6d, 0x58, 0x5d, 0xbb, 0x25, 0x93, 0x20, 0x62, 0x01, 0xcc, 0x78, 310 | 0xe7, 0xcf, 0x9f, 0x8f, 0xd5, 0x6f, 0x67, 0x67, 0xa7, 0x2b, 0x67, 0x89, 0x12, 0x12, 0x12, 0x0a, 311 | 0x0a, 0x0a, 0x6a, 0x6a, 0x6a, 0x32, 0x33, 0x33, 0xdd, 0x7a, 0x96, 0x08, 0x8a, 0xb1, 0x41, 0xb8, 312 | 0xa1, 0xa1, 0xc1, 0x15, 0x81, 0xc4, 0x34, 0x25, 0xf6, 0x9e, 0x6e, 0x9b, 0x33, 0x67, 0x0e, 0x46, 313 | 0x4b, 0x0c, 0xbf, 0xeb, 0xd6, 0xad, 0x73, 0x4b, 0x26, 0xa6, 0xd0, 0x98, 0x90, 0x2f, 0x5a, 0xb4, 314 | 0xc8, 0x2d, 0x81, 0x8a, 0xea, 0xc3, 0x38, 0xca, 0x74, 0x77, 0x77, 0x2f, 0x5c, 0xb8, 0x90, 0x5e, 315 | 0x3d, 0x4b, 0xd8, 0x81, 0xbd, 0x79, 0x3c, 0x68, 0x2d, 0x5c, 0x26, 0x3d, 0x3d, 0x7d, 0xdb, 0xb6, 316 | 0x6d, 0x2d, 0x2d, 0x2d, 0x19, 0x19, 0x19, 0xae, 0x08, 0xc4, 0x24, 0xbc, 0xa2, 0xa2, 0x02, 0x0e, 317 | 0x6c, 0xef, 0x59, 0x08, 0x09, 0x38, 0xd0, 0xf4, 0xf5, 0xf5, 0x61, 0xb6, 0xef, 0xdb, 0x4b, 0xf6, 318 | 0x88, 0xd8, 0x81, 0xb9, 0x6e, 0x8c, 0x7d, 0x24, 0x1a, 0x95, 0x2a, 0x2c, 0x2c, 0xdc, 0xbf, 0x7f, 319 | 0xbf, 0xf3, 0x9b, 0x37, 0x38, 0x18, 0x2a, 0x4b, 0x4b, 0x4b, 0x1b, 0x1b, 0x1b, 0x31, 0x02, 0xbb, 320 | 0x7b, 0xbc, 0x4b, 0x4b, 0x4b, 0x6b, 0x6d, 0x6d, 0xdd, 0xb5, 0x6b, 0xd7, 0xe2, 0xc5, 0x8b, 0x5d, 321 | 0x14, 0x4b, 0x4c, 0x23, 0x62, 0x6c, 0x10, 0x5e, 0xba, 0x74, 0x69, 0x7b, 0x7b, 0xfb, 0xf6, 0xed, 322 | 0xdb, 0x73, 0x72, 0x72, 0xdc, 0x92, 0x89, 0x03, 0x5c, 0x7e, 0x7e, 0x3e, 0x56, 0xd4, 0x5e, 0x3c, 323 | 0x8e, 0xbf, 0x76, 0xed, 0xda, 0x83, 0x07, 0x0f, 0x16, 0x17, 0x17, 0xd3, 0x8d, 0x59, 0x04, 0xa1, 324 | 0xd4, 0xd4, 0xd4, 0x0c, 0x0f, 0x0f, 0x63, 0xf5, 0xeb, 0xee, 0x1b, 0xe4, 0xe0, 0xc3, 0x79, 0x79, 325 | 0x79, 0x18, 0x30, 0x5d, 0x94, 0xc9, 0xc0, 0x41, 0x01, 0x87, 0x1b, 0x2c, 0x86, 0x1d, 0xde, 0x2e, 326 | 0x46, 0x10, 0xd1, 0x0d, 0x7b, 0x77, 0x64, 0x6f, 0x6f, 0xef, 0x81, 0x03, 0x07, 0xbc, 0xf0, 0x34, 327 | 0x8f, 0x48, 0x49, 0x49, 0xa9, 0xac, 0xac, 0x84, 0xce, 0x75, 0x75, 0x75, 0x41, 0xeb, 0x42, 0x44, 328 | 0x09, 0x31, 0xb6, 0xee, 0x65, 0xc0, 0x7b, 0x4b, 0x4a, 0x4a, 0x76, 0xef, 0xde, 0x0d, 0x1f, 0x8e, 329 | 0xae, 0x37, 0x30, 0xa7, 0xa6, 0xa6, 0x8e, 0x8e, 0x8e, 0x0e, 0x0c, 0x0c, 0x38, 0x79, 0xf1, 0x25, 330 | 0x31, 0x5d, 0xf0, 0xe1, 0xcb, 0x9a, 0x81, 0x80, 0xa1, 0x6c, 0x50, 0xa5, 0xb0, 0xb0, 0x30, 0xba, 331 | 0xae, 0xca, 0xe0, 0x70, 0xd3, 0xd3, 0xd3, 0x83, 0x99, 0x7f, 0x45, 0x45, 0x45, 0xec, 0xbd, 0x31, 332 | 0x6b, 0x46, 0x88, 0xa0, 0x15, 0x89, 0x15, 0x62, 0xf5, 0xa3, 0xb5, 0xcb, 0x97, 0x2f, 0x3f, 0x7e, 333 | 0xfc, 0x78, 0x67, 0x67, 0xa7, 0xed, 0x4f, 0x28, 0x04, 0x05, 0x14, 0x2e, 0x28, 0x28, 0xd8, 0xb5, 334 | 0x6b, 0x17, 0x7c, 0x98, 0x5e, 0xfe, 0x4e, 0x84, 0x01, 0xe6, 0x12, 0x7b, 0x0e, 0x9c, 0x9e, 0x9e, 335 | 0xde, 0xda, 0xda, 0x7a, 0xf3, 0xcd, 0x37, 0x57, 0x55, 0x55, 0x05, 0xad, 0x4b, 0xc4, 0xb0, 0x01, 336 | 0x0a, 0x87, 0x9e, 0x53, 0xa7, 0x4e, 0xe5, 0xe5, 0xe5, 0x05, 0xad, 0x0e, 0x31, 0x85, 0x61, 0x9f, 337 | 0xf9, 0x89, 0x3d, 0x07, 0x2e, 0x2f, 0x2f, 0x1f, 0x1b, 0x1b, 0xf3, 0xe8, 0xf9, 0x1e, 0x7f, 0x16, 338 | 0x1d, 0x38, 0xf4, 0xe0, 0x00, 0xd4, 0xd1, 0xd1, 0x11, 0xf3, 0xd7, 0x84, 0x63, 0xcc, 0xf6, 0x7c, 339 | 0x25, 0x56, 0x1d, 0x18, 0xc3, 0xd7, 0xb9, 0x73, 0xe7, 0x8a, 0x8a, 0x8a, 0xbc, 0xb8, 0xa6, 0xed, 340 | 0xf0, 0xe3, 0x66, 0x16, 0xc9, 0xca, 0xca, 0xea, 0xee, 0xee, 0x3e, 0x7a, 0xf4, 0x68, 0x34, 0x4e, 341 | 0x22, 0xac, 0xc3, 0x8e, 0x86, 0x41, 0x6b, 0x41, 0x4c, 0x19, 0xd8, 0x0b, 0xd3, 0x47, 0x46, 0x46, 342 | 0x30, 0x02, 0x7b, 0xf4, 0x7c, 0xbc, 0xc3, 0x8f, 0x9b, 0x59, 0x07, 0x2b, 0xe1, 0x8b, 0x17, 0x2f, 343 | 0xf6, 0xf6, 0xf6, 0x7a, 0x5a, 0x0a, 0x41, 0x4c, 0x21, 0xe0, 0x57, 0x5b, 0xb6, 0x6c, 0xc1, 0xe4, 344 | 0xb3, 0xb9, 0xb9, 0x39, 0xd2, 0xcf, 0x0e, 0x5a, 0xc4, 0xf9, 0xc7, 0xcd, 0x2c, 0x82, 0x03, 0x10, 345 | 0x0e, 0x43, 0xa3, 0xa3, 0xa3, 0xab, 0x56, 0xad, 0x8a, 0xae, 0x13, 0xe9, 0x04, 0x61, 0x93, 0xb4, 346 | 0xb4, 0xb4, 0xdb, 0x6e, 0xbb, 0xed, 0xe0, 0xc1, 0x83, 0xa9, 0xa9, 0xa9, 0x1e, 0xcd, 0xcd, 0x9c, 347 | 0x7f, 0xdc, 0xcc, 0x22, 0x38, 0x46, 0x34, 0x34, 0x34, 0x60, 0x16, 0x3d, 0x38, 0x38, 0x48, 0x5f, 348 | 0x6f, 0x20, 0x62, 0x9f, 0x94, 0x94, 0x94, 0xda, 0xda, 0xda, 0x4b, 0x97, 0x2e, 0x79, 0x3d, 0xed, 349 | 0x74, 0xf8, 0x71, 0x33, 0x8b, 0xe0, 0x48, 0x81, 0x82, 0x0e, 0x1d, 0x3a, 0x74, 0xe1, 0xc2, 0x05, 350 | 0x77, 0x1f, 0x5d, 0x24, 0x88, 0xa9, 0x08, 0xa6, 0x9a, 0x98, 0x3c, 0x1f, 0x3e, 0x7c, 0xb8, 0xac, 351 | 0xac, 0xcc, 0xbb, 0x52, 0x5c, 0xf9, 0xb8, 0x99, 0x75, 0xba, 0xbb, 0xbb, 0xc7, 0xc7, 0xc7, 0x1b, 352 | 0x1b, 0x1b, 0x5d, 0x7f, 0x7a, 0x91, 0x20, 0xa6, 0x16, 0x4d, 0x4d, 0x4d, 0xf7, 0xde, 0x7b, 0x6f, 353 | 0x6b, 0x6b, 0xab, 0x47, 0xab, 0x5f, 0x86, 0x5b, 0x1f, 0x37, 0xb3, 0x48, 0x71, 0x71, 0xf1, 0x8d, 354 | 0x37, 0xde, 0x78, 0xfc, 0xf8, 0xf1, 0xd5, 0xab, 0x57, 0xfb, 0x50, 0x1c, 0x41, 0x04, 0x03, 0x3c, 355 | 0x6a, 0x78, 0x78, 0xf8, 0xae, 0xbb, 0xee, 0x5a, 0xb9, 0x72, 0xa5, 0xa7, 0x05, 0xb9, 0xf5, 0x71, 356 | 0x33, 0x8b, 0x24, 0x26, 0x26, 0x36, 0x37, 0x37, 0xdf, 0x77, 0xdf, 0x7d, 0x38, 0x30, 0x79, 0x5d, 357 | 0x16, 0x41, 0x04, 0x46, 0x67, 0x67, 0xe7, 0x99, 0x33, 0x67, 0xf6, 0xee, 0xdd, 0xeb, 0xd6, 0x9b, 358 | 0x37, 0xcc, 0x70, 0xeb, 0xe3, 0x66, 0xd6, 0xc9, 0xcd, 0xcd, 0xbd, 0x72, 0xe5, 0xca, 0xfe, 0xfd, 359 | 0xfb, 0xed, 0x7d, 0xd0, 0x98, 0x20, 0xa6, 0x3a, 0x98, 0xd6, 0x9e, 0x3e, 0x7d, 0x1a, 0x6b, 0xc5, 360 | 0x82, 0x82, 0x02, 0xaf, 0x67, 0xb6, 0x2e, 0x7e, 0xdc, 0xcc, 0x22, 0x18, 0xf0, 0x87, 0x86, 0x86, 361 | 0xce, 0x9f, 0x3f, 0x4f, 0xd7, 0x84, 0x89, 0xd8, 0x24, 0x2e, 0x2e, 0x0e, 0xee, 0xe4, 0xcf, 0xa2, 362 | 0xd4, 0xc5, 0x8f, 0x9b, 0x59, 0x04, 0xf5, 0xca, 0xcb, 0xcb, 0xbb, 0x7c, 0xf9, 0xf2, 0xb9, 0x73, 363 | 0xe7, 0xe8, 0x7a, 0x12, 0x11, 0x05, 0xf0, 0xb5, 0xa5, 0x93, 0x45, 0x26, 0xcb, 0x2b, 0xfe, 0xbb, 364 | 0x85, 0x5b, 0x1f, 0x37, 0x8b, 0x88, 0x9b, 0x6f, 0xbe, 0xf9, 0xde, 0x7b, 0xef, 0x5d, 0xbb, 0x76, 365 | 0x2d, 0xbd, 0xfc, 0x9d, 0x98, 0xd2, 0x88, 0xde, 0x3b, 0x05, 0x6f, 0xd2, 0x76, 0xfd, 0xe3, 0x66, 366 | 0x16, 0xb9, 0xe1, 0x86, 0x1b, 0x2e, 0x5d, 0xba, 0x74, 0xe4, 0xc8, 0x11, 0x4c, 0xe0, 0xfd, 0x2c, 367 | 0x97, 0x20, 0x22, 0xa6, 0xbc, 0xbc, 0xbc, 0xbe, 0xbe, 0xde, 0xa1, 0xf7, 0x2e, 0x59, 0xb2, 0x24, 368 | 0x35, 0x35, 0xb5, 0xac, 0xac, 0xac, 0xbf, 0xbf, 0xdf, 0xc5, 0x51, 0xcb, 0xf5, 0x8f, 0x9b, 0x59, 369 | 0x24, 0x23, 0x23, 0x63, 0x78, 0x78, 0xf8, 0xe3, 0x1f, 0xff, 0xb8, 0x8b, 0x2f, 0xb8, 0x26, 0x08, 370 | 0xf7, 0xc1, 0x10, 0x77, 0xed, 0xda, 0xb5, 0x17, 0x5f, 0x7c, 0xd1, 0x89, 0x10, 0x98, 0xfb, 0x37, 371 | 0xbf, 0xf9, 0x4d, 0x78, 0xef, 0xb3, 0xcf, 0x3e, 0xfb, 0x8b, 0x5f, 0xfc, 0xc2, 0xc5, 0x2b, 0xc3, 372 | 0xae, 0x7f, 0xdc, 0xcc, 0x3a, 0xb5, 0xb5, 0xb5, 0x8f, 0x3e, 0xfa, 0xe8, 0xe0, 0xe0, 0x20, 0xdd, 373 | 0xd4, 0xc1, 0x10, 0xe7, 0x68, 0x53, 0x73, 0xbe, 0x36, 0x1d, 0xc1, 0x14, 0xf1, 0xaf, 0x7f, 0xfd, 374 | 0xeb, 0x43, 0x0f, 0x3d, 0xe4, 0x44, 0xc8, 0x1d, 0x77, 0xdc, 0xf1, 0xb9, 0xcf, 0x7d, 0x0e, 0x81, 375 | 0x77, 0xde, 0x79, 0x07, 0x3e, 0xec, 0x92, 0x6a, 0x13, 0x78, 0xf1, 0x71, 0x33, 0x8b, 0xe4, 0xe5, 376 | 0xe5, 0x9d, 0x3d, 0x7b, 0xf6, 0xf6, 0xdb, 0x6f, 0x6f, 0x6a, 0x6a, 0xf2, 0xb9, 0xe8, 0xa9, 0x09, 377 | 0x7b, 0x12, 0x56, 0xf4, 0xe1, 0x84, 0x84, 0x04, 0x72, 0xe3, 0x80, 0x69, 0x6e, 0x6e, 0x86, 0x03, 378 | 0x9f, 0x3a, 0x75, 0x8a, 0x6d, 0x56, 0x55, 0x55, 0x1d, 0x3d, 0x7a, 0xb4, 0xb8, 0xb8, 0x18, 0xe3, 379 | 0xde, 0x81, 0x03, 0x07, 0x30, 0xbb, 0x1e, 0x1f, 0x1f, 0x87, 0x7b, 0xef, 0xdc, 0xb9, 0x13, 0x7b, 380 | 0xdb, 0xda, 0xda, 0x10, 0xbe, 0x72, 0xe5, 0x8a, 0x78, 0xa3, 0x52, 0x56, 0x56, 0xd6, 0x6b, 0xaf, 381 | 0xbd, 0x56, 0x58, 0x58, 0x98, 0x9b, 0x9b, 0x0b, 0x51, 0x17, 0x2e, 0x5c, 0xd8, 0xbc, 0x79, 0xf3, 382 | 0xc3, 0x0f, 0x3f, 0x7c, 0xcf, 0x3d, 0xf7, 0xd4, 0xd4, 0xd4, 0x38, 0x54, 0xcf, 0x8b, 0x8f, 0x9b, 383 | 0x59, 0x24, 0x25, 0x25, 0xa5, 0xa1, 0xa1, 0xe1, 0xc1, 0x07, 0x1f, 0x3c, 0x76, 0xec, 0x98, 0xcf, 384 | 0x45, 0x4f, 0x4d, 0xf4, 0xa3, 0x2e, 0x36, 0x31, 0x83, 0x8b, 0xae, 0xd7, 0x18, 0xc6, 0x1a, 0x23, 385 | 0x23, 0x23, 0xf0, 0xba, 0x9e, 0x9e, 0x1e, 0x84, 0xb7, 0x6d, 0xdb, 0xf6, 0xc7, 0x3f, 0xfe, 0xf1, 386 | 0x99, 0x67, 0x9e, 0xc1, 0x94, 0x18, 0x7e, 0x88, 0xf8, 0xef, 0x7f, 0xff, 0xfb, 0x5f, 0xfc, 0xe2, 387 | 0x17, 0xdf, 0x7d, 0xf7, 0x5d, 0x84, 0x3f, 0xf6, 0xb1, 0x8f, 0x7d, 0xeb, 0x5b, 0xdf, 0x7a, 0xee, 388 | 0xb9, 0xe7, 0x10, 0x86, 0xc7, 0x2e, 0x5c, 0xb8, 0x90, 0x49, 0xf8, 0xf0, 0x87, 0x3f, 0xfc, 0xf8, 389 | 0xe3, 0x8f, 0x23, 0x30, 0x30, 0x30, 0x80, 0x5d, 0xdf, 0xf9, 0xce, 0x77, 0xbe, 0xf1, 0x8d, 0x6f, 390 | 0x7c, 0xfe, 0xf3, 0x9f, 0xff, 0xc3, 0x1f, 0xfe, 0x80, 0xe9, 0x34, 0x1c, 0xdb, 0x89, 0x7a, 0x5e, 391 | 0x7c, 0xdc, 0xcc, 0x3a, 0x73, 0xe7, 0xce, 0x45, 0xed, 0x3e, 0xf2, 0x91, 0x8f, 0x60, 0x9e, 0x42, 392 | 0x2f, 0x7f, 0x37, 0x23, 0xf6, 0xde, 0x51, 0x11, 0x4d, 0x5c, 0xbd, 0x7a, 0xf5, 0xf7, 0xbf, 0xff, 393 | 0x3d, 0x56, 0x98, 0x37, 0xdd, 0x74, 0x13, 0xdc, 0xef, 0xbe, 0xfb, 0xee, 0x63, 0x0f, 0x06, 0xc2, 394 | 0x03, 0xb1, 0x39, 0x3a, 0x3a, 0x8a, 0x30, 0x06, 0x22, 0x84, 0x7f, 0xf6, 0xb3, 0x9f, 0xb1, 0x97, 395 | 0xe6, 0x60, 0x65, 0x88, 0x4d, 0xf6, 0x0c, 0x43, 0x76, 0x76, 0xf6, 0x1b, 0x6f, 0xbc, 0xc1, 0xbc, 396 | 0xf4, 0xe4, 0xc9, 0x93, 0x88, 0x7f, 0xfa, 0xe9, 0xa7, 0xd9, 0x49, 0xac, 0xb1, 0xb1, 0x31, 0x6c, 397 | 0x0e, 0x0f, 0x0f, 0x3b, 0xd4, 0xd0, 0x8b, 0x8f, 0x9b, 0x59, 0x07, 0xd3, 0x10, 0x38, 0xf0, 0x9e, 398 | 0x3d, 0x7b, 0xd2, 0xd3, 0xd3, 0x03, 0x51, 0x80, 0x20, 0x64, 0x7c, 0xed, 0x6b, 0x5f, 0x7b, 0xf5, 399 | 0xd5, 0x57, 0xb1, 0xd2, 0xfb, 0xed, 0x6f, 0x7f, 0x7b, 0xe2, 0xc4, 0x09, 0x16, 0x09, 0x0f, 0xbc, 400 | 0x76, 0xed, 0xda, 0xcb, 0x2f, 0xbf, 0xcc, 0x8e, 0xac, 0xcc, 0x81, 0xf9, 0x4c, 0xf2, 0x93, 0x9f, 401 | 0xfc, 0xe4, 0x2f, 0x7f, 0xf9, 0x4b, 0x36, 0x02, 0x63, 0x46, 0xfd, 0xc8, 0x23, 0x8f, 0xb0, 0x78, 402 | 0x4c, 0x9b, 0xff, 0xfc, 0xe7, 0x3f, 0x63, 0xfa, 0xcd, 0x36, 0xf7, 0xee, 0xdd, 0x8b, 0x5c, 0x0e, 403 | 0xdf, 0x99, 0xee, 0xdd, 0xc7, 0xcd, 0x2c, 0x82, 0x09, 0x3c, 0x26, 0x23, 0xa8, 0xa6, 0xd7, 0x77, 404 | 0x7d, 0x13, 0x44, 0xc4, 0x60, 0x61, 0x79, 0xfd, 0xfa, 0xf5, 0xbf, 0xfc, 0xe5, 0x2f, 0xf0, 0x34, 405 | 0x4c, 0x8f, 0x79, 0x3c, 0x8c, 0x15, 0x13, 0x60, 0xcc, 0x99, 0xd9, 0xe6, 0xc5, 0x8b, 0x17, 0x91, 406 | 0xa0, 0xb4, 0xb4, 0x54, 0x51, 0xcf, 0x5a, 0x7f, 0xf7, 0xbb, 0xdf, 0xfd, 0xfa, 0xd7, 0xbf, 0x8e, 407 | 0x70, 0x7e, 0x7e, 0x3e, 0x86, 0x5f, 0x6e, 0xd9, 0x2f, 0xab, 0xf0, 0xd9, 0x14, 0x1c, 0xfb, 0x57, 408 | 0xbf, 0xfa, 0x95, 0xc3, 0xb5, 0xab, 0x77, 0x1f, 0x37, 0xb3, 0xce, 0xd0, 0xd0, 0x10, 0x96, 0x15, 409 | 0x5d, 0x5d, 0x5d, 0x34, 0x8b, 0x36, 0x83, 0xa6, 0xd0, 0xc1, 0x80, 0xd1, 0x12, 0xf3, 0xe7, 0x17, 410 | 0x5e, 0x78, 0x81, 0xcd, 0x7e, 0xc7, 0xc7, 0xc7, 0x59, 0x7c, 0x7d, 0x7d, 0x3d, 0x36, 0x11, 0xc9, 411 | 0x36, 0x9f, 0x7c, 0xf2, 0xc9, 0x5f, 0xff, 0xfa, 0xd7, 0xec, 0xe6, 0x7e, 0xac, 0x06, 0xff, 0xf4, 412 | 0xa7, 0x3f, 0xb1, 0xb3, 0xd6, 0x98, 0x4b, 0xdf, 0x7f, 0xff, 0xfd, 0x2c, 0x0d, 0x1c, 0xec, 0x37, 413 | 0xbf, 0xf9, 0x0d, 0x1f, 0x8d, 0xe1, 0x6c, 0x58, 0x0c, 0xbf, 0xf2, 0xca, 0x2b, 0x0e, 0x8d, 0xde, 414 | 0xd3, 0x8f, 0x9b, 0x59, 0x64, 0xc3, 0x86, 0x0d, 0x0f, 0x3e, 0xf8, 0xe0, 0xf9, 0xf3, 0xe7, 0xd7, 415 | 0xae, 0x5d, 0x1b, 0x88, 0x02, 0xd3, 0x81, 0x89, 0x43, 0xc0, 0xec, 0xd9, 0xb3, 0xe9, 0xa5, 0x7b, 416 | 0x11, 0xd1, 0xd1, 0xd1, 0x01, 0x47, 0xc5, 0x32, 0x0f, 0xe1, 0xa7, 0x9e, 0x7a, 0x0a, 0xe1, 0x96, 417 | 0x96, 0x16, 0x84, 0xb1, 0xf4, 0xe5, 0x61, 0xb4, 0xec, 0x4b, 0x2f, 0xbd, 0xf4, 0x83, 0x1f, 0xfc, 418 | 0x80, 0x9d, 0x6c, 0x6c, 0x6a, 0x6a, 0xc2, 0xae, 0x23, 0x47, 0x8e, 0xe4, 0xe6, 0xe6, 0xbe, 0xfe, 419 | 0xfa, 0xeb, 0xfc, 0xb3, 0x60, 0x1b, 0x37, 0x6e, 0x44, 0x3c, 0xac, 0x9c, 0x6d, 0x62, 0x82, 0x8d, 420 | 0x69, 0xb6, 0x2b, 0x97, 0x94, 0xbc, 0xfb, 0xb8, 0x99, 0x45, 0xb2, 0xb2, 0xb2, 0xb0, 0x06, 0x7e, 421 | 0xec, 0xb1, 0xc7, 0xb0, 0x28, 0x08, 0x4a, 0x87, 0xa8, 0xc0, 0xde, 0x38, 0x1c, 0x1f, 0x1f, 0x3f, 422 | 0x67, 0xce, 0x9c, 0xd4, 0xd4, 0x54, 0xf7, 0x3f, 0x24, 0x31, 0xc3, 0x1b, 0xe2, 0x7c, 0x27, 0x7e, 423 | 0x32, 0xbc, 0x82, 0x47, 0x8f, 0x1e, 0x85, 0xd7, 0xb1, 0xcf, 0xf9, 0xc2, 0x4c, 0xdf, 0x7e, 0xfb, 424 | 0xed, 0xb7, 0xde, 0x7a, 0x0b, 0xbe, 0xf7, 0xc0, 0x03, 0x0f, 0xfc, 0xee, 0x77, 0xbf, 0x5b, 0xb6, 425 | 0x6c, 0x19, 0xe2, 0xb1, 0xf8, 0xfc, 0xf9, 0xcf, 0x7f, 0xfe, 0xf4, 0xd3, 0x4f, 0xb3, 0x2c, 0xfb, 426 | 0xf7, 0xef, 0x47, 0x16, 0x0c, 0x89, 0x4f, 0x3c, 0xf1, 0xc4, 0xdd, 0x77, 0xdf, 0xcd, 0x45, 0xed, 427 | 0xde, 0xbd, 0x1b, 0xf1, 0x5b, 0xb7, 0x6e, 0x65, 0x9b, 0x25, 0x25, 0x25, 0xd8, 0xbc, 0xe7, 0x9e, 428 | 0x7b, 0xdc, 0xea, 0x8b, 0x60, 0xc1, 0x2c, 0x00, 0x07, 0xb8, 0x3b, 0xef, 0xbc, 0x33, 0x3b, 0x3b, 429 | 0xdb, 0x95, 0x1e, 0xb1, 0x67, 0xa8, 0x1e, 0x19, 0xa4, 0x88, 0xf3, 0x72, 0x6d, 0x34, 0xaf, 0xed, 430 | 0x8c, 0xd3, 0x1a, 0x34, 0x59, 0x51, 0x51, 0x51, 0x6b, 0x6b, 0x2b, 0xd6, 0x99, 0xac, 0xf9, 0xb0, 431 | 0xd9, 0xd7, 0xd7, 0x97, 0x91, 0x91, 0x81, 0xb9, 0x62, 0x43, 0x43, 0x03, 0xbb, 0x4c, 0x9f, 0x98, 432 | 0x98, 0xd8, 0xde, 0xde, 0x8e, 0x85, 0x2e, 0x6b, 0xe5, 0x9c, 0x9c, 0x9c, 0xb6, 0xb6, 0x36, 0xfc, 433 | 0xc3, 0x39, 0xc5, 0x27, 0x66, 0x31, 0xb5, 0xde, 0xb4, 0x69, 0x13, 0x3f, 0xd5, 0x84, 0x03, 0x2a, 434 | 0x36, 0xbd, 0x78, 0xd5, 0x7b, 0x20, 0x24, 0x27, 0x27, 0xc3, 0x7b, 0xb1, 0x5e, 0xa0, 0x41, 0xd8, 435 | 0x43, 0x9c, 0x1f, 0x6c, 0x22, 0x95, 0xe0, 0x05, 0x61, 0xc7, 0x4f, 0x91, 0x04, 0x6b, 0x38, 0xcc, 436 | 0x1e, 0x29, 0xfe, 0x77, 0xbd, 0xd7, 0xe0, 0x18, 0x57, 0x5f, 0x5f, 0x0f, 0x1f, 0xc6, 0xdc, 0xc4, 437 | 0x62, 0xdb, 0x06, 0x8e, 0x2b, 0x33, 0x05, 0x3e, 0x59, 0x70, 0xd1, 0x9e, 0xcd, 0x98, 0x78, 0xcd, 438 | 0x5a, 0xa1, 0x05, 0x56, 0xa9, 0x60, 0x52, 0x84, 0x51, 0x05, 0x0b, 0x39, 0xac, 0xe2, 0x96, 0x87, 439 | 0x40, 0x18, 0x63, 0x0b, 0x56, 0x5c, 0xd8, 0x5b, 0x50, 0x50, 0xc0, 0x05, 0x16, 0x19, 0xb1, 0xda, 440 | 0x88, 0x35, 0x02, 0xc5, 0x02, 0x25, 0x93, 0x29, 0x35, 0xa2, 0x2c, 0xc4, 0x5a, 0x81, 0x72, 0x0b, 441 | 0x54, 0x08, 0x54, 0xaa, 0x54, 0xa9, 0xac, 0x53, 0xa9, 0x56, 0xa9, 0x09, 0xb1, 0x5e, 0x65, 0x43, 442 | 0x88, 0x5a, 0x81, 0xba, 0xc9, 0x6c, 0xd4, 0x51, 0x1f, 0xa2, 0x41, 0xa0, 0x51, 0xa0, 0x49, 0xa0, 443 | 0xd9, 0x88, 0x96, 0xc8, 0xe1, 0x79, 0x9b, 0x74, 0x68, 0x4a, 0x6c, 0x0c, 0x07, 0x53, 0xb8, 0x5e, 444 | 0x40, 0x53, 0x41, 0x56, 0x71, 0xd6, 0x1a, 0xac, 0x7d, 0xd6, 0x87, 0xa8, 0x99, 0x4c, 0xf5, 0x64, 445 | 0x58, 0x53, 0x57, 0x85, 0xa8, 0x34, 0xa1, 0x62, 0x32, 0x62, 0x27, 0xf2, 0x1e, 0x67, 0x36, 0xc0, 446 | 0xad, 0xa2, 0xc4, 0x08, 0x6e, 0x57, 0x6b, 0x4c, 0x80, 0x29, 0xc2, 0x44, 0x35, 0x36, 0x6f, 0xe8, 447 | 0x08, 0x61, 0x77, 0xc9, 0x29, 0x50, 0x61, 0xde, 0x04, 0xf2, 0x42, 0x20, 0xcc, 0x9d, 0xc8, 0x22, 448 | 0x13, 0x37, 0x12, 0x6d, 0xb7, 0x0c, 0x12, 0x63, 0xc1, 0xb6, 0x65, 0xcb, 0x96, 0xfe, 0xfe, 0xfe, 449 | 0xde, 0xde, 0xde, 0xee, 0xee, 0xee, 0xae, 0xae, 0xae, 0xcd, 0x2a, 0x3d, 0x3d, 0x3d, 0x98, 0x49, 450 | 0x0e, 0x0c, 0x0c, 0x20, 0x01, 0x4b, 0xbc, 0x63, 0xc7, 0x8e, 0x9d, 0x2a, 0x83, 0x83, 0x83, 0x43, 451 | 0x2a, 0xbb, 0x42, 0xec, 0x16, 0xd8, 0xa3, 0x32, 0xac, 0x82, 0xb9, 0xd6, 0x3e, 0x95, 0x91, 0x91, 452 | 0x91, 0xfd, 0x2a, 0x07, 0x54, 0x46, 0x27, 0x73, 0x30, 0xc4, 0xa1, 0x43, 0x87, 0x6e, 0x54, 0x39, 453 | 0x7c, 0xf8, 0xf0, 0x4d, 0x2a, 0x63, 0x63, 0x63, 0x47, 0x04, 0x6e, 0x16, 0xb8, 0x45, 0xe5, 0xa8, 454 | 0xca, 0x31, 0x95, 0xe3, 0x21, 0x4e, 0xa8, 0x9c, 0x0c, 0x71, 0xab, 0xca, 0xa9, 0x10, 0xa7, 0x55, 455 | 0x6e, 0x53, 0x39, 0x13, 0xe2, 0xac, 0x94, 0x73, 0x3a, 0xce, 0x1b, 0x71, 0x21, 0xc4, 0x45, 0x95, 456 | 0x4b, 0x2a, 0xb7, 0x87, 0x18, 0x57, 0xb9, 0x7c, 0xf9, 0xf2, 0x07, 0x54, 0x3e, 0x18, 0x0e, 0x96, 457 | 0xec, 0xb2, 0x0a, 0xcb, 0xcb, 0xe4, 0x5c, 0x9a, 0xcc, 0xc5, 0x10, 0x17, 0xcc, 0x81, 0x6e, 0xd0, 458 | 0x59, 0xac, 0x0b, 0x8b, 0x61, 0xff, 0x1c, 0x96, 0x80, 0xb7, 0x09, 0xda, 0x87, 0xb5, 0x15, 0x6b, 459 | 0x37, 0xb4, 0xe1, 0x49, 0x01, 0xd6, 0xc8, 0xac, 0xc1, 0x8f, 0x4d, 0xe6, 0xa8, 0x00, 0xeb, 0x26, 460 | 0xd6, 0x65, 0xac, 0x13, 0xc7, 0x54, 0x6e, 0x0a, 0x71, 0x58, 0x85, 0xf5, 0xfb, 0x21, 0x15, 0x66, 461 | 0x15, 0xcc, 0x54, 0x60, 0x33, 0x23, 0x21, 0x98, 0x2d, 0xc1, 0xa8, 0x60, 0x5a, 0xcc, 0xcc, 0x60, 462 | 0x6f, 0xdc, 0x08, 0x61, 0x90, 0x30, 0xce, 0x1d, 0x2a, 0xcc, 0xb0, 0x99, 0x6d, 0xe3, 0x9f, 0x3b, 463 | 0x05, 0xdb, 0xcb, 0x93, 0x31, 0xac, 0xfb, 0x8b, 0xde, 0x7d, 0x18, 0x5b, 0x43, 0xb0, 0x4d, 0x5e, 464 | 0x90, 0xbe, 0x14, 0x51, 0xb1, 0x01, 0x01, 0xa6, 0x27, 0x12, 0x28, 0x07, 0x23, 0x84, 0x37, 0x16, 465 | 0x6f, 0x29, 0xee, 0x72, 0xcc, 0xeb, 0x98, 0xbf, 0x31, 0xef, 0xe2, 0xdc, 0x38, 0x19, 0xee, 0x6f, 466 | 0xcc, 0xe5, 0x44, 0xaf, 0x13, 0x9d, 0x4d, 0xef, 0x72, 0xa2, 0xe3, 0x9d, 0x10, 0xd0, 0xf8, 0x5e, 467 | 0x58, 0x0f, 0x14, 0xed, 0xd2, 0xd0, 0x97, 0xb8, 0x47, 0x89, 0xae, 0xe5, 0x22, 0xb7, 0x4f, 0x66, 468 | 0x3c, 0xc4, 0xe5, 0x10, 0x1f, 0x10, 0xd0, 0xfb, 0xea, 0x1d, 0x46, 0xe8, 0x9d, 0x99, 0xfb, 0x33, 469 | 0x77, 0x69, 0x0e, 0x2f, 0x5a, 0xef, 0xde, 0x7a, 0x07, 0x66, 0xed, 0x63, 0xbb, 0x1d, 0x34, 0x87, 470 | 0x0c, 0xc3, 0x63, 0x19, 0x3f, 0x34, 0xe8, 0x0f, 0x0a, 0x0c, 0xf1, 0xb8, 0xc0, 0xe1, 0x07, 0x05, 471 | 0xf1, 0x40, 0x20, 0x1e, 0xb5, 0xb9, 0xe7, 0xc3, 0xe4, 0x44, 0x6f, 0x67, 0xc3, 0x03, 0xf3, 0x6d, 472 | 0xee, 0xd5, 0x6c, 0x8c, 0x81, 0x9f, 0xb3, 0x81, 0x04, 0x09, 0xc4, 0xd1, 0xc2, 0x5d, 0x46, 0xad, 473 | 0x71, 0x20, 0xc4, 0xfe, 0x10, 0x9a, 0x21, 0x4d, 0x61, 0xc3, 0xe0, 0x2e, 0x73, 0xcc, 0x12, 0xb0, 474 | 0xc8, 0xa1, 0x10, 0x6c, 0x98, 0xe5, 0x83, 0xad, 0x66, 0xc8, 0xd5, 0x8c, 0xba, 0x9a, 0xe1, 0x57, 475 | 0x1f, 0x30, 0x64, 0x38, 0x04, 0x6b, 0x77, 0xf6, 0xcf, 0x02, 0x1c, 0x76, 0xc4, 0xd5, 0xc4, 0x70, 476 | 0xf8, 0x51, 0x86, 0x07, 0xcc, 0xe0, 0xcd, 0x64, 0x38, 0x05, 0xb0, 0xd2, 0xaf, 0xb0, 0x15, 0x7d, 477 | 0x80, 0x1d, 0xcb, 0xc4, 0x7f, 0x7e, 0x44, 0x93, 0x70, 0x93, 0xc0, 0x98, 0x00, 0xdb, 0xbc, 0xc9, 478 | 0x04, 0x96, 0x91, 0xff, 0x9b, 0x21, 0x0e, 0x65, 0xcc, 0xb0, 0x44, 0x73, 0x91, 0x4f, 0x85, 0x0c, 479 | 0x1b, 0x84, 0x85, 0xc3, 0x5a, 0xa4, 0xde, 0x34, 0xc5, 0xc1, 0x53, 0x03, 0xeb, 0x3b, 0xb1, 0x2b, 480 | 0x79, 0xff, 0x32, 0x1b, 0x10, 0xed, 0x47, 0xb4, 0x58, 0xd1, 0x3e, 0x01, 0x1b, 0x4b, 0xd9, 0x3f, 481 | 0x1f, 0x18, 0xb7, 0x4e, 0x06, 0x31, 0xe2, 0xcc, 0x51, 0x63, 0xbd, 0xdc, 0xf2, 0x25, 0xce, 0x22, 482 | 0x2a, 0x20, 0x71, 0x1f, 0x7b, 0x7e, 0xa7, 0x41, 0xd9, 0xe4, 0x06, 0x1d, 0x26, 0xb8, 0x22, 0x5c, 483 | 0x4f, 0x67, 0x67, 0x27, 0xff, 0x37, 0xdc, 0xc5, 0x02, 0x3c, 0x99, 0x06, 0x4c, 0xfb, 0x35, 0x01, 484 | 0x33, 0x0c, 0x13, 0xb0, 0xc8, 0x2e, 0x01, 0xbe, 0xc9, 0x13, 0xd8, 0x83, 0x2d, 0x46, 0x58, 0x80, 485 | 0xc7, 0x88, 0xf1, 0x3c, 0x2c, 0x47, 0x14, 0xa8, 0xc9, 0xa2, 0x29, 0x4b, 0x8c, 0xe1, 0x15, 0x91, 486 | 0x37, 0x48, 0x58, 0xc4, 0x26, 0x92, 0xe7, 0x0a, 0xdb, 0xd4, 0x12, 0xcc, 0xec, 0xd0, 0xcc, 0x1a, 487 | 0xdb, 0xdb, 0xdb, 0xd9, 0xbf, 0x18, 0x30, 0x43, 0x6e, 0xc0, 0x66, 0xa5, 0x5b, 0x4f, 0x60, 0x05, 488 | 0xb9, 0x10, 0xbe, 0x57, 0x09, 0x7b, 0x0e, 0x43, 0x8e, 0x95, 0xb3, 0x20, 0x53, 0x81, 0x68, 0xd1, 489 | 0x33, 0x2c, 0xf6, 0x2a, 0x12, 0x33, 0xd5, 0x9f, 0x3e, 0xc8, 0xbb, 0x8c, 0xef, 0x55, 0x1a, 0x08, 490 | 0x82, 0x88, 0x5a, 0x14, 0xfd, 0x65, 0x0f, 0x82, 0x20, 0xa2, 0x05, 0xa5, 0xd6, 0x3d, 0xd8, 0x55, 491 | 0x50, 0x17, 0x05, 0x86, 0x2d, 0x2e, 0x58, 0x05, 0x3c, 0x85, 0xd5, 0x8e, 0x5d, 0xd1, 0x0d, 0x5a, 492 | 0x97, 0xda, 0x98, 0x69, 0xd5, 0x88, 0xd0, 0x18, 0xd8, 0x46, 0xf5, 0x8a, 0xb7, 0x3c, 0x0d, 0x8f, 493 | 0x34, 0x8b, 0x77, 0xbd, 0x25, 0x95, 0xf5, 0xae, 0x22, 0x5e, 0xc4, 0xf7, 0x1f, 0xcd, 0x5d, 0x04, 494 | 0x51, 0x0a, 0xaf, 0x02, 0xfa, 0x1b, 0x8b, 0x1c, 0xb6, 0x29, 0x56, 0xcd, 0x62, 0x1d, 0xdd, 0x6d, 495 | 0x8a, 0x18, 0x68, 0xd8, 0x48, 0xd1, 0x9b, 0x13, 0x8f, 0x11, 0xe3, 0xf5, 0x2d, 0x23, 0xb1, 0xc3, 496 | 0xb0, 0xcd, 0x18, 0x69, 0x3b, 0x2b, 0xd5, 0xc4, 0x54, 0x05, 0xc7, 0x57, 0xf4, 0x10, 0x0b, 0x8b, 497 | 0x77, 0x32, 0xe9, 0x6f, 0x69, 0x32, 0xc3, 0x7a, 0x4a, 0x3f, 0x45, 0x45, 0x11, 0xfa, 0x1b, 0xc8, 498 | 0xf4, 0xed, 0x60, 0x78, 0x93, 0x99, 0x6f, 0x28, 0x55, 0x84, 0x0e, 0xf1, 0xfe, 0xbe, 0x00, 0x75, 499 | 0x98, 0x0a, 0x6a, 0x10, 0x53, 0x1c, 0xc5, 0xec, 0x06, 0x54, 0x8b, 0xf0, 0x1b, 0x89, 0x3d, 0xcd, 500 | 0x42, 0x48, 0x70, 0xa5, 0x3d, 0x9d, 0x08, 0x11, 0xf3, 0x46, 0x2a, 0xc7, 0x0b, 0xe5, 0xa3, 0xc2, 501 | 0xc0, 0xdc, 0x52, 0x52, 0xb1, 0x72, 0xdf, 0xbf, 0xe1, 0x63, 0x00, 0xfc, 0x6e, 0x72, 0x1b, 0x12, 502 | 0xa6, 0x15, 0x5e, 0x37, 0x91, 0x2b, 0xf2, 0x9d, 0x08, 0x11, 0xf3, 0x46, 0x2a, 0xc7, 0x5e, 0xb9, 503 | 0xf2, 0x5c, 0xd3, 0xca, 0x26, 0x95, 0xb2, 0xc8, 0x11, 0x9f, 0xff, 0x20, 0x08, 0x46, 0x6c, 0x9b, 504 | 0x84, 0x0f, 0xb5, 0xb3, 0xe7, 0x56, 0x8a, 0xe1, 0x83, 0x57, 0x72, 0xcc, 0x1e, 0xd7, 0x22, 0x9c, 505 | 0xc0, 0x5b, 0x35, 0x4a, 0x9b, 0x37, 0x4a, 0xd5, 0xb6, 0x8e, 0xbe, 0x82, 0xee, 0x56, 0xd9, 0x9e, 506 | 0x34, 0xc5, 0xec, 0xd9, 0x48, 0x33, 0x24, 0x8f, 0x53, 0x12, 0xce, 0x91, 0x3f, 0xb0, 0xea, 0x62, 507 | 0x29, 0x5e, 0x17, 0x11, 0x7b, 0xe8, 0xbb, 0x66, 0x2a, 0x34, 0xa3, 0xc2, 0x1e, 0xb2, 0x17, 0x9f, 508 | 0xb6, 0x37, 0x7c, 0x10, 0x5f, 0xff, 0x38, 0xbe, 0x18, 0x29, 0xcf, 0xa2, 0x09, 0xeb, 0xd3, 0x87, 509 | 0x95, 0x26, 0x2f, 0xc2, 0x0a, 0x9a, 0x22, 0xf4, 0xb5, 0xd0, 0xec, 0x0d, 0x5b, 0xba, 0xbc, 0x16, 510 | 0xf2, 0x8c, 0x92, 0x76, 0x40, 0x97, 0x98, 0xed, 0x15, 0x65, 0x8a, 0x5d, 0xa6, 0x89, 0xd7, 0x54, 511 | 0x4d, 0x1f, 0xd0, 0xa8, 0x61, 0xb8, 0xab, 0xc8, 0xdc, 0x18, 0x34, 0xd6, 0x22, 0xe9, 0x1a, 0xbd, 512 | 0x6e, 0x61, 0x6b, 0x64, 0xdd, 0x96, 0xac, 0xc4, 0x87, 0x15, 0xa8, 0x49, 0xa9, 0x37, 0x12, 0x4d, 513 | 0x02, 0xe6, 0x33, 0xfa, 0x37, 0x52, 0x44, 0x54, 0x90, 0x44, 0x31, 0x33, 0x81, 0x92, 0xb0, 0xa2, 514 | 0x79, 0xc3, 0x80, 0xe4, 0xd9, 0x7f, 0xfe, 0xda, 0x01, 0xfd, 0xfb, 0x0a, 0x2c, 0xbe, 0x3d, 0x80, 515 | 0x67, 0x0f, 0x9b, 0xc6, 0xb0, 0x5c, 0x27, 0x88, 0x12, 0xc4, 0x8a, 0x18, 0xa6, 0xd4, 0xbf, 0x78, 516 | 0x41, 0x9f, 0xd8, 0x8a, 0x9e, 0x72, 0xf9, 0xfa, 0xbd, 0x45, 0xea, 0xeb, 0x20, 0x24, 0x79, 0xf5, 517 | 0xca, 0x48, 0xde, 0x11, 0xa1, 0x49, 0x60, 0x98, 0xd2, 0x6c, 0x97, 0x61, 0xd1, 0x1a, 0x05, 0xc2, 518 | 0xbe, 0x89, 0x42, 0x23, 0xdf, 0x4a, 0x8d, 0x0c, 0x5b, 0x35, 0xac, 0x62, 0x91, 0x9a, 0x87, 0x95, 519 | 0x7e, 0xd7, 0xd7, 0x8e, 0x6d, 0x32, 0xff, 0x11, 0x15, 0x66, 0x9b, 0x91, 0x62, 0xa6, 0x83, 0x59, 520 | 0xd1, 0x66, 0x61, 0xa5, 0x40, 0x80, 0xbd, 0xce, 0x23, 0x2c, 0x62, 0xb2, 0x55, 0xea, 0x7b, 0x76, 521 | 0xac, 0xe4, 0x92, 0x94, 0x22, 0xc6, 0x44, 0x2a, 0xcd, 0x49, 0xa1, 0x66, 0x65, 0xb9, 0xa5, 0x83, 522 | 0xa1, 0x1c, 0x5e, 0xae, 0xbc, 0x14, 0x1b, 0x7d, 0xc1, 0x85, 0x8b, 0x55, 0xd3, 0x07, 0xf4, 0x9b, 523 | 0x66, 0xbb, 0xc2, 0x6a, 0x28, 0x69, 0xc3, 0xb0, 0xaa, 0x6a, 0xe2, 0x9d, 0xb4, 0x89, 0x24, 0x97, 524 | 0x6d, 0xf5, 0xcc, 0xac, 0x94, 0xb9, 0x8d, 0x98, 0x60, 0x95, 0xfa, 0x8a, 0x1c, 0xe7, 0x5e, 0x10, 525 | 0x69, 0x02, 0x86, 0xc2, 0xbb, 0x81, 0xbd, 0x9e, 0x47, 0x1f, 0x96, 0x50, 0x10, 0xea, 0x45, 0x2b, 526 | 0x89, 0x25, 0x18, 0x66, 0x77, 0x28, 0x33, 0xa2, 0x42, 0xcd, 0xca, 0x72, 0xb1, 0x5e, 0xf2, 0xb6, 527 | 0x15, 0xf7, 0xda, 0x2e, 0x42, 0x1e, 0x69, 0xa3, 0x14, 0x89, 0x9e, 0xae, 0xc8, 0xb7, 0x52, 0xa2, 528 | 0x3c, 0x8d, 0x99, 0xa1, 0xea, 0x35, 0x31, 0xd3, 0xcd, 0x86, 0xaa, 0x30, 0x7b, 0xf8, 0xb0, 0x5c, 529 | 0x31, 0xdf, 0x50, 0xf2, 0x6c, 0xb1, 0x32, 0x84, 0xbd, 0xec, 0x4e, 0x08, 0xa4, 0x50, 0x82, 0x10, 530 | 0xc9, 0x57, 0xdd, 0xd8, 0xd3, 0x22, 0x2c, 0xfa, 0x97, 0x92, 0x63, 0x0b, 0xe4, 0xcc, 0xcd, 0xcd, 531 | 0xb5, 0x97, 0x97, 0x20, 0xa2, 0x1d, 0x18, 0x3f, 0x7b, 0x3d, 0xab, 0x8b, 0x02, 0xf5, 0xd2, 0xac, 532 | 0xc8, 0x57, 0xf8, 0x0b, 0x62, 0x57, 0x08, 0x18, 0x6e, 0x8a, 0xef, 0x91, 0x35, 0xdb, 0x25, 0x6e, 533 | 0x5a, 0x14, 0xa5, 0x4f, 0xa0, 0xc9, 0x2b, 0x57, 0x4f, 0xb3, 0x4b, 0x8c, 0xd1, 0x14, 0xa1, 0x8f, 534 | 0x37, 0x93, 0xa0, 0x17, 0x68, 0xa8, 0xaa, 0x0d, 0x51, 0x72, 0xf9, 0x9a, 0x18, 0x43, 0x85, 0x97, 535 | 0xeb, 0x30, 0x93, 0xb9, 0x42, 0xd7, 0x50, 0x66, 0xb9, 0x24, 0xad, 0x64, 0xd6, 0x05, 0x86, 0x8a, 536 | 0x49, 0x2a, 0x68, 0x98, 0x46, 0xde, 0x7a, 0x16, 0xcd, 0xc0, 0x50, 0x82, 0xbc, 0x46, 0x86, 0x16, 537 | 0x62, 0x58, 0x47, 0xc3, 0x7e, 0xe7, 0x9b, 0xf0, 0x1f, 0x49, 0xdd, 0xe5, 0x79, 0xe5, 0x31, 0x66, 538 | 0x95, 0xd2, 0xcb, 0x9c, 0xf8, 0x56, 0x6d, 0x44, 0x20, 0xb3, 0xbd, 0xc4, 0x11, 0x65, 0x24, 0x38, 539 | 0x51, 0xd4, 0x6e, 0x6e, 0xa9, 0x1a, 0x45, 0x55, 0xd6, 0xe0, 0x50, 0x73, 0x1b, 0xd9, 0x95, 0x65, 540 | 0x21, 0x96, 0x2e, 0x5d, 0xaa, 0x09, 0xf3, 0x18, 0xcd, 0xa6, 0x3e, 0x7d, 0x44, 0x91, 0x4b, 0x55, 541 | 0xe4, 0xe9, 0x39, 0x7a, 0x39, 0x61, 0x8b, 0xd0, 0xc8, 0xe7, 0xb9, 0xc4, 0xb0, 0xa4, 0xa6, 0x86, 542 | 0xf2, 0x0d, 0x4b, 0x91, 0xd4, 0x71, 0x99, 0xae, 0xf5, 0x0c, 0xb3, 0x84, 0x4d, 0x63, 0x45, 0xb8, 543 | 0x44, 0xfe, 0x32, 0xa3, 0x0a, 0xca, 0xc5, 0xca, 0x13, 0x98, 0x95, 0x62, 0x88, 0xbc, 0x31, 0xf5, 544 | 0x4a, 0x6a, 0x04, 0x9a, 0x75, 0xb7, 0xa6, 0xee, 0xfa, 0xee, 0x36, 0xac, 0xb8, 0x44, 0x55, 0x89, 545 | 0x40, 0x7d, 0x46, 0xbd, 0x7c, 0x49, 0xdf, 0xc9, 0x95, 0x91, 0xd4, 0xda, 0xb0, 0x05, 0x0c, 0xd3, 546 | 0x2b, 0x4b, 0x1c, 0x03, 0x59, 0xce, 0x85, 0xc4, 0x30, 0x59, 0x59, 0x59, 0x53, 0xb3, 0xdc, 0xa0, 547 | 0x14, 0x8b, 0x3a, 0x7c, 0x68, 0x28, 0xdb, 0x45, 0x4c, 0x7c, 0x5f, 0xcf, 0x22, 0x99, 0x99, 0x99, 548 | 0x92, 0x4d, 0x77, 0x71, 0x5d, 0xb8, 0x99, 0x40, 0x7d, 0xbc, 0x6f, 0x45, 0x5b, 0x2f, 0x3d, 0x22, 549 | 0x09, 0x9a, 0x5d, 0xe2, 0xbf, 0x26, 0x7d, 0xd8, 0xb2, 0xac, 0x34, 0x85, 0x5c, 0x01, 0x8b, 0x8d, 550 | 0x19, 0x69, 0xad, 0x45, 0xf9, 0xfa, 0x52, 0x0c, 0x2b, 0x1e, 0x91, 0x1a, 0xf6, 0x4c, 0x5d, 0xd2, 551 | 0x9b, 0x56, 0xea, 0x62, 0x63, 0x17, 0x50, 0x16, 0xeb, 0x40, 0x06, 0xc3, 0xb0, 0x26, 0x26, 0x73, 552 | 0x32, 0x92, 0x2c, 0x9a, 0x5c, 0x56, 0x92, 0x99, 0xc5, 0x18, 0xca, 0x91, 0xcb, 0x94, 0xc4, 0x8b, 553 | 0x7b, 0x35, 0xb5, 0x08, 0x9b, 0xde, 0x62, 0x16, 0x43, 0xfd, 0x35, 0xcd, 0xa5, 0x51, 0x40, 0x53, 554 | 0x1d, 0xc3, 0xc4, 0xfa, 0x52, 0xf4, 0x89, 0xf5, 0x9b, 0x62, 0x62, 0x1b, 0x3d, 0xa2, 0x17, 0xae, 555 | 0x57, 0xd5, 0xd0, 0x1e, 0x44, 0xdd, 0x24, 0x55, 0xb0, 0x58, 0x6e, 0xd8, 0xf4, 0x9a, 0x48, 0x89, 556 | 0x09, 0x39, 0xe9, 0xca, 0x48, 0xd1, 0x34, 0x82, 0x3c, 0xa5, 0xbe, 0xd1, 0xcc, 0x74, 0x98, 0xf8, 557 | 0x48, 0xbc, 0x3d, 0x58, 0x7e, 0xdb, 0xd9, 0x09, 0x82, 0x70, 0x8e, 0x92, 0x6e, 0x81, 0x8c, 0x8c, 558 | 0x0c, 0xfe, 0xcf, 0x63, 0x38, 0x62, 0x1a, 0x8b, 0x88, 0xb9, 0xb8, 0x70, 0x51, 0x9a, 0x6d, 0x9c, 559 | 0x4b, 0x90, 0x48, 0xd6, 0xb4, 0x80, 0x6d, 0x39, 0x1e, 0x65, 0x89, 0x54, 0xb2, 0xeb, 0x6d, 0xe5, 560 | 0xae, 0x40, 0x7b, 0x16, 0xe5, 0xa2, 0x26, 0x72, 0x21, 0xd6, 0x8b, 0x30, 0x4c, 0xe9, 0x50, 0x43, 561 | 0x9e, 0x5d, 0x49, 0xb3, 0x05, 0x72, 0xf2, 0x7f, 0x1e, 0x23, 0x6e, 0x46, 0x2a, 0xcd, 0x76, 0xde, 562 | 0x18, 0x20, 0x6c, 0xf5, 0xa7, 0x73, 0xe3, 0x44, 0x29, 0xbe, 0x99, 0xb4, 0xb2, 0xd0, 0x3d, 0x20, 563 | 0xce, 0x45, 0x69, 0x04, 0x41, 0x84, 0x45, 0x49, 0xb5, 0xcb, 0x82, 0x05, 0x0b, 0x6c, 0xe7, 0x8d, 564 | 0x01, 0x5c, 0xa9, 0xfe, 0x34, 0x6f, 0x43, 0x1b, 0xf8, 0xd3, 0x62, 0x0e, 0x4b, 0x61, 0xae, 0xe5, 565 | 0x4f, 0xd1, 0xca, 0x82, 0xc9, 0xcc, 0x9f, 0x3f, 0x5f, 0x0c, 0xe8, 0xff, 0x23, 0x42, 0x93, 0x45, 566 | 0x2f, 0x41, 0x23, 0x79, 0x7e, 0x08, 0xb9, 0x10, 0x8b, 0x9a, 0x98, 0x25, 0x0b, 0x9b, 0x3d, 0x52, 567 | 0x05, 0x2c, 0xb6, 0x8f, 0xf3, 0x06, 0xd4, 0xef, 0x35, 0x6b, 0x52, 0xdb, 0xe5, 0x5a, 0x49, 0x6c, 568 | 0x98, 0x26, 0xd2, 0xda, 0xd9, 0x68, 0x0d, 0x7d, 0x46, 0x49, 0x17, 0xeb, 0x93, 0xc9, 0xbb, 0xc9, 569 | 0x37, 0xfd, 0xcd, 0x84, 0x18, 0xba, 0x5e, 0x58, 0x94, 0x79, 0x5e, 0x02, 0x25, 0x3c, 0x95, 0x2f, 570 | 0x2f, 0xce, 0xe7, 0xd2, 0x09, 0xc2, 0x7f, 0x94, 0x94, 0x98, 0x80, 0x55, 0x26, 0x68, 0x2d, 0x08, 571 | 0xc2, 0x6f, 0x94, 0xb9, 0x51, 0x0e, 0xab, 0x86, 0x26, 0x86, 0xff, 0x4f, 0x2b, 0x78, 0xa7, 0x06, 572 | 0xad, 0x08, 0xe1, 0x1f, 0xca, 0x9c, 0x68, 0x06, 0x15, 0x30, 0x0c, 0xdb, 0x13, 0xe5, 0x50, 0x42, 573 | 0xe0, 0xf0, 0x4e, 0x0d, 0x5a, 0x11, 0xa7, 0xc4, 0x40, 0x15, 0x7c, 0x43, 0x49, 0xf6, 0x0b, 0x14, 574 | 0x36, 0x95, 0xe5, 0xb3, 0xe6, 0x70, 0x4b, 0x99, 0xa0, 0x88, 0x99, 0x5a, 0x04, 0xad, 0x42, 0xd4, 575 | 0xa0, 0x24, 0xc5, 0x2e, 0xa8, 0x5e, 0x44, 0x89, 0x23, 0x4a, 0x3f, 0x05, 0xe1, 0x9d, 0x1a, 0xb4, 576 | 0x22, 0x8e, 0x88, 0x81, 0x2a, 0xf8, 0x89, 0x92, 0xe8, 0x17, 0xac, 0x3c, 0xdf, 0x8a, 0xf3, 0x02, 577 | 0x1f, 0xaa, 0x10, 0x03, 0x45, 0x70, 0xdb, 0xf2, 0xae, 0x08, 0x82, 0xa3, 0xcc, 0xf6, 0x11, 0x94, 578 | 0xe7, 0x67, 0x71, 0xae, 0xc3, 0x9a, 0x8c, 0x8a, 0xb0, 0x22, 0x3f, 0xda, 0xfb, 0x3a, 0x5a, 0x50, 579 | 0x66, 0xa9, 0x20, 0xc4, 0xfe, 0x59, 0x80, 0x47, 0x6a, 0xd0, 0xc4, 0x9b, 0xa5, 0xd1, 0x07, 0xcc, 580 | 0xc2, 0x66, 0x42, 0xc4, 0x94, 0xfa, 0x64, 0xfa, 0x22, 0xcc, 0x94, 0x34, 0x13, 0x3e, 0xdb, 0xa8, 581 | 0x9a, 0x7a, 0xc5, 0x0c, 0xdb, 0xc4, 0x50, 0x1f, 0x7d, 0x41, 0x61, 0x8b, 0xd6, 0x88, 0x92, 0xe8, 582 | 0x6c, 0xa8, 0xa7, 0x61, 0x3b, 0x4b, 0x4a, 0xe7, 0x31, 0x1a, 0xef, 0x32, 0x2b, 0x57, 0xde, 0x08, 583 | 0x72, 0x85, 0xf5, 0x19, 0x2d, 0x96, 0x65, 0x56, 0xb4, 0x59, 0x4a, 0x33, 0xcc, 0x6c, 0x38, 0xac, 584 | 0x91, 0x9b, 0xf5, 0x88, 0x26, 0x5e, 0x8c, 0x31, 0x0b, 0xcc, 0xd6, 0xf5, 0x88, 0x24, 0xbb, 0x59, 585 | 0xa5, 0xe4, 0x7b, 0x81, 0x32, 0x53, 0x05, 0xbb, 0x67, 0x9a, 0xc3, 0x8a, 0x91, 0x24, 0x88, 0x25, 586 | 0xa6, 0x72, 0x4d, 0x45, 0xdd, 0x6c, 0xeb, 0x69, 0xd6, 0x9b, 0x6e, 0x55, 0x9c, 0x1b, 0xa8, 0x2b, 587 | 0xd2, 0x7c, 0xc0, 0x45, 0x55, 0xed, 0x89, 0x92, 0xe4, 0x0a, 0x2b, 0x50, 0xb1, 0x51, 0x1e, 0x41, 588 | 0xcc, 0xb4, 0x75, 0x58, 0x8f, 0x2e, 0xc7, 0x8e, 0x0a, 0x94, 0x04, 0x82, 0xb0, 0x05, 0x33, 0x20, 589 | 0xaf, 0xb3, 0x10, 0x72, 0x94, 0x78, 0x22, 0x4a, 0x40, 0x6f, 0x05, 0xad, 0xc2, 0x24, 0x98, 0x01, 590 | 0x79, 0x9d, 0x85, 0x90, 0xa3, 0x75, 0xe0, 0xb8, 0xb8, 0x38, 0x31, 0x2c, 0x6e, 0x5a, 0xc7, 0x7a, 591 | 0x2e, 0x2b, 0x29, 0xf5, 0x69, 0xcc, 0x72, 0x99, 0x29, 0xcc, 0x23, 0x23, 0xaa, 0x4e, 0xd8, 0xc4, 592 | 0xf6, 0x1a, 0xc7, 0x7a, 0xb9, 0x11, 0xc9, 0x17, 0x1d, 0xc3, 0xba, 0x9f, 0xb0, 0x64, 0x3c, 0x31, 593 | 0x0f, 0xb0, 0xa2, 0x35, 0x42, 0x24, 0xfa, 0xf0, 0x5d, 0x62, 0x96, 0x48, 0x3b, 0x57, 0x53, 0x71, 594 | 0x77, 0xad, 0x28, 0x52, 0x39, 0x91, 0x9a, 0x4a, 0xa4, 0x3a, 0x58, 0x4c, 0x1f, 0x56, 0xb2, 0x12, 595 | 0x47, 0x44, 0x3f, 0x86, 0x9d, 0x2d, 0x4f, 0x2f, 0x4f, 0x1c, 0x3f, 0xd9, 0x9d, 0x0c, 0x0b, 0x0a, 596 | 0x2b, 0x59, 0x13, 0xb0, 0x48, 0xa4, 0xe9, 0xa7, 0x39, 0xca, 0x0c, 0x22, 0x1a, 0x60, 0xbd, 0xc5, 597 | 0xfd, 0x4d, 0xb3, 0x10, 0x12, 0xd7, 0x96, 0x92, 0x13, 0x1e, 0xe2, 0xf9, 0xe1, 0x59, 0x26, 0x48, 598 | 0x76, 0x69, 0x92, 0x99, 0x61, 0xb8, 0x54, 0x8b, 0x74, 0x38, 0x0a, 0x6b, 0xb8, 0x41, 0x77, 0xc8, 599 | 0x54, 0xe1, 0x3d, 0x07, 0x56, 0x54, 0x78, 0x40, 0x13, 0x36, 0xe3, 0x7d, 0x29, 0xca, 0x24, 0x39, 600 | 0x9a, 0x4d, 0x9e, 0xc0, 0x50, 0xb2, 0x28, 0x44, 0x5e, 0xae, 0x58, 0x96, 0xe1, 0x5e, 0x89, 0x04, 601 | 0x33, 0x25, 0xcd, 0xea, 0x22, 0x29, 0xce, 0x30, 0x99, 0x59, 0x3b, 0x58, 0xac, 0x82, 0x59, 0xd3, 602 | 0x89, 0x31, 0x71, 0xa1, 0x69, 0xad, 0xe8, 0xa5, 0xe2, 0x85, 0xc4, 0xd9, 0xa1, 0x6b, 0xbc, 0xe2, 603 | 0xad, 0x76, 0xfc, 0xfe, 0x4a, 0x7e, 0xfb, 0x3b, 0x7b, 0xe0, 0x81, 0x3f, 0xb3, 0x25, 0xa2, 0x7f, 604 | 0xd8, 0x45, 0x7f, 0x5b, 0xb2, 0x78, 0x97, 0x95, 0xe6, 0x9a, 0x2a, 0x77, 0x6c, 0x89, 0xeb, 0xc6, 605 | 0x19, 0x8d, 0xb1, 0xbc, 0x01, 0x6d, 0x38, 0xa7, 0x59, 0xa7, 0x48, 0x2c, 0x44, 0xd2, 0x11, 0x86, 606 | 0x89, 0xe5, 0x48, 0x8c, 0x41, 0xd1, 0x99, 0xb7, 0x61, 0x8c, 0x99, 0x34, 0x43, 0x4d, 0xac, 0x2b, 607 | 0x46, 0x4c, 0x39, 0x34, 0x87, 0x09, 0x66, 0xf1, 0xa2, 0xe9, 0x8b, 0x68, 0x3c, 0x27, 0xd2, 0xe1, 608 | 0x5a, 0xef, 0x87, 0x86, 0xde, 0x18, 0xd6, 0xe5, 0x82, 0x6e, 0x33, 0x82, 0x88, 0x21, 0x44, 0xbf, 609 | 0xd2, 0x8f, 0x12, 0x86, 0xc3, 0x45, 0x30, 0x8a, 0x12, 0xd6, 0xf8, 0x5f, 0x28, 0xcf, 0x50, 0xec, 610 | 0x1e, 0xe2, 0x98, 0x71, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 611 | }; -------------------------------------------------------------------------------- /src/main/main.ino: -------------------------------------------------------------------------------- 1 | #include // Flicker-free printing to TFT 2 | #include // Communication with VESC controller 3 | #include // Hardware-specific library for TFT display 4 | #include 5 | #include "EEPROMAnything.h" // Easy access to EEPROM storage 6 | 7 | // Global variables for tracking speed, distance, and motor data 8 | float trip; 9 | float startup_total_km; 10 | float last_total_km_stored; 11 | float total_km; 12 | float tacho; 13 | float rpm; 14 | float speed; 15 | float watts; 16 | float wheel_diameter; 17 | int maxspeed; 18 | int brightness = 255; 19 | char fmt[10]; 20 | 21 | 22 | // Font settings for various display elements 23 | #define SPEEDFONT &JerseyM54_82pt7b // Large font for displaying speed 24 | #define DATAFONTSMALL2 &JerseyM54_14pt7b // Small font for other data values 25 | #define DATAFONTSMALL &JerseyM54_18pt7b // Alternative small font 26 | #define DATAFONTSMALLTEXT &Blockletter8pt7b // Font for smaller text labels 27 | 28 | // Motor and wheel parameters for speed calculation 29 | #define MOTOR_POLES 30 // Number of motor poles (30 for typical E-scooters) 30 | #define WHEEL_DIAMETER_MM 246 // Diameter of the wheel in millimeters 31 | #define GEAR_RAITO 1.0 // Motor pulley teeth count (1:1 gearing) 32 | #define PI 3.141592 // Pi constant 33 | #define SCONST 0.12 // Conversion factor from RPM to speed (km/h) 34 | 35 | // Pin configs for the hardware 36 | 37 | #define RXD2 22 // DISPLAY RX 22 TO VESC TX 38 | #define TXD2 27 // DISPLAY TX 27 TO VESC RX 39 | 40 | #define LDR_PIN 34 // Light Detecting Resistor that sits on top right of the display 41 | #define LCD_BACK_LIGHT_PIN 21 42 | 43 | // User-configurable settings for warnings and thresholds 44 | int EEPROM_MAGIC_VALUE = 0; // EEPROM magic value to track saved data 45 | #define EEPROM_UPDATE_EACH_KM 0.1 // Frequency of EEPROM updates (every 0.1 km) 46 | 47 | int COLOR_WARNING_SPEED = TFT_RED; // Color for speed warning display 48 | #define HIGH_SPEED_WARNING 60 // Speed threshold for warnings (60 km/h) 49 | 50 | int COLOR_WARNING_TEMP_VESC = TFT_WHITE; // Color for VESC temperature warnings 51 | #define VESC_TEMP_WARNING1 50 // First temperature warning threshold (50°C) 52 | #define VESC_TEMP_WARNING2 80 // Second temperature warning threshold (80°C) 53 | 54 | int COLOR_WARNING_TEMP_MOTOR = TFT_WHITE; // Color for motor temperature warnings 55 | #define MOTOR_TEMP_WARNING1 80 // First motor temperature warning threshold (80°C) 56 | #define MOTOR_TEMP_WARNING2 120 // Second motor temperature warning threshold (120°C) 57 | 58 | int BATTERY_WARNING_COLOR = TFT_WHITE; // Color for battery voltage warnings 59 | #define BATTERY_WARNING_HIGH 67.2 // High voltage warning threshold (67.2V) 60 | #define BATTERY_WARNING_LOW 54.4 // Low voltage warning threshold (54.4V) 61 | #define BATTERY_WARNING_0 48.0 // Voltage Cut warning treshold(48V) 62 | 63 | int ERROR_WARNING_COLOR = TFT_WHITE; // Color for error warnings 64 | 65 | #define DO_LOGO_DRAW // Uncomment if you want enable startup logo and background logo [Currently disbaled version doesn't work so don't disable!] 66 | #define DEBUG_MODE 67 | 68 | #ifdef DO_LOGO_DRAW 69 | #include // PNG decoder library 70 | #include "startup_image.h"// PNG data for startup logo 71 | #include "background_image.h" // PNG data for background image 72 | PNG png; // PNG decoder instance 73 | int16_t xpos = 0; // X position for image drawing 74 | int16_t ypos = 0; // Y position for image drawing 75 | #define MAX_IMAGE_WDITH 320 // Maximum image width for display 76 | #endif 77 | 78 | // Other settings 79 | int Screen_refresh_delay = 50; // Delay between screen refreshes (ms) 80 | ComEVesc UART; // VESC UART instance 81 | HardwareSerial VescSerial(1); 82 | 83 | 84 | TFT_eSPI tft = TFT_eSPI(); 85 | FlickerFreePrint Data1(&tft, TFT_WHITE, TFT_BLACK); 86 | FlickerFreePrint Data2(&tft, TFT_WHITE, TFT_BLACK); 87 | FlickerFreePrint Data3(&tft, TFT_WHITE, TFT_BLACK); 88 | FlickerFreePrint Data4(&tft, TFT_WHITE, TFT_BLACK); 89 | FlickerFreePrint Data5(&tft, TFT_WHITE, TFT_BLACK); 90 | FlickerFreePrint Data6(&tft, TFT_WHITE, TFT_BLACK); 91 | FlickerFreePrint Data7(&tft, TFT_WHITE, TFT_BLACK); 92 | FlickerFreePrint Data8(&tft, TFT_WHITE, TFT_BLACK); 93 | FlickerFreePrint Data9(&tft, TFT_WHITE, TFT_BLACK); 94 | FlickerFreePrint Data10(&tft, TFT_WHITE, TFT_BLACK); 95 | FlickerFreePrint Data11(&tft, TFT_WHITE, TFT_BLACK); 96 | FlickerFreePrint Data1t(&tft, TFT_WHITE, TFT_BLACK); 97 | FlickerFreePrint Data2t(&tft, TFT_WHITE, TFT_BLACK); 98 | FlickerFreePrint Data3t(&tft, TFT_WHITE, TFT_BLACK); 99 | FlickerFreePrint Data4t(&tft, TFT_WHITE, TFT_BLACK); 100 | FlickerFreePrint Data5t(&tft, TFT_WHITE, TFT_BLACK); 101 | FlickerFreePrint Data6t(&tft, TFT_WHITE, TFT_BLACK); 102 | FlickerFreePrint Data7t(&tft, TFT_WHITE, TFT_BLACK); 103 | FlickerFreePrint Data8t(&tft, TFT_WHITE, TFT_BLACK); 104 | FlickerFreePrint Data9t(&tft, TFT_WHITE, TFT_BLACK); 105 | FlickerFreePrint Data10t(&tft, TFT_WHITE, TFT_BLACK); 106 | FlickerFreePrint Data11t(&tft, TFT_WHITE, TFT_BLACK); 107 | 108 | void pngDraw(PNGDRAW * pDraw) { 109 | uint16_t lineBuffer[MAX_IMAGE_WDITH]; 110 | png.getLineAsRGB565(pDraw, lineBuffer, PNG_RGB565_BIG_ENDIAN, 0xffffffff); 111 | tft.pushImage(xpos, ypos + pDraw -> y, pDraw -> iWidth, 1, lineBuffer); 112 | } 113 | 114 | void checkvalues() { 115 | total_km = startup_total_km + trip; 116 | bool traveled_enough_distance = (total_km - last_total_km_stored >= EEPROM_UPDATE_EACH_KM); 117 | if (traveled_enough_distance) { 118 | last_total_km_stored = total_km; 119 | EEPROM_writeAnything(EEPROM_MAGIC_VALUE, total_km); 120 | } 121 | } 122 | 123 | void setup(void) { 124 | VescSerial.begin(115200, SERIAL_8N1, RXD2, TXD2); // VESC RX TX 125 | // Wait for the Serial port to be ready 126 | while (!VescSerial) { 127 | delay(10); 128 | } 129 | UART.setSerialPort(&VescSerial); 130 | #ifdef DEBUG_MODE 131 | Serial.begin(115200); // Debug MicroUSB ? 132 | UART.setDebugPort(&Serial); 133 | #endif 134 | tft.begin(); 135 | EEPROM.begin(100); 136 | tft.setRotation(1); 137 | tft.fillScreen(TFT_BLACK); 138 | UART.getVescValues(); 139 | EEPROM_readAnything(EEPROM_MAGIC_VALUE, startup_total_km); 140 | if (isnan(startup_total_km)) { 141 | tft.setCursor(40, 160); 142 | tft.setTextFont(4); 143 | tft.setTextDatum(MC_DATUM); 144 | tft.setTextColor(TFT_RED, TFT_BLACK); 145 | tft.print("SETUP EPROM..."); 146 | for (int i = 0; i <100; i++){ 147 | EEPROM_writeAnything(i,0); 148 | } 149 | EEPROM_writeAnything(EEPROM_MAGIC_VALUE,0.0); 150 | delay(1500); 151 | ESP.restart(); 152 | } 153 | last_total_km_stored = startup_total_km; 154 | tacho = (UART.data.tachometerAbs / (MOTOR_POLES * 3)); 155 | trip = tacho / 1000; 156 | if (startup_total_km != 0) { 157 | startup_total_km = startup_total_km - trip; 158 | } 159 | 160 | #ifdef DO_LOGO_DRAW 161 | int16_t rc_bg = png.openFLASH((uint8_t * ) startup_image, sizeof(startup_image), pngDraw); 162 | if (rc_bg == PNG_SUCCESS) { 163 | tft.startWrite(); 164 | rc_bg = png.decode(NULL, 0); 165 | tft.endWrite(); 166 | } 167 | png.close(); 168 | delay(3000); 169 | tft.fillScreen(TFT_BLACK); 170 | int16_t rc_mainbg = png.openFLASH((uint8_t * ) background_image, sizeof(background_image), pngDraw); 171 | if (rc_mainbg == PNG_SUCCESS) { 172 | tft.startWrite(); 173 | rc_mainbg = png.decode(NULL, 0); 174 | tft.endWrite(); 175 | } 176 | png.close(); 177 | #endif 178 | } 179 | void loop() { 180 | UART.getVescValues(); 181 | tacho = (UART.data.tachometerAbs / (MOTOR_POLES * 3)); 182 | rpm = (UART.data.rpm / (MOTOR_POLES / 2)); 183 | trip = tacho / 1000; 184 | wheel_diameter = (PI * WHEEL_DIAMETER_MM / 1000); 185 | speed = ((rpm * wheel_diameter * GEAR_RAITO) / 1000) * 60; 186 | watts = UART.data.inpVoltage*UART.data.avgInputCurrent; 187 | int sensorValue = analogRead(LDR_PIN); 188 | if(sensorValue <= 200){sensorValue = 200;} 189 | brightness = map(sensorValue, 200, 1000, 255, 25); 190 | if(brightness <= 25){brightness=25;} //stupid map function gets destroyed when input value goes over specified 191 | analogWrite(LCD_BACK_LIGHT_PIN, brightness); 192 | 193 | //Main Speed -------------------------------------------------------------------------- 194 | 195 | int speedINT = _max(speed, 0); 196 | if (speedINT > HIGH_SPEED_WARNING) { 197 | COLOR_WARNING_SPEED = TFT_RED; 198 | } else { 199 | COLOR_WARNING_SPEED = TFT_WHITE; 200 | } 201 | Data1.setTextColor(TFT_BLACK, TFT_BLACK); 202 | 203 | tft.setFreeFont(SPEEDFONT); 204 | tft.setCursor(83, 162); 205 | Data1.setTextColor(COLOR_WARNING_SPEED, TFT_BLACK); 206 | Data1.print(speedINT); 207 | 208 | //Vesc Temp -------------------------------------------------------------------------- 209 | 210 | if (UART.data.tempMosfet > VESC_TEMP_WARNING1) { 211 | COLOR_WARNING_TEMP_VESC = TFT_YELLOW; 212 | } 213 | if (UART.data.tempMosfet > VESC_TEMP_WARNING2) { 214 | COLOR_WARNING_TEMP_VESC = TFT_RED; 215 | } else { 216 | COLOR_WARNING_TEMP_VESC = TFT_GREEN; 217 | } 218 | 219 | tft.setCursor(5, 220); 220 | tft.setFreeFont(DATAFONTSMALL); 221 | Data2.setTextColor(COLOR_WARNING_TEMP_VESC, TFT_BLACK); 222 | dtostrf(UART.data.tempMosfet, 3, 0, fmt); 223 | Data2.print(fmt); 224 | 225 | tft.setCursor(15, 235); 226 | tft.setFreeFont(DATAFONTSMALLTEXT); 227 | Data2t.setTextColor(TFT_WHITE, TFT_BLACK); 228 | Data2t.print("VescT"); 229 | 230 | //Motor Temp -------------------------------------------------------------------------- 231 | 232 | if (UART.data.tempMotor > MOTOR_TEMP_WARNING1) { 233 | COLOR_WARNING_TEMP_MOTOR = TFT_YELLOW; 234 | } 235 | if (UART.data.tempMotor > MOTOR_TEMP_WARNING2) { 236 | COLOR_WARNING_TEMP_MOTOR = TFT_RED; 237 | } else { 238 | COLOR_WARNING_TEMP_MOTOR = TFT_GREEN; 239 | } 240 | 241 | tft.setCursor(65, 220); 242 | tft.setFreeFont(DATAFONTSMALL); 243 | Data11.setTextColor(COLOR_WARNING_TEMP_MOTOR, TFT_BLACK); 244 | dtostrf(UART.data.tempMotor, 3, 0, fmt); 245 | Data11.print(fmt); 246 | 247 | tft.setCursor(65, 235); 248 | tft.setFreeFont(DATAFONTSMALLTEXT); 249 | Data11t.setTextColor(TFT_WHITE, TFT_BLACK); 250 | Data11t.print("MotorT"); 251 | 252 | //Battery Voltage -------------------------------------------------------------------------- 253 | 254 | if (UART.data.inpVoltage > BATTERY_WARNING_HIGH) { 255 | BATTERY_WARNING_COLOR = TFT_RED; 256 | } else if (UART.data.inpVoltage < BATTERY_WARNING_0) { 257 | BATTERY_WARNING_COLOR = TFT_RED; 258 | } else if (UART.data.inpVoltage < BATTERY_WARNING_LOW) { 259 | BATTERY_WARNING_COLOR = TFT_YELLOW; 260 | } else if (BATTERY_WARNING_LOW < UART.data.inpVoltage < BATTERY_WARNING_HIGH) { 261 | BATTERY_WARNING_COLOR = TFT_GREEN; 262 | } 263 | 264 | tft.setFreeFont(DATAFONTSMALL2); 265 | Data4.setTextColor(BATTERY_WARNING_COLOR, TFT_BLACK); 266 | tft.setCursor(10, 25); 267 | dtostrf(UART.data.inpVoltage, 3, 1, fmt); 268 | Data4.print(fmt); 269 | 270 | tft.setCursor(10, 30); 271 | tft.setTextFont(1); 272 | Data4t.setTextColor(TFT_WHITE, TFT_BLACK); 273 | Data4t.print("Battery"); 274 | 275 | //Watt/Error display -------------------------------------------------------------------------- 276 | 277 | if (UART.data.error == 0){ // Display Watts when no error(0) 278 | tft.setFreeFont(DATAFONTSMALL2); 279 | Data10.setTextColor(TFT_WHITE, TFT_BLACK); 280 | tft.setCursor(260, 25); 281 | dtostrf(watts, 5, 0, fmt); 282 | Data10.print(fmt); 283 | 284 | tft.setCursor (270, 30); 285 | tft.setTextFont(1); 286 | Data10t.setTextColor(TFT_WHITE, TFT_BLACK); 287 | Data10t.print("Watts"); 288 | }else{ // Error display when present 289 | if (UART.data.error > 0) { 290 | ERROR_WARNING_COLOR = TFT_RED; 291 | }else{ 292 | ERROR_WARNING_COLOR = TFT_GREEN; 293 | } 294 | tft.setFreeFont(DATAFONTSMALL2); 295 | Data10.setTextColor(ERROR_WARNING_COLOR, TFT_BLACK); 296 | tft.setCursor(270, 25); 297 | dtostrf(UART.data.error, 2, 0, fmt); 298 | Data10.print(fmt); 299 | 300 | tft.setCursor(270, 30); 301 | tft.setTextFont(1); 302 | Data10t.setTextColor(TFT_WHITE, TFT_BLACK); 303 | Data10t.print("Error"); 304 | } 305 | 306 | //Motor-Phase Current -------------------------------------------------------------------------- 307 | 308 | tft.setCursor(270, 220); 309 | tft.setFreeFont(DATAFONTSMALL); 310 | Data6.setTextColor(TFT_GREEN, TFT_BLACK); 311 | dtostrf(UART.data.avgMotorCurrent, 3, 0, fmt); 312 | Data6.print(fmt); 313 | 314 | tft.setCursor(265, 235); 315 | tft.setFreeFont(DATAFONTSMALLTEXT); 316 | Data6t.setTextColor(TFT_WHITE, TFT_BLACK); 317 | Data6t.print("PHASE A"); 318 | 319 | //Battery Current -------------------------------------------------------------------------- 320 | 321 | tft.setCursor(220, 220); 322 | tft.setFreeFont(DATAFONTSMALL); 323 | Data7.setTextColor(TFT_GREEN, TFT_BLACK); 324 | dtostrf(UART.data.avgInputCurrent, 3, 0, fmt); 325 | Data7.print(fmt); 326 | 327 | tft.setCursor(215, 235); 328 | tft.setFreeFont(DATAFONTSMALLTEXT); 329 | Data7t.setTextColor(TFT_WHITE, TFT_BLACK); 330 | Data7t.print("BATT A"); 331 | 332 | //Odometer Text (TRIP) -------------------------------------------------------------------------- 333 | 334 | tft.setCursor(145, 220); 335 | tft.setFreeFont(DATAFONTSMALL); 336 | 337 | Data9.setTextColor(TFT_WHITE, TFT_BLACK); 338 | dtostrf(total_km, 4, 0, fmt); 339 | Data9.print(fmt); 340 | 341 | tft.setCursor(135, 235); 342 | tft.setFreeFont(DATAFONTSMALLTEXT); 343 | Data9t.setTextColor(TFT_WHITE, TFT_BLACK); 344 | Data9t.print("ODOMETER"); 345 | 346 | delay(Screen_refresh_delay); 347 | checkvalues(); 348 | } 349 | --------------------------------------------------------------------------------