diff --git a/.gitignore b/.gitignore index 89cc49c..6caeb0e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ .vscode/c_cpp_properties.json .vscode/launch.json .vscode/ipch +/.vscode +/.vscode diff --git a/.vscode/settings.json b/.vscode/settings.json index cb0dece..9c61a6c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,10 +1,10 @@ { - "C_Cpp_Runner.cCompilerPath": "C:/Users/siwat/.platformio/packages/toolchain-xtensa-esp32@8.4.0+2021r2-patch5/bin/xtensa-esp32-elf-gcc.exe", - "C_Cpp_Runner.cppCompilerPath": "C:/Users/siwat/.platformio/packages/toolchain-xtensa-esp32@8.4.0+2021r2-patch5/bin/xtensa-esp32-elf-g++.exe", - "C_Cpp_Runner.debuggerPath": "C:/Users/siwat/.platformio/packages/toolchain-xtensa-esp32@8.4.0+2021r2-patch5/bin/xtensa-esp32-elf-gdb.exe", - "C_Cpp_Runner.cStandard": "gnu99", - "C_Cpp_Runner.cppStandard": "gnu++11", "C_Cpp_Runner.msvcBatchPath": "", + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", "C_Cpp_Runner.useMsvc": false, "C_Cpp_Runner.warnings": [ "-Wall", @@ -37,236 +37,7 @@ "C_Cpp_Runner.warningsAsError": false, "C_Cpp_Runner.compilerArgs": [], "C_Cpp_Runner.linkerArgs": [], - "C_Cpp_Runner.includePaths": [ - "D:/Git/cud-iot-v2/include", - "D:/Git/cud-iot-v2/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/heap/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/log/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps/sntp", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/lwip/src/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include/arch", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/esp32/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/platform_port/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include/esp32", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/esp32", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_common/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/soc", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/public_compat", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/esp32/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/esp32/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_pm/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ringbuf/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/esp32/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/vfs/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_wifi/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_event/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_netif/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_eth/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcpip_adapter/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/esp32/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ipc/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_trace/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_timer/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/port/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/mbedtls/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_update/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spi_flash/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bootloader_support/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nvs_flash/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/pthread/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/xtensa", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/esp32", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include/port/xtensa", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/port/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ieee802154/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/console", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/asio/asio/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/port/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/osi/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/include/esp32/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/api/include/api", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/storage", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/btc/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/common/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/client/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/server/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/core/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/models/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cbor/port/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/unity/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cmock/CMock/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/port/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/libcoap/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/port/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls/esp-tls-crypto", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_adc_cal/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hid/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcp_transport/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_client/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_server/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_ota/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_server/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/interface", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protobuf-c/protobuf-c", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/common", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/security", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/transports", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mdns/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_local_ctrl/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/sdmmc/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_serial_slave_link/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_websocket_client/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/expat/expat/lib", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/port/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wear_levelling/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/diskio", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/vfs", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freemodbus/freemodbus/common/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include/esp32", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/jsmn/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json/cJSON", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/port_include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mqtt/esp-mqtt/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/openssl/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/perfmon/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spiffs/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ulp/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wifi_provisioning/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rmaker_common/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_diagnostics/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rtc_store/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_insights/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_generator/upstream", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_schedule/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp_secure_cert_mgr/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rainmaker/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/gpio_button/button/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/qrcode/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ws2812_led", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/tool", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/typedef", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/image", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/math", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/nn", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/layer", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/detect", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/model_zoo", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-sr/src/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-sr/esp-tts/esp_tts_chinese/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-sr/include/esp32", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/driver/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/conversions/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dotprod/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/hann/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_harris/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/nuttall/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/flat_top/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/iir/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fir/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/add/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sub/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mul/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/addc/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mulc/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sqrt/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fft/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dct/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/conv/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/common/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fb_gfx/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/qio_qspi/include", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/cores/esp32", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/variants/wt32-eth01", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/FS/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/Insights/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/SD/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/USB/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/Update/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src", - "C:/Users/siwat/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src", - "" - ], + "C_Cpp_Runner.includePaths": [], "C_Cpp_Runner.includeSearch": [ "*", "**/*" @@ -285,11 +56,11 @@ "C_Cpp_Runner.showCompilationTime": false, "C_Cpp_Runner.useLinkTimeOptimization": false, "C_Cpp_Runner.msvcSecureNoWarnings": false, + "C_Cpp.errorSquiggles": "disabled", "files.associations": { - "random": "cpp", - "*.tcc": "cpp", "array": "cpp", "atomic": "cpp", + "*.tcc": "cpp", "bitset": "cpp", "cctype": "cpp", "clocale": "cpp", @@ -316,6 +87,7 @@ "memory_resource": "cpp", "numeric": "cpp", "optional": "cpp", + "random": "cpp", "regex": "cpp", "string": "cpp", "string_view": "cpp", diff --git a/ise-display/fonts/BaiJ-48-ascii.zi b/ise-display/fonts/BaiJ-48-ascii.zi new file mode 100644 index 0000000..4d572a4 Binary files /dev/null and b/ise-display/fonts/BaiJ-48-ascii.zi differ diff --git a/ise-display/fonts/BaiJ-B-24-ascii.zi b/ise-display/fonts/BaiJ-B-24-ascii.zi new file mode 100644 index 0000000..c1d9392 Binary files /dev/null and b/ise-display/fonts/BaiJ-B-24-ascii.zi differ diff --git a/ise-display/fonts/BaiJ-B-40.zi b/ise-display/fonts/BaiJ-B-40.zi new file mode 100644 index 0000000..3bd944c Binary files /dev/null and b/ise-display/fonts/BaiJ-B-40.zi differ diff --git a/ise-display/fonts/BaiJ-B-48-ascii.zi b/ise-display/fonts/BaiJ-B-48-ascii.zi new file mode 100644 index 0000000..81aabaa Binary files /dev/null and b/ise-display/fonts/BaiJ-B-48-ascii.zi differ diff --git a/ise-display/fonts/BaiJ-sb-24-ascii.zi b/ise-display/fonts/BaiJ-sb-24-ascii.zi new file mode 100644 index 0000000..1d0861a Binary files /dev/null and b/ise-display/fonts/BaiJ-sb-24-ascii.zi differ diff --git a/ise-display/fonts/BaiJ-sb-72-ascii.zi b/ise-display/fonts/BaiJ-sb-72-ascii.zi new file mode 100644 index 0000000..16c1773 Binary files /dev/null and b/ise-display/fonts/BaiJ-sb-72-ascii.zi differ diff --git a/ise-display/fonts/BaiJ-sb-80-ascii.zi b/ise-display/fonts/BaiJ-sb-80-ascii.zi new file mode 100644 index 0000000..407cd64 Binary files /dev/null and b/ise-display/fonts/BaiJ-sb-80-ascii.zi differ diff --git a/ise-display/fonts/BaiJ-sb-86-ascii.zi b/ise-display/fonts/BaiJ-sb-86-ascii.zi new file mode 100644 index 0000000..6f27432 Binary files /dev/null and b/ise-display/fonts/BaiJ-sb-86-ascii.zi differ diff --git a/ise-display/fonts/baiJ-B-32-ascii.zi b/ise-display/fonts/baiJ-B-32-ascii.zi new file mode 100644 index 0000000..18a8e5c Binary files /dev/null and b/ise-display/fonts/baiJ-B-32-ascii.zi differ diff --git a/ise-display/fonts/baiJ-sb-32-ascii.zi b/ise-display/fonts/baiJ-sb-32-ascii.zi new file mode 100644 index 0000000..72dae21 Binary files /dev/null and b/ise-display/fonts/baiJ-sb-32-ascii.zi differ diff --git a/ise-display/images/ac/ac-light-off.png b/ise-display/images/ac/ac-light-off.png deleted file mode 100644 index dfa928d..0000000 Binary files a/ise-display/images/ac/ac-light-off.png and /dev/null differ diff --git a/ise-display/images/ac/ac-light-on.png b/ise-display/images/ac/ac-light-on.png deleted file mode 100644 index fa08c30..0000000 Binary files a/ise-display/images/ac/ac-light-on.png and /dev/null differ diff --git a/ise-display/images/ac/ac-minus-p.png b/ise-display/images/ac/ac-minus-p.png deleted file mode 100644 index 796021e..0000000 Binary files a/ise-display/images/ac/ac-minus-p.png and /dev/null differ diff --git a/ise-display/images/ac/ac-minus.png b/ise-display/images/ac/ac-minus.png deleted file mode 100644 index 0642045..0000000 Binary files a/ise-display/images/ac/ac-minus.png and /dev/null differ diff --git a/ise-display/images/ac/ac-off-p.png b/ise-display/images/ac/ac-off-p.png deleted file mode 100644 index 03aef80..0000000 Binary files a/ise-display/images/ac/ac-off-p.png and /dev/null differ diff --git a/ise-display/images/ac/ac-off.png b/ise-display/images/ac/ac-off.png deleted file mode 100644 index 1e786eb..0000000 Binary files a/ise-display/images/ac/ac-off.png and /dev/null differ diff --git a/ise-display/images/ac/ac-on-p.png b/ise-display/images/ac/ac-on-p.png deleted file mode 100644 index 9286e73..0000000 Binary files a/ise-display/images/ac/ac-on-p.png and /dev/null differ diff --git a/ise-display/images/ac/ac-on.png b/ise-display/images/ac/ac-on.png deleted file mode 100644 index 738ed32..0000000 Binary files a/ise-display/images/ac/ac-on.png and /dev/null differ diff --git a/ise-display/images/ac/ac-plus-p.png b/ise-display/images/ac/ac-plus-p.png deleted file mode 100644 index de7ac55..0000000 Binary files a/ise-display/images/ac/ac-plus-p.png and /dev/null differ diff --git a/ise-display/images/ac/ac-plus.png b/ise-display/images/ac/ac-plus.png deleted file mode 100644 index fab33b5..0000000 Binary files a/ise-display/images/ac/ac-plus.png and /dev/null differ diff --git a/ise-display/images/ac/fanspeed/fanAuto-p.png b/ise-display/images/ac/fanspeed/fanAuto-p.png deleted file mode 100644 index 6f70f5e..0000000 Binary files a/ise-display/images/ac/fanspeed/fanAuto-p.png and /dev/null differ diff --git a/ise-display/images/ac/fanspeed/fanAuto.png b/ise-display/images/ac/fanspeed/fanAuto.png deleted file mode 100644 index 601dc5c..0000000 Binary files a/ise-display/images/ac/fanspeed/fanAuto.png and /dev/null differ diff --git a/ise-display/images/ac/fanspeed/fanHigh-p.png b/ise-display/images/ac/fanspeed/fanHigh-p.png deleted file mode 100644 index 7388dfb..0000000 Binary files a/ise-display/images/ac/fanspeed/fanHigh-p.png and /dev/null differ diff --git a/ise-display/images/ac/fanspeed/fanHigh.png b/ise-display/images/ac/fanspeed/fanHigh.png deleted file mode 100644 index c0f568f..0000000 Binary files a/ise-display/images/ac/fanspeed/fanHigh.png and /dev/null differ diff --git a/ise-display/images/ac/fanspeed/fanLow-p.png b/ise-display/images/ac/fanspeed/fanLow-p.png deleted file mode 100644 index 4573232..0000000 Binary files a/ise-display/images/ac/fanspeed/fanLow-p.png and /dev/null differ diff --git a/ise-display/images/ac/fanspeed/fanLow.png b/ise-display/images/ac/fanspeed/fanLow.png deleted file mode 100644 index f0e9a5b..0000000 Binary files a/ise-display/images/ac/fanspeed/fanLow.png and /dev/null differ diff --git a/ise-display/images/ac/fanspeed/fanMid-p.png b/ise-display/images/ac/fanspeed/fanMid-p.png deleted file mode 100644 index 36b7daf..0000000 Binary files a/ise-display/images/ac/fanspeed/fanMid-p.png and /dev/null differ diff --git a/ise-display/images/ac/fanspeed/fanMid.png b/ise-display/images/ac/fanspeed/fanMid.png deleted file mode 100644 index 8e1ac19..0000000 Binary files a/ise-display/images/ac/fanspeed/fanMid.png and /dev/null differ diff --git a/ise-display/images/ac/mode/modeCool-p.png b/ise-display/images/ac/mode/modeCool-p.png deleted file mode 100644 index ce1cf2f..0000000 Binary files a/ise-display/images/ac/mode/modeCool-p.png and /dev/null differ diff --git a/ise-display/images/ac/mode/modeCool.png b/ise-display/images/ac/mode/modeCool.png deleted file mode 100644 index 39156c3..0000000 Binary files a/ise-display/images/ac/mode/modeCool.png and /dev/null differ diff --git a/ise-display/images/ac/mode/modeDry-p.png b/ise-display/images/ac/mode/modeDry-p.png deleted file mode 100644 index f21aba7..0000000 Binary files a/ise-display/images/ac/mode/modeDry-p.png and /dev/null differ diff --git a/ise-display/images/ac/mode/modeDry.png b/ise-display/images/ac/mode/modeDry.png deleted file mode 100644 index c3e5ef6..0000000 Binary files a/ise-display/images/ac/mode/modeDry.png and /dev/null differ diff --git a/ise-display/images/ac/mode/modeFan-p.png b/ise-display/images/ac/mode/modeFan-p.png deleted file mode 100644 index 45cad55..0000000 Binary files a/ise-display/images/ac/mode/modeFan-p.png and /dev/null differ diff --git a/ise-display/images/ac/mode/modeFan.png b/ise-display/images/ac/mode/modeFan.png deleted file mode 100644 index 3ac499f..0000000 Binary files a/ise-display/images/ac/mode/modeFan.png and /dev/null differ diff --git a/ise-display/images/background/bg-off-v.png b/ise-display/images/background/bg-off-v.png deleted file mode 100644 index f33e8bf..0000000 Binary files a/ise-display/images/background/bg-off-v.png and /dev/null differ diff --git a/ise-display/images/background/bg-off.png b/ise-display/images/background/bg-off.png deleted file mode 100644 index b5e3bc5..0000000 Binary files a/ise-display/images/background/bg-off.png and /dev/null differ diff --git a/ise-display/images/background/full-ref.png b/ise-display/images/background/full-ref.png deleted file mode 100644 index 0834ce1..0000000 Binary files a/ise-display/images/background/full-ref.png and /dev/null differ diff --git a/ise-display/images/boot/OPEN-bg.png b/ise-display/images/boot/OPEN-bg.png new file mode 100644 index 0000000..7f4a5c4 Binary files /dev/null and b/ise-display/images/boot/OPEN-bg.png differ diff --git a/ise-display/images/boot/OPEN-ref.png b/ise-display/images/boot/OPEN-ref.png new file mode 100644 index 0000000..8fdeede Binary files /dev/null and b/ise-display/images/boot/OPEN-ref.png differ diff --git a/ise-display/images/boot/bg.png b/ise-display/images/boot/bg.png deleted file mode 100644 index 030ed0b..0000000 Binary files a/ise-display/images/boot/bg.png and /dev/null differ diff --git a/ise-display/images/boot/ref.png b/ise-display/images/boot/ref.png deleted file mode 100644 index 932f215..0000000 Binary files a/ise-display/images/boot/ref.png and /dev/null differ diff --git a/ise-display/images/light/light-level0.png b/ise-display/images/light/light-level0.png deleted file mode 100644 index 554b4ed..0000000 Binary files a/ise-display/images/light/light-level0.png and /dev/null differ diff --git a/ise-display/images/light/light-level1.png b/ise-display/images/light/light-level1.png deleted file mode 100644 index 53cdd22..0000000 Binary files a/ise-display/images/light/light-level1.png and /dev/null differ diff --git a/ise-display/images/light/light-level2.png b/ise-display/images/light/light-level2.png deleted file mode 100644 index 84ec343..0000000 Binary files a/ise-display/images/light/light-level2.png and /dev/null differ diff --git a/ise-display/images/light/light-level3.png b/ise-display/images/light/light-level3.png deleted file mode 100644 index 614af4b..0000000 Binary files a/ise-display/images/light/light-level3.png and /dev/null differ diff --git a/ise-display/images/light/master-off-p.png b/ise-display/images/light/master-off-p.png deleted file mode 100644 index c0c15f0..0000000 Binary files a/ise-display/images/light/master-off-p.png and /dev/null differ diff --git a/ise-display/images/light/master-off.png b/ise-display/images/light/master-off.png deleted file mode 100644 index 6fcbc83..0000000 Binary files a/ise-display/images/light/master-off.png and /dev/null differ diff --git a/ise-display/images/light/master-on-p.png b/ise-display/images/light/master-on-p.png deleted file mode 100644 index a6ae700..0000000 Binary files a/ise-display/images/light/master-on-p.png and /dev/null differ diff --git a/ise-display/images/light/master-on.png b/ise-display/images/light/master-on.png deleted file mode 100644 index 600a2fa..0000000 Binary files a/ise-display/images/light/master-on.png and /dev/null differ diff --git a/ise-display/images/main/C-degree/C off.png b/ise-display/images/main/C-degree/C off.png new file mode 100644 index 0000000..f505db8 Binary files /dev/null and b/ise-display/images/main/C-degree/C off.png differ diff --git a/ise-display/images/main/C-degree/C on.png b/ise-display/images/main/C-degree/C on.png new file mode 100644 index 0000000..7dacc39 Binary files /dev/null and b/ise-display/images/main/C-degree/C on.png differ diff --git a/ise-display/images/main/ac/AC-off-pressed.png b/ise-display/images/main/ac/AC-off-pressed.png new file mode 100644 index 0000000..7f21e3d Binary files /dev/null and b/ise-display/images/main/ac/AC-off-pressed.png differ diff --git a/ise-display/images/main/ac/AC-off.png b/ise-display/images/main/ac/AC-off.png new file mode 100644 index 0000000..73a356a Binary files /dev/null and b/ise-display/images/main/ac/AC-off.png differ diff --git a/ise-display/images/main/ac/AC-on-pressed.png b/ise-display/images/main/ac/AC-on-pressed.png new file mode 100644 index 0000000..d635d44 Binary files /dev/null and b/ise-display/images/main/ac/AC-on-pressed.png differ diff --git a/ise-display/images/main/ac/AC-on.png b/ise-display/images/main/ac/AC-on.png new file mode 100644 index 0000000..052e027 Binary files /dev/null and b/ise-display/images/main/ac/AC-on.png differ diff --git a/ise-display/images/main/background/Background-c.png b/ise-display/images/main/background/Background-c.png new file mode 100644 index 0000000..3f69291 Binary files /dev/null and b/ise-display/images/main/background/Background-c.png differ diff --git a/ise-display/images/main/background/Background.png b/ise-display/images/main/background/Background.png new file mode 100644 index 0000000..0ff021b Binary files /dev/null and b/ise-display/images/main/background/Background.png differ diff --git a/ise-display/images/main/background/Reference - Active mode.png b/ise-display/images/main/background/Reference - Active mode.png new file mode 100644 index 0000000..570a2d8 Binary files /dev/null and b/ise-display/images/main/background/Reference - Active mode.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Auto-off-pressed.png b/ise-display/images/main/fan/Fan-speed-Auto-off-pressed.png new file mode 100644 index 0000000..68fe571 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Auto-off-pressed.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Auto-off.png b/ise-display/images/main/fan/Fan-speed-Auto-off.png new file mode 100644 index 0000000..95fb2e4 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Auto-off.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Auto-on-pressed.png b/ise-display/images/main/fan/Fan-speed-Auto-on-pressed.png new file mode 100644 index 0000000..a267a9a Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Auto-on-pressed.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Auto-on.png b/ise-display/images/main/fan/Fan-speed-Auto-on.png new file mode 100644 index 0000000..4a1d774 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Auto-on.png differ diff --git a/ise-display/images/main/fan/Fan-speed-High-off-pressed.png b/ise-display/images/main/fan/Fan-speed-High-off-pressed.png new file mode 100644 index 0000000..0adee9a Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-High-off-pressed.png differ diff --git a/ise-display/images/main/fan/Fan-speed-High-off.png b/ise-display/images/main/fan/Fan-speed-High-off.png new file mode 100644 index 0000000..c45b2dc Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-High-off.png differ diff --git a/ise-display/images/main/fan/Fan-speed-High-on-pressed.png b/ise-display/images/main/fan/Fan-speed-High-on-pressed.png new file mode 100644 index 0000000..a57e83e Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-High-on-pressed.png differ diff --git a/ise-display/images/main/fan/Fan-speed-High-on.png b/ise-display/images/main/fan/Fan-speed-High-on.png new file mode 100644 index 0000000..2943849 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-High-on.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Low-off-pressed.png b/ise-display/images/main/fan/Fan-speed-Low-off-pressed.png new file mode 100644 index 0000000..f013e41 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Low-off-pressed.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Low-off.png b/ise-display/images/main/fan/Fan-speed-Low-off.png new file mode 100644 index 0000000..b272008 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Low-off.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Low-on-pressed.png b/ise-display/images/main/fan/Fan-speed-Low-on-pressed.png new file mode 100644 index 0000000..3157a58 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Low-on-pressed.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Low-on.png b/ise-display/images/main/fan/Fan-speed-Low-on.png new file mode 100644 index 0000000..f073fe9 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Low-on.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Mid-off-pressed.png b/ise-display/images/main/fan/Fan-speed-Mid-off-pressed.png new file mode 100644 index 0000000..d3ab352 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Mid-off-pressed.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Mid-off.png b/ise-display/images/main/fan/Fan-speed-Mid-off.png new file mode 100644 index 0000000..76121d7 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Mid-off.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Mid-on-pressed.png b/ise-display/images/main/fan/Fan-speed-Mid-on-pressed.png new file mode 100644 index 0000000..d3bc616 Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Mid-on-pressed.png differ diff --git a/ise-display/images/main/fan/Fan-speed-Mid-on.png b/ise-display/images/main/fan/Fan-speed-Mid-on.png new file mode 100644 index 0000000..27d903d Binary files /dev/null and b/ise-display/images/main/fan/Fan-speed-Mid-on.png differ diff --git a/ise-display/images/main/light/light-button-off-prressed.png b/ise-display/images/main/light/light-button-off-prressed.png new file mode 100644 index 0000000..a41755a Binary files /dev/null and b/ise-display/images/main/light/light-button-off-prressed.png differ diff --git a/ise-display/images/main/light/light-button-off.png b/ise-display/images/main/light/light-button-off.png new file mode 100644 index 0000000..1e9ac73 Binary files /dev/null and b/ise-display/images/main/light/light-button-off.png differ diff --git a/ise-display/images/main/light/light-button-on-pressed.png b/ise-display/images/main/light/light-button-on-pressed.png new file mode 100644 index 0000000..3926c29 Binary files /dev/null and b/ise-display/images/main/light/light-button-on-pressed.png differ diff --git a/ise-display/images/main/light/light-button-on.png b/ise-display/images/main/light/light-button-on.png new file mode 100644 index 0000000..31cc051 Binary files /dev/null and b/ise-display/images/main/light/light-button-on.png differ diff --git a/ise-display/images/main/light/light-state-0.png b/ise-display/images/main/light/light-state-0.png new file mode 100644 index 0000000..274097f Binary files /dev/null and b/ise-display/images/main/light/light-state-0.png differ diff --git a/ise-display/images/main/light/light-state-1.png b/ise-display/images/main/light/light-state-1.png new file mode 100644 index 0000000..04892a6 Binary files /dev/null and b/ise-display/images/main/light/light-state-1.png differ diff --git a/ise-display/images/main/light/light-state-2.png b/ise-display/images/main/light/light-state-2.png new file mode 100644 index 0000000..11b14c6 Binary files /dev/null and b/ise-display/images/main/light/light-state-2.png differ diff --git a/ise-display/images/main/light/light-state-3.png b/ise-display/images/main/light/light-state-3.png new file mode 100644 index 0000000..8378813 Binary files /dev/null and b/ise-display/images/main/light/light-state-3.png differ diff --git a/ise-display/images/main/lock/lock.png b/ise-display/images/main/lock/lock.png new file mode 100644 index 0000000..ab49ebd Binary files /dev/null and b/ise-display/images/main/lock/lock.png differ diff --git a/ise-display/images/main/lock/no lock.png b/ise-display/images/main/lock/no lock.png new file mode 100644 index 0000000..57e7394 Binary files /dev/null and b/ise-display/images/main/lock/no lock.png differ diff --git a/ise-display/images/main/master-light/Master-light-all.png b/ise-display/images/main/master-light/Master-light-all.png new file mode 100644 index 0000000..63eb473 Binary files /dev/null and b/ise-display/images/main/master-light/Master-light-all.png differ diff --git a/ise-display/images/main/master-light/Master-light-state0.png b/ise-display/images/main/master-light/Master-light-state0.png new file mode 100644 index 0000000..1f2dd8e Binary files /dev/null and b/ise-display/images/main/master-light/Master-light-state0.png differ diff --git a/ise-display/images/main/master-light/Master-light-state1.png b/ise-display/images/main/master-light/Master-light-state1.png new file mode 100644 index 0000000..572ca51 Binary files /dev/null and b/ise-display/images/main/master-light/Master-light-state1.png differ diff --git a/ise-display/images/main/master-light/Master-light-state2.png b/ise-display/images/main/master-light/Master-light-state2.png new file mode 100644 index 0000000..3feacc3 Binary files /dev/null and b/ise-display/images/main/master-light/Master-light-state2.png differ diff --git a/ise-display/images/main/master-light/Master-light-state3.png b/ise-display/images/main/master-light/Master-light-state3.png new file mode 100644 index 0000000..60bf1a4 Binary files /dev/null and b/ise-display/images/main/master-light/Master-light-state3.png differ diff --git a/ise-display/images/main/master-light/master-light-button-off-pressed.png b/ise-display/images/main/master-light/master-light-button-off-pressed.png new file mode 100644 index 0000000..fc2f69e Binary files /dev/null and b/ise-display/images/main/master-light/master-light-button-off-pressed.png differ diff --git a/ise-display/images/main/master-light/master-light-button-off.png b/ise-display/images/main/master-light/master-light-button-off.png new file mode 100644 index 0000000..e3528e0 Binary files /dev/null and b/ise-display/images/main/master-light/master-light-button-off.png differ diff --git a/ise-display/images/main/master-light/master-light-button-on.png b/ise-display/images/main/master-light/master-light-button-on.png new file mode 100644 index 0000000..56d4bec Binary files /dev/null and b/ise-display/images/main/master-light/master-light-button-on.png differ diff --git a/ise-display/images/main/master-light/master-light-button-pressed.png b/ise-display/images/main/master-light/master-light-button-pressed.png new file mode 100644 index 0000000..5cce401 Binary files /dev/null and b/ise-display/images/main/master-light/master-light-button-pressed.png differ diff --git a/ise-display/images/main/mode/Mode-cool-off-pressed.png b/ise-display/images/main/mode/Mode-cool-off-pressed.png new file mode 100644 index 0000000..6aaef2f Binary files /dev/null and b/ise-display/images/main/mode/Mode-cool-off-pressed.png differ diff --git a/ise-display/images/main/mode/Mode-cool-off.png b/ise-display/images/main/mode/Mode-cool-off.png new file mode 100644 index 0000000..57b5072 Binary files /dev/null and b/ise-display/images/main/mode/Mode-cool-off.png differ diff --git a/ise-display/images/main/mode/Mode-cool-on-pressed.png b/ise-display/images/main/mode/Mode-cool-on-pressed.png new file mode 100644 index 0000000..973dced Binary files /dev/null and b/ise-display/images/main/mode/Mode-cool-on-pressed.png differ diff --git a/ise-display/images/main/mode/Mode-cool-on.png b/ise-display/images/main/mode/Mode-cool-on.png new file mode 100644 index 0000000..ce61894 Binary files /dev/null and b/ise-display/images/main/mode/Mode-cool-on.png differ diff --git a/ise-display/images/main/mode/Mode-dry-off-pressed.png b/ise-display/images/main/mode/Mode-dry-off-pressed.png new file mode 100644 index 0000000..06c1932 Binary files /dev/null and b/ise-display/images/main/mode/Mode-dry-off-pressed.png differ diff --git a/ise-display/images/main/mode/Mode-dry-off.png b/ise-display/images/main/mode/Mode-dry-off.png new file mode 100644 index 0000000..b4d86c2 Binary files /dev/null and b/ise-display/images/main/mode/Mode-dry-off.png differ diff --git a/ise-display/images/main/mode/Mode-dry-on-pressed.png b/ise-display/images/main/mode/Mode-dry-on-pressed.png new file mode 100644 index 0000000..94c8c87 Binary files /dev/null and b/ise-display/images/main/mode/Mode-dry-on-pressed.png differ diff --git a/ise-display/images/main/mode/Mode-dry-on.png b/ise-display/images/main/mode/Mode-dry-on.png new file mode 100644 index 0000000..486ae31 Binary files /dev/null and b/ise-display/images/main/mode/Mode-dry-on.png differ diff --git a/ise-display/images/main/mode/Mode-fan-off-pressed.png b/ise-display/images/main/mode/Mode-fan-off-pressed.png new file mode 100644 index 0000000..3b8ea67 Binary files /dev/null and b/ise-display/images/main/mode/Mode-fan-off-pressed.png differ diff --git a/ise-display/images/main/mode/Mode-fan-off.png b/ise-display/images/main/mode/Mode-fan-off.png new file mode 100644 index 0000000..fd3110e Binary files /dev/null and b/ise-display/images/main/mode/Mode-fan-off.png differ diff --git a/ise-display/images/main/mode/Mode-fan-on-pressed.png b/ise-display/images/main/mode/Mode-fan-on-pressed.png new file mode 100644 index 0000000..b83978a Binary files /dev/null and b/ise-display/images/main/mode/Mode-fan-on-pressed.png differ diff --git a/ise-display/images/main/mode/Mode-fan-on.png b/ise-display/images/main/mode/Mode-fan-on.png new file mode 100644 index 0000000..9f950ad Binary files /dev/null and b/ise-display/images/main/mode/Mode-fan-on.png differ diff --git a/ise-display/images/main/pm/PM-off-pressed.png b/ise-display/images/main/pm/PM-off-pressed.png new file mode 100644 index 0000000..cf092a2 Binary files /dev/null and b/ise-display/images/main/pm/PM-off-pressed.png differ diff --git a/ise-display/images/main/pm/PM-off.png b/ise-display/images/main/pm/PM-off.png new file mode 100644 index 0000000..e277882 Binary files /dev/null and b/ise-display/images/main/pm/PM-off.png differ diff --git a/ise-display/images/main/pm/PM-on-pressed.png b/ise-display/images/main/pm/PM-on-pressed.png new file mode 100644 index 0000000..6ea9c11 Binary files /dev/null and b/ise-display/images/main/pm/PM-on-pressed.png differ diff --git a/ise-display/images/main/pm/PM-on.png b/ise-display/images/main/pm/PM-on.png new file mode 100644 index 0000000..791813f Binary files /dev/null and b/ise-display/images/main/pm/PM-on.png differ diff --git a/ise-display/images/main/temp-control/temp-min-pressed.png b/ise-display/images/main/temp-control/temp-min-pressed.png new file mode 100644 index 0000000..8c3ff5a Binary files /dev/null and b/ise-display/images/main/temp-control/temp-min-pressed.png differ diff --git a/ise-display/images/main/temp-control/temp-min.png b/ise-display/images/main/temp-control/temp-min.png new file mode 100644 index 0000000..4bc9c43 Binary files /dev/null and b/ise-display/images/main/temp-control/temp-min.png differ diff --git a/ise-display/images/main/temp-control/temp-plus-pressed.png b/ise-display/images/main/temp-control/temp-plus-pressed.png new file mode 100644 index 0000000..ae5fc98 Binary files /dev/null and b/ise-display/images/main/temp-control/temp-plus-pressed.png differ diff --git a/ise-display/images/main/temp-control/temp-plus.png b/ise-display/images/main/temp-control/temp-plus.png new file mode 100644 index 0000000..e944126 Binary files /dev/null and b/ise-display/images/main/temp-control/temp-plus.png differ diff --git a/ise-display/images/main/toggle-all/toggle-all-off-pressed.png b/ise-display/images/main/toggle-all/toggle-all-off-pressed.png new file mode 100644 index 0000000..fc6b65a Binary files /dev/null and b/ise-display/images/main/toggle-all/toggle-all-off-pressed.png differ diff --git a/ise-display/images/main/toggle-all/toggle-all-off.png b/ise-display/images/main/toggle-all/toggle-all-off.png new file mode 100644 index 0000000..cf0ae56 Binary files /dev/null and b/ise-display/images/main/toggle-all/toggle-all-off.png differ diff --git a/ise-display/images/main/toggle-all/toggle-all-on-pressed.png b/ise-display/images/main/toggle-all/toggle-all-on-pressed.png new file mode 100644 index 0000000..c179c3f Binary files /dev/null and b/ise-display/images/main/toggle-all/toggle-all-on-pressed.png differ diff --git a/ise-display/images/main/toggle-all/toggle-all-on.png b/ise-display/images/main/toggle-all/toggle-all-on.png new file mode 100644 index 0000000..d85c19a Binary files /dev/null and b/ise-display/images/main/toggle-all/toggle-all-on.png differ diff --git a/ise-display/images/pm/pm-minus-p.png b/ise-display/images/pm/pm-minus-p.png deleted file mode 100644 index f0e94aa..0000000 Binary files a/ise-display/images/pm/pm-minus-p.png and /dev/null differ diff --git a/ise-display/images/pm/pm-minus.png b/ise-display/images/pm/pm-minus.png deleted file mode 100644 index bbd6619..0000000 Binary files a/ise-display/images/pm/pm-minus.png and /dev/null differ diff --git a/ise-display/images/pm/pm-off-p.png b/ise-display/images/pm/pm-off-p.png deleted file mode 100644 index d216123..0000000 Binary files a/ise-display/images/pm/pm-off-p.png and /dev/null differ diff --git a/ise-display/images/pm/pm-off.png b/ise-display/images/pm/pm-off.png deleted file mode 100644 index 71922b3..0000000 Binary files a/ise-display/images/pm/pm-off.png and /dev/null differ diff --git a/ise-display/images/pm/pm-on-p.png b/ise-display/images/pm/pm-on-p.png deleted file mode 100644 index 0d546e4..0000000 Binary files a/ise-display/images/pm/pm-on-p.png and /dev/null differ diff --git a/ise-display/images/pm/pm-on.png b/ise-display/images/pm/pm-on.png deleted file mode 100644 index 9176fbf..0000000 Binary files a/ise-display/images/pm/pm-on.png and /dev/null differ diff --git a/ise-display/images/pm/pm-plus-p.png b/ise-display/images/pm/pm-plus-p.png deleted file mode 100644 index 83551b1..0000000 Binary files a/ise-display/images/pm/pm-plus-p.png and /dev/null differ diff --git a/ise-display/images/pm/pm-plus.png b/ise-display/images/pm/pm-plus.png deleted file mode 100644 index 40e40fa..0000000 Binary files a/ise-display/images/pm/pm-plus.png and /dev/null differ diff --git a/ise-display/images/standby/AC/Standby-AC-off-pressed.png b/ise-display/images/standby/AC/Standby-AC-off-pressed.png new file mode 100644 index 0000000..e6f23ec Binary files /dev/null and b/ise-display/images/standby/AC/Standby-AC-off-pressed.png differ diff --git a/ise-display/images/standby/AC/Standby-AC-off.png b/ise-display/images/standby/AC/Standby-AC-off.png new file mode 100644 index 0000000..768a986 Binary files /dev/null and b/ise-display/images/standby/AC/Standby-AC-off.png differ diff --git a/ise-display/images/standby/AC/Standby-AC-on-pressed.png b/ise-display/images/standby/AC/Standby-AC-on-pressed.png new file mode 100644 index 0000000..e06a8e0 Binary files /dev/null and b/ise-display/images/standby/AC/Standby-AC-on-pressed.png differ diff --git a/ise-display/images/standby/AC/Standby-AC-on.png b/ise-display/images/standby/AC/Standby-AC-on.png new file mode 100644 index 0000000..3db2828 Binary files /dev/null and b/ise-display/images/standby/AC/Standby-AC-on.png differ diff --git a/ise-display/images/standby/PM/Standby-PM-off-pressed.png b/ise-display/images/standby/PM/Standby-PM-off-pressed.png new file mode 100644 index 0000000..7ed59b4 Binary files /dev/null and b/ise-display/images/standby/PM/Standby-PM-off-pressed.png differ diff --git a/ise-display/images/standby/PM/Standby-PM-off.png b/ise-display/images/standby/PM/Standby-PM-off.png new file mode 100644 index 0000000..dff27a9 Binary files /dev/null and b/ise-display/images/standby/PM/Standby-PM-off.png differ diff --git a/ise-display/images/standby/PM/Standby-PM-on-pressed.png b/ise-display/images/standby/PM/Standby-PM-on-pressed.png new file mode 100644 index 0000000..34efbef Binary files /dev/null and b/ise-display/images/standby/PM/Standby-PM-on-pressed.png differ diff --git a/ise-display/images/standby/PM/Standby-PM-on.png b/ise-display/images/standby/PM/Standby-PM-on.png new file mode 100644 index 0000000..abee3e1 Binary files /dev/null and b/ise-display/images/standby/PM/Standby-PM-on.png differ diff --git a/ise-display/images/standby/Standby-mode-bg.png b/ise-display/images/standby/Standby-mode-bg.png new file mode 100644 index 0000000..fdb1401 Binary files /dev/null and b/ise-display/images/standby/Standby-mode-bg.png differ diff --git a/ise-display/images/standby/Standby-mode-ref.png b/ise-display/images/standby/Standby-mode-ref.png new file mode 100644 index 0000000..b6f7005 Binary files /dev/null and b/ise-display/images/standby/Standby-mode-ref.png differ diff --git a/ise-display/images/standby/adv/Standby-adv-off-pressed.png b/ise-display/images/standby/adv/Standby-adv-off-pressed.png new file mode 100644 index 0000000..d0aadfd Binary files /dev/null and b/ise-display/images/standby/adv/Standby-adv-off-pressed.png differ diff --git a/ise-display/images/standby/adv/Standby-adv-off.png b/ise-display/images/standby/adv/Standby-adv-off.png new file mode 100644 index 0000000..6855f2b Binary files /dev/null and b/ise-display/images/standby/adv/Standby-adv-off.png differ diff --git a/ise-display/images/standby/adv/Standby-adv-on-pressed.png b/ise-display/images/standby/adv/Standby-adv-on-pressed.png new file mode 100644 index 0000000..266fa2e Binary files /dev/null and b/ise-display/images/standby/adv/Standby-adv-on-pressed.png differ diff --git a/ise-display/images/standby/adv/Standby-adv-on.png b/ise-display/images/standby/adv/Standby-adv-on.png new file mode 100644 index 0000000..b0918ca Binary files /dev/null and b/ise-display/images/standby/adv/Standby-adv-on.png differ diff --git a/ise-display/images/standby/bg.png b/ise-display/images/standby/bg.png deleted file mode 100644 index 1a8590f..0000000 Binary files a/ise-display/images/standby/bg.png and /dev/null differ diff --git a/ise-display/images/standby/light/Standby-light-off-pressed.png b/ise-display/images/standby/light/Standby-light-off-pressed.png new file mode 100644 index 0000000..6ac8f56 Binary files /dev/null and b/ise-display/images/standby/light/Standby-light-off-pressed.png differ diff --git a/ise-display/images/standby/light/Standby-light-off.png b/ise-display/images/standby/light/Standby-light-off.png new file mode 100644 index 0000000..bbff71a Binary files /dev/null and b/ise-display/images/standby/light/Standby-light-off.png differ diff --git a/ise-display/images/standby/light/Standby-light-on-pressed.png b/ise-display/images/standby/light/Standby-light-on-pressed.png new file mode 100644 index 0000000..8efe17e Binary files /dev/null and b/ise-display/images/standby/light/Standby-light-on-pressed.png differ diff --git a/ise-display/images/standby/light/Standby-light-on.png b/ise-display/images/standby/light/Standby-light-on.png new file mode 100644 index 0000000..58df375 Binary files /dev/null and b/ise-display/images/standby/light/Standby-light-on.png differ diff --git a/ise-display/images/standby/ref.png b/ise-display/images/standby/ref.png deleted file mode 100644 index 8e02b65..0000000 Binary files a/ise-display/images/standby/ref.png and /dev/null differ diff --git a/ise-display/images/standby/s-ac-off-p.png b/ise-display/images/standby/s-ac-off-p.png deleted file mode 100644 index d95a4c2..0000000 Binary files a/ise-display/images/standby/s-ac-off-p.png and /dev/null differ diff --git a/ise-display/images/standby/s-ac-off.png b/ise-display/images/standby/s-ac-off.png deleted file mode 100644 index 0fa577d..0000000 Binary files a/ise-display/images/standby/s-ac-off.png and /dev/null differ diff --git a/ise-display/images/standby/s-ac-on-p.png b/ise-display/images/standby/s-ac-on-p.png deleted file mode 100644 index 6d5f822..0000000 Binary files a/ise-display/images/standby/s-ac-on-p.png and /dev/null differ diff --git a/ise-display/images/standby/s-ac-on.png b/ise-display/images/standby/s-ac-on.png deleted file mode 100644 index 9607006..0000000 Binary files a/ise-display/images/standby/s-ac-on.png and /dev/null differ diff --git a/ise-display/images/standby/s-light-off-p.png b/ise-display/images/standby/s-light-off-p.png deleted file mode 100644 index ff2bbd6..0000000 Binary files a/ise-display/images/standby/s-light-off-p.png and /dev/null differ diff --git a/ise-display/images/standby/s-light-off.png b/ise-display/images/standby/s-light-off.png deleted file mode 100644 index 139e29b..0000000 Binary files a/ise-display/images/standby/s-light-off.png and /dev/null differ diff --git a/ise-display/images/standby/s-light-on-p.png b/ise-display/images/standby/s-light-on-p.png deleted file mode 100644 index 90529cc..0000000 Binary files a/ise-display/images/standby/s-light-on-p.png and /dev/null differ diff --git a/ise-display/images/standby/s-light-on.png b/ise-display/images/standby/s-light-on.png deleted file mode 100644 index 0f5c80a..0000000 Binary files a/ise-display/images/standby/s-light-on.png and /dev/null differ diff --git a/ise-display/images/standby/s-open-all-off-p.png b/ise-display/images/standby/s-open-all-off-p.png deleted file mode 100644 index 2cab491..0000000 Binary files a/ise-display/images/standby/s-open-all-off-p.png and /dev/null differ diff --git a/ise-display/images/standby/s-open-all-off.png b/ise-display/images/standby/s-open-all-off.png deleted file mode 100644 index 8309e14..0000000 Binary files a/ise-display/images/standby/s-open-all-off.png and /dev/null differ diff --git a/ise-display/images/standby/s-open-all-on-p.png b/ise-display/images/standby/s-open-all-on-p.png deleted file mode 100644 index 34cf40f..0000000 Binary files a/ise-display/images/standby/s-open-all-on-p.png and /dev/null differ diff --git a/ise-display/images/standby/s-open-all-on.png b/ise-display/images/standby/s-open-all-on.png deleted file mode 100644 index 833246f..0000000 Binary files a/ise-display/images/standby/s-open-all-on.png and /dev/null differ diff --git a/ise-display/images/standby/s-pm-off-p.png b/ise-display/images/standby/s-pm-off-p.png deleted file mode 100644 index 7f2fc06..0000000 Binary files a/ise-display/images/standby/s-pm-off-p.png and /dev/null differ diff --git a/ise-display/images/standby/s-pm-off.png b/ise-display/images/standby/s-pm-off.png deleted file mode 100644 index 44a3063..0000000 Binary files a/ise-display/images/standby/s-pm-off.png and /dev/null differ diff --git a/ise-display/images/standby/s-pm-on-p.png b/ise-display/images/standby/s-pm-on-p.png deleted file mode 100644 index be813d0..0000000 Binary files a/ise-display/images/standby/s-pm-on-p.png and /dev/null differ diff --git a/ise-display/images/standby/s-pm-on.png b/ise-display/images/standby/s-pm-on.png deleted file mode 100644 index c42ff85..0000000 Binary files a/ise-display/images/standby/s-pm-on.png and /dev/null differ diff --git a/ise-display/images/standby/toggle/Standby-toggle-off-pressed.png b/ise-display/images/standby/toggle/Standby-toggle-off-pressed.png new file mode 100644 index 0000000..f71e161 Binary files /dev/null and b/ise-display/images/standby/toggle/Standby-toggle-off-pressed.png differ diff --git a/ise-display/images/standby/toggle/Standby-toggle-off.png b/ise-display/images/standby/toggle/Standby-toggle-off.png new file mode 100644 index 0000000..c2edacd Binary files /dev/null and b/ise-display/images/standby/toggle/Standby-toggle-off.png differ diff --git a/ise-display/images/standby/toggle/Standby-toggle-on-pressed.png b/ise-display/images/standby/toggle/Standby-toggle-on-pressed.png new file mode 100644 index 0000000..3061724 Binary files /dev/null and b/ise-display/images/standby/toggle/Standby-toggle-on-pressed.png differ diff --git a/ise-display/images/standby/toggle/Standby-toggle-on.png b/ise-display/images/standby/toggle/Standby-toggle-on.png new file mode 100644 index 0000000..54d423a Binary files /dev/null and b/ise-display/images/standby/toggle/Standby-toggle-on.png differ diff --git a/ise-display/ise-display-prod.HMI b/ise-display/ise-display-v2.HMI similarity index 84% rename from ise-display/ise-display-prod.HMI rename to ise-display/ise-display-v2.HMI index c7b0d8c..5e71a9f 100644 Binary files a/ise-display/ise-display-prod.HMI and b/ise-display/ise-display-v2.HMI differ diff --git a/ise-display/ise-display-v2.tft b/ise-display/ise-display-v2.tft new file mode 100644 index 0000000..8cf3fec Binary files /dev/null and b/ise-display/ise-display-v2.tft differ diff --git a/ise-display/old-ise-display-v2.tft b/ise-display/old-ise-display-v2.tft new file mode 100644 index 0000000..f64401e Binary files /dev/null and b/ise-display/old-ise-display-v2.tft differ diff --git a/platformio.ini b/platformio.ini index c0e538c..5d21a24 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,8 +12,6 @@ platform = espressif32 board = wt32-eth01 framework = arduino -lib_deps = siwats/ESPMegaPROR3@^2.2.5 +lib_deps = siwats/ESPMegaPROR3@^2.9.4 monitor_speed = 115200 -build_flags = -DCORE_DEBUG_LEVEL=5 -upload_port = COM28 -monitor_port = COM28 \ No newline at end of file +build_flags = -DCORE_DEBUG_LEVEL=0 -DSW_VERSION='"ise-final-1.3"' -DBOARD_MODEL='"ESPMegaPRO R3.3b"' \ No newline at end of file diff --git a/src/IRcode_daikin.txt b/src/IRcode_daikin.txt new file mode 100644 index 0000000..f7aa5aa --- /dev/null +++ b/src/IRcode_daikin.txt @@ -0,0 +1,128 @@ +//dry +{5043,2130,381,1770,406,670,406,671,406,669,380,1771,381,695,407,669,406,670,407,669,380,1771,381,695,380,1771,381,1771,406,669,407,1745,380,1772,379,1772,380,1771,381,1771,406,670,380,1772,380,695,380,696,380,696,406,669,381,695,406,670,380,1771,381,695,406,670,380,1772,406,669,381,695,380,696,406,1745,380,696,380,696,405,670,407,670,406,669,380,696,407,669,380,695,381,695,380,695,381,695,381,695,380,696,407,669,380,1771,406,1745,408,1744,380,696,380,696,406,1745,381,695,380,29382,5043,2130,380,1771,407,669,380,695,407,669,381,1771,406,670,406,670,380,695,408,668,406,1745,407,669,380,1772,380,1772,406,669,406,1745,380,1772,405,1746,392,1759,407,1746,406,669,380,1772,379,696,380,696,379,697,380,696,405,670,380,696,405,1746,380,696,406,670,406,1746,379,696,406,670,404,672,405,671,406,669,380,696,379,697,379,696,406,670,379,1773,379,1772,406,670,404,672,379,696,406,1746,406,670,405,670,380,696,379,696,405,672,405,670,380,696,406,670,406,670,378,698,404,1747,405,671,404,672,378,697,405,1747,406,1745,379,1772,380,698,402,672,379,696,379,698,379,696,406,670,379,697,405,670,405,671,406,670,379,697,404,671,405,672,405,670,407,669,405,671,404,671,404,672,405,671,404,671,406,670,404,672,379,696,406,670,379,697,379,1773,378,1773,378,1773,378,1774,379,697,403,673,403,672,377,699,406,669,378,698,378,698,378,697,377,699,405,671,405,671,404,671,378,698,377,699,378,697,379,697,405,671,405,1747,406,669,379,697,405,671,405,671,378,697,405,671,405,671,378,697,405,671,405,671,382,694,379,697,406,669,380,696,378,701,375,698,380,696,406,669,379,696,380,697,404,672,405,671,378,697,405,671,378,698,377,698,379,1772,407,669,380,1772,404,1747,405,671,380,696,379,697,379,696,407} + +//fan_only auto +{5069,2104,406,1746,407,668,408,669,405,670,407,1745,407,668,381,695,381,695,406,670,380,1772,379,696,406,1745,381,1771,380,696,380,1772,379,1772,381,1770,406,1746,407,1745,380,696,406,1745,381,695,380,696,380,696,406,669,407,669,380,696,406,1746,402,673,380,696,406,1746,380,695,407,669,380,696,406,1745,406,670,407,670,379,696,406,670,380,695,407,669,406,669,408,669,406,670,380,695,380,696,407,669,380,695,405,671,407,1745,406,1746,379,1772,380,696,406,670,379,1772,380,696,380,29383,5068,2105,380,1771,407,669,380,696,406,669,380,1772,380,696,380,696,380,695,381,695,380,1771,381,696,380,1771,406,1745,381,695,381,1771,405,1747,379,1772,405,1747,380,1771,395,681,406,1745,381,695,407,669,407,669,380,696,379,696,407,669,380,1771,407,669,406,670,380,1772,406,669,381,695,406,670,380,695,381,695,407,669,407,669,380,696,406,670,380,1771,406,1746,405,670,381,696,405,670,405,1747,380,1771,406,669,408,669,407,668,407,669,380,696,380,696,380,695,380,696,381,695,380,1771,407,669,381,696,406,669,406,670,380,695,381,695,407,669,406,669,381,696,405,670,381,695,380,696,380,696,407,669,405,670,407,669,383,693,407,669,379,696,380,696,406,670,406,669,407,669,381,695,407,669,405,670,380,696,381,696,404,670,381,696,380,695,381,1771,406,1745,381,1770,408,1745,380,695,381,695,380,696,380,696,407,669,406,670,380,695,380,696,380,696,405,671,380,695,407,669,380,695,381,695,381,695,380,696,380,696,406,1745,407,669,380,696,380,696,406,669,381,695,380,696,380,695,406,670,406,670,406,670,380,696,405,670,381,695,380,696,380,696,407,669,380,695,406,670,407,669,407,669,380,695,381,696,406,669,407,669,380,696,380,695,406,1746,406,670,406,1745,406,1745,407,1745,381,695,381,1771,380,1771,407}, //AUTO +{5043,2130,380,1772,380,696,380,696,379,697,379,1771,381,695,381,696,379,696,406,670,380,1771,381,696,379,1771,381,1771,380,696,380,1771,381,1771,380,1772,380,1772,380,1771,380,696,380,1771,381,694,381,696,380,696,380,695,381,695,380,696,380,1772,380,695,380,697,379,1772,380,695,381,695,381,695,380,1772,380,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,695,381,696,380,696,380,696,379,695,381,695,381,1771,380,1771,381,1771,380,697,379,696,380,1771,381,694,381,29382,5044,2130,380,1771,380,697,379,696,380,696,380,1770,381,696,436,640,380,696,380,696,380,1770,381,695,407,1746,379,1771,381,696,380,1771,380,1772,380,1770,381,1772,380,1772,380,696,380,1771,380,696,380,696,380,696,380,697,378,695,381,696,380,1772,379,697,379,696,380,1772,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,695,381,695,380,1771,381,1772,380,695,380,696,380,696,380,1772,379,1772,380,696,380,696,380,696,379,696,380,696,380,696,380,696,379,696,381,695,380,1771,381,695,380,696,380,696,380,695,381,695,381,695,380,696,380,696,380,695,381,695,380,695,381,696,380,696,380,695,381,696,379,697,379,696,380,696,380,695,380,696,380,697,379,696,380,695,380,696,380,697,379,696,380,696,380,695,381,696,379,695,381,696,380,1771,380,1772,380,1772,379,1772,380,1772,380,696,379,1772,380,696,380,696,380,696,379,696,409,667,380,695,381,695,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,696,406,669,381,695,380,696,380,695,381,696,380,696,379,696,380,696,380,696,379,696,406,671,379,696,405,671,380,696,380,695,380,696,380,697,379,696,380,695,380,696,380,696,380,696,380,696,379,697,407,1743,407,669,380,1772,407,1744,409,668,405,1746,406,670,380,695,380}, //HIGH +{5069,2105,405,1746,381,695,380,695,381,696,407,1745,379,696,380,696,380,696,380,696,380,1771,380,697,379,1771,406,1745,407,669,381,1771,380,1772,405,1746,380,1772,380,1772,379,696,380,1772,379,696,407,669,380,695,381,696,380,696,379,696,380,1771,381,696,380,695,380,1772,380,696,380,695,405,672,379,1771,381,695,380,695,407,670,380,696,404,670,381,696,380,696,380,697,404,670,406,670,380,696,406,669,381,696,380,695,380,1771,381,1772,379,1771,381,695,381,695,407,1744,381,695,381,29381,5069,2104,380,1772,380,696,406,670,380,696,379,1772,380,695,406,670,380,696,380,696,380,1772,406,668,406,1746,381,1771,380,696,380,1772,379,1772,380,1771,381,1771,406,1746,406,670,379,1772,380,695,407,669,380,696,380,696,380,696,405,671,379,1772,380,696,380,696,406,1745,380,696,405,671,404,671,380,696,380,696,405,671,380,695,407,669,380,696,380,1771,380,1772,380,695,381,694,407,670,380,1771,381,1771,380,696,406,669,407,669,406,670,380,696,380,696,380,695,406,671,406,669,380,1771,380,696,380,696,380,696,406,670,405,671,379,697,379,697,379,695,406,670,407,669,380,696,380,696,379,696,380,696,380,695,381,695,407,670,379,696,380,696,406,669,406,670,380,696,380,696,380,696,380,695,406,671,405,670,406,669,381,696,379,697,405,670,405,1747,379,1772,405,1746,406,1746,380,1771,395,1757,380,696,380,697,379,695,407,669,380,696,405,671,380,695,380,696,380,696,406,670,406,670,405,670,380,696,408,668,404,671,381,1771,380,697,394,680,380,696,406,670,380,696,380,696,407,668,407,669,380,696,380,695,380,696,380,696,405,671,380,695,381,696,406,669,380,697,379,696,379,696,380,696,380,697,379,696,406,669,408,668,380,695,381,695,380,1772,380,696,380,1772,379,1772,406,670,405,670,381,695,380,696,380}, //MID +{5039,2131,406,1745,380,696,379,697,378,698,378,1772,380,697,379,697,379,696,379,697,404,1748,378,698,379,1771,380,1772,379,698,378,1772,380,1772,379,1773,379,1772,383,1768,380,697,379,1772,379,697,379,696,380,697,379,696,406,671,378,696,380,1773,378,697,379,698,378,1772,379,698,379,696,379,697,379,1772,380,696,379,697,379,697,406,669,380,696,379,697,379,696,380,696,380,696,379,697,379,697,379,696,379,697,380,696,379,1773,379,1772,379,1772,406,670,405,671,379,1772,380,696,380,29382,5043,2130,379,1773,405,670,380,695,381,696,379,1772,379,697,380,696,379,697,379,697,379,1772,405,671,379,1772,380,1771,380,697,379,1772,380,1772,379,1773,379,1772,379,1773,379,696,405,1746,382,694,380,696,379,696,380,696,380,696,380,695,381,1772,379,696,380,696,379,1773,379,696,380,696,380,696,405,671,379,696,380,696,380,696,406,671,378,697,379,1772,380,1772,379,696,380,696,380,696,405,1746,380,1772,379,697,379,697,379,697,379,696,380,696,379,697,379,697,379,696,380,696,379,1773,379,696,379,698,378,696,406,671,379,696,380,696,379,697,379,697,405,670,380,696,379,697,379,697,379,697,406,670,404,671,379,697,378,697,380,696,379,697,379,697,379,696,380,697,379,696,380,696,379,697,379,695,380,697,405,671,379,696,380,696,379,697,379,1773,379,1772,379,1772,380,1772,379,1773,379,696,380,696,379,697,379,697,379,696,380,696,405,671,379,697,379,696,380,696,379,697,379,697,404,672,379,696,379,698,379,696,379,1772,380,696,380,696,379,698,404,670,380,696,379,696,380,697,379,696,379,697,379,697,380,696,379,696,380,697,405,670,405,671,379,697,379,696,380,696,379,696,380,697,378,698,379,697,378,697,379,697,379,696,405,671,379,1772,380,697,379,1772,379,1772,380,696,380,1771,380,1772,379,1773,379} //LOW + + + +//cool auto + +{5043,2131,404,1747,379,697,379,697,379,695,407,1746,379,698,378,697,379,697,379,696,406,1745,380,697,380,1772,379,1772,379,697,379,1773,379,1772,379,1773,379,1772,406,1746,379,697,379,1772,380,695,381,696,405,670,406,671,379,696,380,697,379,1772,405,671,379,696,380,1771,407,670,379,696,380,696,380,1772,405,670,405,672,379,697,379,695,380,697,379,697,379,696,380,696,379,697,380,696,379,696,380,696,380,696,380,696,380,1772,379,1772,380,1772,379,696,380,697,379,1772,379,697,379,29383,5043,2130,380,1772,380,696,405,671,379,697,405,1746,380,696,380,696,405,670,406,670,380,1772,380,696,405,1746,405,1747,405,671,379,1773,405,1746,379,1773,379,1773,379,1773,379,695,380,1772,407,669,379,697,379,696,407,670,379,696,380,696,379,1773,405,671,379,695,380,1773,379,697,405,670,380,696,380,696,405,671,379,697,379,697,379,696,380,696,379,1772,380,1772,379,696,405,671,380,1772,406,1746,380,1772,379,696,380,696,379,697,379,697,379,696,380,696,380,695,381,695,380,697,405,1746,380,696,379,697,406,670,379,697,378,1773,379,697,405,670,380,696,380,696,380,696,380,696,379,696,380,696,380,696,380,695,380,696,380,696,380,697,379,696,405,670,406,671,382,693,405,671,380,695,408,1748,401,1747,379,1773,379,696,406,670,380,695,381,697,378,1773,405,1746,379,1772,380,1772,380,696,379,696,380,697,379,697,379,696,380,697,405,670,379,696,380,696,380,697,379,696,379,697,405,671,379,696,380,696,381,695,379,697,379,1772,380,696,379,696,380,697,379,696,380,696,380,696,405,670,380,697,379,697,379,696,380,696,380,695,380,696,380,697,404,671,406,671,378,697,379,696,380,696,380,696,380,696,379,697,406,669,407,669,380,696,380,696,404,1748,379,1772,380,697,378,1773,379,1772,380,697,378,696,380,696,380}, //16C +{5043,2130,405,1747,380,696,380,696,406,670,384,1767,380,696,380,695,380,702,374,697,405,1746,407,669,405,1747,406,1745,380,696,379,1773,379,1772,380,1772,379,1772,380,1772,379,697,379,1772,380,696,406,670,405,671,406,670,379,696,406,671,379,1771,406,670,380,697,406,1745,405,671,379,697,379,696,405,1747,380,696,380,696,379,696,406,670,380,696,380,696,379,697,380,695,380,696,380,696,379,697,379,697,379,696,380,696,405,1746,406,1746,380,1772,405,671,379,696,382,1770,380,696,379,29384,5042,2130,380,1772,407,670,406,669,380,696,379,1773,379,697,406,669,380,695,381,695,385,1767,406,670,380,1777,402,1744,407,669,380,1772,379,1772,401,1750,381,1771,380,1772,406,670,380,1771,380,697,379,696,406,670,379,697,379,696,380,696,405,1747,406,670,379,696,406,1746,380,696,379,697,379,696,380,696,380,696,380,695,381,695,407,669,380,696,380,1771,380,1772,380,696,380,696,379,1772,380,1772,380,1772,379,697,379,697,404,672,378,696,380,697,405,670,380,696,380,696,379,697,380,1771,380,697,381,694,380,696,380,695,380,1775,377,696,379,696,380,696,380,696,380,696,380,696,406,669,380,697,379,696,408,668,404,672,379,697,406,669,380,695,381,696,380,695,405,672,379,696,380,696,380,696,406,669,381,696,379,1772,380,696,379,697,405,670,406,1746,380,1771,406,1746,380,1771,380,696,380,697,379,696,380,696,379,697,380,695,380,697,379,696,406,670,379,697,379,696,380,696,406,670,380,696,379,697,379,697,379,697,379,1771,380,696,380,696,380,697,379,696,380,696,379,697,379,696,380,696,405,671,379,696,380,696,407,670,405,670,407,669,379,697,405,670,380,696,380,696,405,670,381,696,379,696,380,696,380,696,405,670,406,670,380,696,380,1771,381,696,379,1771,381,1772,409,1743,379,696,380,696,406,670,379}, //17C +{5069,2104,407,1745,380,696,380,696,380,695,380,1772,380,696,380,696,379,696,380,696,380,1772,380,696,379,1772,380,1771,381,696,405,1746,380,1771,381,1771,380,1772,380,1771,380,696,380,1772,380,695,406,670,408,668,380,696,380,695,380,697,406,1745,380,696,380,696,379,1772,407,669,405,671,380,695,406,1746,380,696,405,671,380,695,380,697,380,695,380,695,381,696,379,696,380,696,380,696,406,670,380,696,388,687,380,696,380,1771,381,1771,380,1772,380,696,379,697,405,1746,380,696,380,29361,5064,2130,406,1746,380,696,379,697,405,670,380,1772,380,695,380,696,380,696,380,696,380,1771,380,696,380,1771,381,1771,380,696,406,1745,381,1771,380,1771,381,1771,380,1772,380,696,406,1745,407,669,381,694,381,696,380,695,406,670,380,696,405,1746,380,696,380,696,407,1745,407,669,405,671,379,696,380,695,381,696,380,695,380,696,380,696,406,670,406,1745,380,1772,405,671,379,696,380,1771,381,1772,380,1771,380,696,406,670,384,691,381,695,380,696,380,696,380,695,381,696,379,696,380,1772,406,669,407,669,380,696,380,696,380,1772,406,669,407,669,407,669,380,696,405,671,405,670,380,696,380,696,380,695,408,668,406,669,381,695,380,697,379,696,380,696,407,669,405,671,380,695,408,668,405,1746,381,695,380,695,381,1772,380,696,406,669,380,696,380,1771,406,1746,380,1771,381,1771,406,670,380,696,406,670,405,671,380,695,381,695,407,669,379,697,405,670,380,696,406,670,380,696,407,668,380,696,407,669,405,671,405,670,381,1771,407,673,376,696,380,695,381,695,406,670,380,696,407,669,405,670,381,695,406,670,405,671,406,670,407,668,407,669,380,696,406,670,405,671,380,695,406,670,380,696,405,670,381,696,406,668,407,670,380,695,381,695,380,1772,380,1771,408,1744,407,1745,380,1771,380,696,380,696,380,695,407}, //18C +{5069,2105,380,1771,380,696,406,670,379,697,404,1747,380,696,407,669,380,696,406,670,379,1772,380,696,406,1745,380,1772,406,670,406,1745,406,1746,406,1746,379,1773,379,1772,380,696,379,1773,404,671,380,696,386,690,405,670,405,672,404,671,379,1773,379,696,407,670,379,1771,406,671,406,669,406,670,380,1773,378,696,380,696,380,696,379,697,380,696,379,696,405,670,406,671,379,697,379,696,380,696,380,696,406,670,379,696,380,1772,380,1772,380,1771,380,696,380,695,380,1773,379,697,379,29360,5065,2130,380,1773,379,697,379,697,379,696,379,1771,381,696,380,696,405,672,378,697,379,1772,379,697,379,1772,380,1772,405,672,378,1772,380,1772,380,1771,380,1772,380,1772,379,696,407,1745,380,696,380,697,404,670,380,696,380,697,379,696,379,1773,378,697,380,697,378,1772,407,670,379,697,379,697,378,697,379,697,404,672,381,694,380,696,405,670,380,1775,377,1771,380,697,379,696,380,1772,405,1746,380,1772,380,696,379,697,404,672,379,697,405,671,379,696,379,697,379,696,380,697,379,1772,379,697,379,696,380,697,406,668,380,1772,380,697,379,696,380,696,379,697,379,696,380,697,378,697,380,696,379,696,380,697,379,696,379,697,380,696,379,698,378,697,378,697,380,695,380,696,380,697,379,696,379,1773,379,697,379,1772,379,697,379,697,379,697,379,1772,379,1773,379,1773,379,1772,379,697,379,697,404,672,405,670,379,697,379,697,379,697,378,697,406,670,379,696,380,696,380,696,380,696,379,696,380,696,406,670,379,697,379,1773,379,697,404,672,378,697,379,697,379,697,379,696,380,695,380,696,380,697,379,697,379,695,380,696,380,696,380,697,380,695,379,696,380,697,379,697,379,696,380,696,379,697,379,697,379,696,380,696,407,669,379,697,379,1772,380,696,379,696,383,693,380,695,381,1772,380,695,406,670,380}, //19C +{5087,2108,380,1772,406,670,379,696,380,696,380,1772,379,697,379,697,379,696,407,669,379,1772,380,697,379,1773,378,1772,380,696,380,1771,380,1772,380,1772,379,1772,407,1745,380,695,380,1773,379,696,380,696,379,697,379,696,406,671,379,696,407,1745,405,671,379,697,379,1772,379,697,379,696,380,697,379,1772,379,697,379,697,379,697,378,697,379,697,379,696,379,696,381,696,379,697,406,669,380,697,379,697,382,693,380,695,380,1773,378,1773,379,1772,380,696,406,671,378,1772,380,697,379,29360,5065,2130,380,1773,379,696,405,670,380,697,379,1772,380,696,380,695,380,697,379,696,406,1747,378,697,379,1773,378,1773,379,697,379,1772,405,1747,379,1772,380,1772,379,1773,379,696,380,1772,379,697,378,697,406,670,379,697,379,696,380,696,380,1771,380,696,380,696,380,1772,380,696,379,697,379,696,380,696,380,696,379,697,379,697,379,697,379,696,379,1773,379,1773,404,671,379,697,379,1772,405,1747,380,1771,380,696,380,697,384,692,378,697,379,697,379,697,379,696,379,697,379,697,379,1772,379,697,379,697,379,696,380,696,380,1772,379,696,380,696,380,697,378,697,379,697,379,697,379,697,378,697,405,671,379,698,378,697,379,696,379,696,380,697,379,697,379,696,379,697,379,697,379,697,379,1772,379,1773,379,697,404,1747,379,697,379,696,379,698,404,1747,379,1773,378,1772,380,1773,379,697,433,643,379,696,379,697,379,696,380,696,379,696,380,697,379,697,379,696,379,697,405,671,379,696,380,697,383,693,404,671,379,697,379,1777,375,697,378,697,405,671,379,697,379,697,403,672,379,696,380,697,379,696,379,697,379,697,379,697,379,697,379,696,406,670,379,697,379,696,380,697,378,698,379,696,379,697,379,697,379,697,378,697,379,697,379,696,380,1772,379,1773,379,697,378,697,379,697,379,1772,380,697,379,696,380}, //20C +{5043,2130,407,1745,407,669,379,696,381,695,405,1747,380,695,406,670,406,670,380,696,406,1745,380,697,405,1745,406,1746,406,670,406,1746,405,1746,406,1745,407,1745,407,1745,390,686,380,1772,405,670,406,670,380,695,380,696,380,697,405,670,406,1745,408,668,405,670,407,1745,393,683,406,670,380,696,406,1745,380,696,406,670,405,670,381,696,379,696,380,696,406,669,408,669,406,670,379,696,380,697,379,696,406,670,405,670,384,1768,406,1746,380,1770,407,670,405,670,406,1746,380,696,405,29336,5064,2130,380,1772,406,670,405,671,395,680,380,1772,406,670,380,696,380,696,379,696,380,1772,405,671,406,1746,379,1772,379,696,380,1771,381,1772,405,1746,380,1771,380,1772,380,697,405,1745,380,696,380,696,380,696,380,696,407,669,379,696,380,1771,381,695,380,696,380,1771,380,696,380,697,379,696,380,696,405,671,379,697,379,696,380,696,406,669,380,1772,406,1746,382,694,405,671,379,1772,380,1771,381,1771,380,697,405,669,381,695,405,672,405,671,379,696,405,671,405,670,380,696,380,1771,381,696,379,695,381,696,380,695,380,1773,405,670,380,696,406,669,407,670,379,696,380,696,380,696,380,696,379,696,380,696,380,697,405,670,406,669,406,671,379,695,381,696,380,696,379,697,379,696,380,696,380,695,380,1771,381,1771,406,671,379,696,380,696,380,1771,380,1772,380,1771,380,1772,380,696,405,670,381,696,405,670,380,697,406,669,380,695,381,695,380,697,379,696,380,696,379,697,379,697,406,669,407,668,381,696,405,670,380,1772,380,696,380,696,379,697,405,670,380,696,379,697,379,696,380,696,380,696,380,696,404,672,379,697,406,669,380,695,407,670,379,696,406,670,380,695,381,696,384,692,404,671,407,669,380,695,406,671,405,670,380,696,380,1771,380,696,407,1745,380,696,379,697,405,1746,380,696,407,669,405}, //21C +{5042,2131,379,1773,378,699,377,697,402,674,379,1773,381,694,379,698,378,697,379,697,379,1772,406,670,379,1772,379,1773,379,697,379,1772,379,1773,378,1774,378,1774,378,1772,380,697,378,1773,379,698,378,697,379,697,379,697,378,698,405,670,379,1772,379,698,378,697,379,1773,378,698,378,697,379,697,379,1773,405,670,379,697,379,697,379,697,379,697,378,697,379,697,379,697,405,670,380,697,378,697,379,696,380,697,378,698,378,1774,378,1772,405,1748,378,697,379,697,378,1773,380,697,378,29362,5090,2103,381,1771,380,696,380,696,384,691,381,1771,380,696,405,671,380,696,379,696,380,1772,384,691,381,1771,406,1745,407,669,406,1746,407,1744,407,1745,406,1746,406,1745,406,669,407,1745,407,670,404,671,407,669,405,670,381,695,406,670,406,1746,405,670,380,696,380,1772,380,695,407,669,406,670,406,670,405,671,406,669,406,670,384,692,380,695,381,1770,406,1746,380,696,380,697,406,1744,407,1745,406,1746,406,670,379,696,398,678,379,698,377,698,378,697,379,697,378,698,378,698,377,1774,377,699,351,726,349,726,350,726,349,1802,349,728,348,731,344,728,348,728,347,729,371,704,372,705,372,702,373,704,373,702,373,703,373,702,374,702,373,703,373,703,374,701,374,703,373,702,373,703,373,1778,374,702,373,1778,373,1779,373,703,372,704,371,706,369,1781,371,1780,347,1805,347,1804,347,730,346,729,347,729,347,731,345,728,348,728,347,729,347,729,347,728,373,703,373,703,373,703,374,701,374,702,374,702,375,701,375,700,376,1776,376,700,376,699,377,699,377,699,377,698,378,698,377,698,384,693,377,698,378,697,405,671,389,692,374,697,404,672,404,671,404,672,404,672,403,673,403,672,378,698,404,672,403,673,403,673,377,698,403,673,403,673,403,1748,403,1749,402,1749,377,699,402,674,377,1775,401,675,376,699,376}, //22C +{5043,2131,379,1772,380,697,379,697,378,697,379,1772,380,697,378,697,379,697,379,697,379,1772,379,697,379,1772,380,1772,379,698,378,1772,406,1746,379,1772,380,1772,379,1772,380,697,379,1772,379,698,378,698,378,697,379,697,379,696,379,697,379,1772,380,696,380,697,382,1768,380,697,379,696,379,697,379,1772,380,696,406,670,380,695,380,697,379,696,380,696,379,696,380,697,379,696,379,696,381,696,379,697,379,697,379,696,379,1772,380,1773,379,1773,404,671,379,697,379,1773,378,696,380,29382,5043,2131,404,1748,379,696,380,697,379,696,405,1746,380,696,379,697,379,697,379,697,379,1772,379,697,379,1772,380,1772,379,697,379,1772,380,1772,379,1773,379,1772,379,1772,380,696,380,1772,379,697,379,696,380,697,379,697,379,695,380,697,379,1771,381,696,406,669,380,1772,379,698,378,697,379,697,379,697,379,696,379,697,379,697,379,696,380,695,380,1773,379,1771,381,695,381,696,379,1772,380,1772,379,1773,378,697,380,697,378,697,379,696,380,697,379,696,379,697,379,697,379,697,379,1772,379,697,379,697,379,697,379,697,378,1773,379,696,379,697,406,671,378,697,379,697,379,696,380,697,378,697,379,697,379,697,379,696,379,697,379,696,380,696,380,697,378,698,378,697,379,696,380,696,380,696,380,1772,379,1773,379,1773,404,671,379,696,380,697,378,1773,379,1772,380,1772,379,1772,380,695,381,696,405,671,379,697,379,696,380,696,380,696,379,697,379,696,379,697,379,698,378,697,378,697,380,697,378,697,379,697,379,697,379,1772,379,698,378,697,379,697,378,698,379,696,379,698,378,697,379,696,406,671,379,697,378,697,379,697,379,697,379,696,379,696,380,697,379,697,378,697,379,696,380,697,379,696,380,696,380,696,379,697,380,696,379,697,379,1771,380,696,380,697,379,1772,379,697,379,1772,407,670,379,696,405}, //23C +{5034,2137,375,1778,398,679,397,677,373,703,373,1780,373,703,371,703,372,706,397,705,345,1779,373,705,369,1807,344,1781,399,678,370,1781,397,1754,371,1781,380,1770,372,1808,344,706,370,1780,371,707,368,733,343,733,371,678,371,703,372,732,370,1781,370,705,346,731,369,1759,368,731,370,706,344,732,344,1808,343,732,344,707,394,707,345,731,370,680,396,705,344,732,343,706,370,733,370,679,370,706,370,733,343,731,345,731,371,1781,344,1808,342,1783,394,709,342,733,343,1808,344,732,344,29393,5032,2140,397,1781,343,709,368,732,342,734,341,1810,343,733,341,735,343,733,367,710,340,1839,311,735,344,1781,369,1810,342,733,370,1783,365,1785,343,1811,341,1809,336,1789,368,735,341,1809,342,734,341,737,367,708,368,708,341,735,342,732,369,1784,341,734,340,736,342,1810,339,737,368,706,343,734,342,732,342,735,343,733,342,734,340,735,342,735,342,1808,343,1808,370,710,341,704,372,1807,342,1810,371,1780,345,704,371,732,343,733,344,731,345,731,342,734,371,677,372,731,343,733,370,1754,398,679,371,703,372,704,372,704,373,1778,372,703,374,703,399,676,373,704,397,678,372,703,403,673,374,702,400,675,399,677,400,676,400,675,399,677,401,675,427,649,374,701,401,675,401,674,402,675,402,1750,401,1750,401,1751,404,1747,403,674,401,673,376,700,402,1750,401,1750,375,1777,375,1777,374,701,375,701,403,673,402,673,402,674,404,672,376,700,403,673,403,672,403,673,405,671,403,672,406,670,377,699,376,699,404,672,377,699,433,1719,404,672,403,673,375,700,404,672,404,672,406,670,402,673,405,671,405,671,403,672,433,643,430,647,402,673,406,669,406,671,404,671,406,670,406,670,404,671,379,698,433,642,403,673,402,674,377,698,378,698,404,672,403,1748,406,1746,403,673,406,1745,377,700,377,1774,406,670,377,698,405}, //24C +{5069,2103,406,1746,406,669,407,669,407,669,380,1772,407,668,381,696,380,695,380,696,380,1771,406,670,381,1771,406,1745,380,696,385,1767,380,1771,381,1771,406,1745,381,1771,407,669,406,1745,380,696,406,670,380,696,406,670,406,670,381,694,407,1745,400,676,405,671,405,1746,380,696,380,695,407,670,379,1772,407,668,381,696,379,696,407,670,406,669,380,696,380,696,406,672,402,671,384,692,407,669,382,694,405,670,406,669,407,1745,406,1746,380,1772,405,670,406,670,380,1772,380,695,380,29383,5043,2130,407,1744,406,671,379,696,407,668,381,1772,380,696,379,697,406,669,380,696,380,1772,405,670,406,1746,405,1747,379,697,404,1746,406,1746,380,1772,380,1771,380,1772,380,696,380,1771,406,671,405,671,379,695,380,697,379,697,405,670,380,1772,379,696,380,697,404,1747,380,695,380,696,406,670,380,696,405,671,407,669,405,670,380,695,380,696,380,1772,405,1747,405,671,406,669,380,1772,406,1750,375,1772,406,670,405,670,380,696,406,670,380,696,380,695,380,697,379,696,380,696,406,1746,405,670,407,670,379,696,406,669,380,1772,380,696,406,671,404,670,380,696,380,696,380,696,386,690,379,696,407,670,405,670,380,695,406,670,380,696,396,680,380,696,380,696,405,671,405,670,380,696,380,696,405,670,380,696,380,696,380,1771,380,696,380,696,405,1747,379,1772,380,1771,407,1745,380,696,380,696,380,696,407,668,407,669,380,696,406,670,405,670,380,696,380,696,380,696,406,673,402,670,380,696,405,671,406,670,380,695,380,1772,406,670,405,671,380,695,380,696,380,696,405,671,379,697,407,668,380,696,393,683,380,695,380,697,379,696,380,696,380,696,379,697,379,696,380,696,380,695,380,697,379,696,380,696,380,696,379,697,379,696,380,696,380,1772,380,695,406,1746,380,1771,380,697,379,1772,380,696,379,697,379}, //2C5C +{5043,2131,380,1772,379,696,380,696,379,698,378,1772,380,696,380,696,379,697,379,696,380,1772,379,697,379,1773,379,1772,380,696,379,1772,388,1763,381,1771,380,1772,379,1773,379,697,379,1772,379,697,405,670,380,696,380,696,405,671,380,696,383,1768,380,696,380,696,379,1772,380,696,379,697,379,697,379,1772,407,669,380,696,379,696,380,696,407,670,378,697,379,697,380,695,379,697,379,697,379,697,405,671,379,697,379,696,379,1773,379,1772,379,1773,379,696,380,697,379,1772,379,697,379,29383,5043,2130,380,1771,380,696,379,697,379,697,379,1772,380,696,379,697,380,696,379,697,379,1772,379,696,380,1772,380,1772,379,697,379,1772,379,1773,380,1771,380,1772,380,1771,381,695,379,1772,406,670,380,696,380,695,380,697,379,697,379,697,403,1748,379,697,380,696,406,1745,378,698,380,696,379,696,380,697,404,670,381,696,379,697,379,696,380,696,379,1772,380,1772,380,696,379,697,379,1772,407,1745,380,1771,380,696,406,669,407,669,381,695,380,695,381,696,405,671,379,696,380,696,406,1746,380,695,406,671,379,695,381,695,381,1771,381,695,380,695,380,697,380,695,380,696,380,696,380,695,381,695,380,696,380,696,406,670,380,695,407,669,381,695,402,674,380,696,406,669,381,696,405,670,380,1771,406,669,382,695,406,670,380,1771,381,695,380,695,407,1745,380,1771,407,1745,406,1746,380,695,381,695,406,670,406,669,381,696,406,669,380,696,407,669,406,669,407,669,406,670,407,669,405,670,381,695,406,670,407,669,406,670,406,1745,406,670,379,697,380,695,381,695,406,670,380,696,393,682,380,696,380,696,380,696,380,696,404,671,380,696,382,694,379,697,379,696,380,696,405,671,379,697,379,696,380,696,379,697,378,698,377,699,378,698,377,699,376,1775,350,1802,350,1801,350,1801,350,726,349,1803,349,727,374,702,372}, //26C +{5039,2132,379,1772,379,697,379,696,379,697,379,1772,379,697,379,697,379,696,380,696,379,1773,379,697,379,1772,379,1772,380,697,379,1772,379,1773,379,1772,379,1773,379,1772,380,696,380,1772,379,696,380,696,380,696,380,696,380,696,379,696,380,1772,379,697,379,697,379,1772,380,696,379,697,379,697,379,1772,380,696,379,696,380,696,379,697,380,695,380,696,380,696,379,696,380,696,380,696,380,695,381,696,379,696,380,696,379,1772,380,1771,380,1772,380,696,379,697,379,1772,379,697,379,29381,5042,2131,379,1773,378,697,433,643,432,644,378,1773,432,644,433,642,434,643,431,644,379,1772,435,641,433,1719,432,1719,433,643,434,1717,433,1719,433,1718,379,1773,433,1718,378,698,378,1773,379,698,432,644,431,644,432,644,433,643,433,642,433,1718,432,644,432,644,432,1719,433,643,433,643,432,644,434,642,433,642,432,644,434,642,431,645,433,643,401,1749,434,1718,432,644,430,646,432,1719,378,1773,432,1720,433,642,432,644,433,643,433,643,432,644,433,643,431,644,378,698,432,644,432,1719,432,643,462,614,379,697,433,643,433,1718,434,642,378,698,433,643,432,643,433,643,433,643,432,644,431,644,433,643,433,643,378,698,431,645,433,642,378,698,432,644,432,643,432,645,432,643,433,642,404,673,432,1719,433,643,432,643,432,1719,434,643,432,644,432,1719,378,1773,379,1773,378,1773,379,697,433,643,434,642,431,644,432,644,433,643,433,642,430,646,379,697,432,644,432,643,434,642,433,643,432,644,432,643,434,642,431,644,433,1719,433,643,378,699,431,644,432,643,433,644,429,645,434,642,432,644,433,643,433,643,431,645,434,641,432,644,431,645,378,698,432,643,433,642,434,642,433,643,379,697,433,642,434,643,432,643,432,644,431,645,431,645,431,1720,432,643,433,643,433,643,431,1720,379,1773,433,643,431,645,430}, //27C +{5043,2130,405,1746,381,695,380,696,380,696,380,1771,380,697,379,696,380,696,380,695,380,1772,380,696,405,1747,379,1772,380,695,381,1771,406,1745,381,1772,379,1772,380,1771,380,697,379,1772,380,695,381,696,379,696,409,668,379,696,380,695,407,1745,405,672,379,696,380,1771,380,696,380,696,380,695,381,1771,380,697,404,671,380,696,380,695,380,696,380,695,381,696,380,696,379,696,380,696,380,695,381,695,380,697,379,696,380,1771,381,1771,380,1772,379,697,379,696,380,1771,381,696,405,29356,5044,2130,380,1771,381,695,380,695,381,696,380,1772,405,670,380,695,381,696,379,696,380,1771,435,642,380,1771,380,1772,380,696,379,1772,380,1771,381,1772,404,1746,381,1772,380,696,379,1772,380,696,380,696,379,696,380,695,381,696,380,695,381,1771,380,696,380,695,406,1745,381,696,380,695,381,696,379,696,380,696,380,696,380,696,379,697,379,695,381,1772,380,1771,380,696,380,696,380,1772,379,1772,380,1771,380,697,379,696,380,695,381,695,406,670,407,669,380,696,380,696,380,695,380,1772,380,695,381,696,379,697,379,696,380,1772,380,696,380,695,380,696,380,697,379,695,380,697,379,696,380,695,408,669,380,696,379,696,380,696,380,696,379,697,379,696,380,696,380,696,380,696,379,696,380,1771,381,1771,380,697,379,696,380,1771,380,696,406,670,380,1771,380,1772,380,1772,380,1771,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,695,380,696,380,696,380,696,380,695,381,696,379,696,380,696,380,696,380,695,380,1771,381,696,406,669,380,697,379,696,380,696,380,695,381,696,379,696,380,696,407,669,380,696,380,695,380,696,405,671,380,696,435,640,380,695,381,696,380,695,380,696,380,696,380,696,406,669,381,695,380,697,379,696,380,1771,380,1772,380,696,432,644,380,1770,381,1771,381,694,381,696,380}, //28C +{5070,2104,407,1745,379,696,379,697,379,697,378,1774,378,698,378,696,407,671,377,697,434,1719,378,697,379,1773,379,1772,378,698,379,1773,378,1773,379,1772,379,1773,379,1772,379,698,378,1773,379,697,379,697,378,698,378,697,379,697,379,697,378,1773,380,696,378,699,378,1772,379,697,379,697,379,697,379,1772,379,697,379,697,378,697,379,698,378,697,378,698,378,697,379,697,379,697,379,697,379,696,380,697,379,697,378,696,380,1772,380,1772,405,1746,406,670,380,696,380,1772,406,669,380,29383,5042,2131,379,1772,380,696,405,671,380,695,381,1771,380,696,380,696,379,696,406,670,380,1772,405,670,381,1771,406,1746,380,695,380,1772,380,1772,405,1746,380,1771,380,1772,380,695,381,1771,380,697,378,697,380,696,379,696,381,696,379,696,380,1771,381,696,379,696,380,1772,379,697,379,696,380,696,406,670,380,696,379,696,380,696,380,696,379,697,406,1745,380,1771,380,697,379,700,376,1772,380,1771,380,1772,406,670,380,696,379,696,380,696,380,696,406,669,381,696,379,696,407,669,380,1771,381,695,380,696,379,697,380,696,379,1772,380,696,380,696,380,696,379,696,380,696,380,696,380,696,380,695,380,696,380,696,380,695,380,697,379,696,380,696,380,696,380,696,379,696,380,696,380,696,380,696,380,696,379,1772,380,695,380,1772,380,696,380,696,379,1772,380,1772,380,1772,379,1772,380,696,405,671,405,670,406,670,380,696,380,696,379,699,404,669,380,695,380,697,380,695,381,695,407,670,379,696,379,696,380,696,380,696,380,1772,379,697,379,696,380,696,380,696,380,695,407,670,379,697,379,696,380,696,380,696,379,696,380,696,380,696,379,696,380,697,379,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,381,695,380,696,380,696,379,1772,380,696,380,1771,380,697,379,1772,380,1771,380,697,379,696,380}, //29C +{5042,2131,384,1768,405,670,380,695,381,696,380,1771,380,696,406,669,380,697,405,670,406,1745,406,671,379,1771,381,1772,380,696,380,1770,407,1745,407,1745,406,1746,380,1771,407,669,380,1772,380,696,405,670,383,693,380,696,405,670,406,670,406,1746,380,696,405,671,379,1771,407,670,407,669,405,670,380,1771,381,696,380,695,380,696,380,695,381,696,406,670,379,696,380,695,381,696,380,696,405,670,405,672,379,696,380,696,405,1746,380,1772,379,1773,379,697,379,696,406,1746,405,671,406,29355,5044,2129,381,1771,406,670,405,671,380,695,380,1771,381,695,381,695,380,697,388,687,380,1771,381,696,379,1771,381,1771,380,696,380,1772,380,1771,380,1772,380,1771,406,1746,407,669,380,1772,380,696,379,697,379,696,380,696,379,696,407,669,380,1772,403,672,380,696,380,1771,380,695,407,670,380,696,380,696,405,670,381,696,379,696,382,694,405,671,406,1745,380,1772,405,670,381,695,407,1745,406,1746,405,1745,381,696,380,696,379,697,380,695,406,670,380,695,406,670,380,696,380,696,380,1772,379,697,379,696,407,669,380,696,379,1772,380,696,380,696,380,695,406,670,380,695,381,695,381,696,379,697,406,669,380,696,407,669,379,696,380,696,380,696,380,695,406,671,379,697,383,691,381,696,380,1771,380,697,379,1772,384,692,406,1744,381,695,408,668,380,1772,405,1746,381,1771,380,1772,379,697,379,697,379,697,379,696,380,696,379,696,380,696,380,696,380,695,407,669,380,697,406,670,379,696,405,671,379,696,380,696,380,697,379,1772,405,671,406,669,380,696,380,695,381,695,380,696,380,696,380,696,380,695,380,696,380,696,380,696,379,696,380,697,379,696,380,696,380,696,379,695,381,696,380,696,380,696,407,669,379,696,380,696,380,696,380,696,407,1744,380,1772,380,1772,379,696,405,1746,380,1772,405,672,379,700,375}, //30C +{5043,2131,379,1772,380,696,379,697,406,670,379,1773,379,696,379,696,380,696,380,696,380,1771,380,697,379,1771,381,1771,380,696,380,1772,405,1746,380,1771,407,1746,381,1770,406,670,379,1772,406,670,380,696,380,696,379,697,379,696,380,697,405,1746,379,697,379,697,404,1747,379,697,379,697,379,696,380,1772,379,697,379,697,405,669,381,696,379,697,379,697,379,696,380,696,380,695,380,697,379,697,405,670,380,696,379,697,379,1772,380,1772,379,1772,380,696,379,698,378,1773,379,697,378,29383,5042,2131,380,1771,380,697,379,696,380,696,380,1772,379,696,380,696,403,674,378,697,379,1772,380,696,380,1772,379,1773,379,696,380,1772,379,1773,379,1772,379,1772,380,1773,378,696,380,1772,380,697,378,696,406,671,379,696,380,696,380,695,380,1772,380,696,380,696,380,1771,405,671,380,696,380,696,405,671,379,696,405,671,380,696,379,697,379,697,379,1773,379,1772,381,695,379,696,406,1746,379,1772,380,1772,379,697,379,696,380,697,378,697,379,696,380,696,380,696,379,696,407,669,405,1747,380,696,380,696,379,696,380,697,379,1772,407,668,404,672,380,696,380,696,380,696,379,697,379,697,379,697,379,696,379,696,380,697,379,697,379,697,378,697,379,697,379,696,405,672,378,697,379,697,406,670,379,1771,380,1773,405,671,379,1772,379,697,379,696,380,1773,378,1773,379,1772,379,1773,379,696,380,696,380,696,379,697,380,695,380,696,395,681,379,697,379,698,378,697,379,696,379,697,380,696,379,696,380,696,406,670,379,697,379,1772,406,670,379,697,379,697,379,696,379,697,380,695,380,697,379,696,380,695,381,696,405,671,379,696,380,696,380,695,380,697,379,696,380,696,380,696,380,696,379,696,380,696,379,697,380,696,379,696,380,696,380,696,380,1772,379,696,380,696,380,1772,379,1773,405,1746,379,696,380,696,380}, //31C +{5043,2131,379,1772,380,696,405,671,405,670,380,1772,380,696,379,697,405,670,380,696,407,1744,380,697,379,1772,406,1746,406,669,405,1747,405,1746,407,1745,380,1771,407,1744,381,696,380,1772,379,697,379,695,408,669,406,669,380,696,380,696,380,1772,380,695,380,696,380,1772,405,670,380,696,380,696,380,1771,406,671,405,670,406,670,380,696,405,670,406,670,407,669,380,696,405,671,379,697,405,670,380,696,380,696,404,672,379,1772,406,1745,406,1746,406,671,404,671,406,1745,407,669,405,29356,5044,2130,380,1771,407,670,405,670,380,696,380,1772,380,696,379,696,407,670,379,695,381,1772,380,695,406,1746,406,1745,380,696,380,1771,407,1745,380,1772,380,1771,406,1746,405,671,380,1771,406,670,409,667,380,695,380,696,380,697,379,696,380,1771,380,697,379,696,380,1772,380,696,379,697,379,697,379,696,380,695,406,670,406,670,380,696,406,669,381,1771,380,1772,379,697,405,670,407,1745,380,1771,406,1746,380,696,379,696,407,670,379,695,381,695,380,697,379,697,379,696,380,696,405,1747,406,669,380,696,380,696,405,670,380,1771,381,696,380,696,405,670,380,697,379,697,379,696,388,688,379,696,380,696,380,695,381,696,379,696,405,672,406,668,407,670,379,696,380,696,408,667,381,696,405,1746,406,1745,406,1747,379,696,380,1772,379,697,405,670,380,1772,405,1746,380,1771,381,1771,406,671,379,696,380,696,379,696,380,696,380,696,405,671,379,697,379,697,379,696,380,696,380,696,379,696,380,696,380,697,379,696,379,697,406,1745,380,696,380,696,380,695,380,697,379,696,380,696,405,670,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,696,379,697,379,696,380,695,381,695,380,697,405,669,381,696,380,696,379,696,380,696,380,696,380,1772,379,1773,379,695,389,1764,405,1746,406,1745,407,670,379,696,380} //32C + + + +//cool low + +{5070,2104,380,1771,380,695,407,670,380,696,380,1772,406,668,381,696,380,696,380,695,380,1772,405,670,381,1772,379,1772,407,669,406,1745,380,1772,380,1771,380,1772,380,1771,406,671,406,1745,380,695,407,670,379,696,380,696,406,670,380,695,407,1745,405,671,380,695,407,1744,381,696,380,696,406,670,380,1771,380,696,405,671,405,671,405,670,380,696,380,696,380,696,406,670,405,670,405,671,405,671,379,696,380,696,380,696,380,1771,407,1745,407,1745,405,670,407,669,380,1771,408,668,381,29359,5066,2130,380,1771,380,697,378,696,381,696,380,1771,380,696,379,696,381,696,379,696,380,1772,405,671,379,1772,406,1746,380,696,407,1744,380,1772,379,1772,380,1772,379,1772,380,696,380,1772,379,697,379,696,379,697,380,696,379,697,405,670,380,1771,380,697,379,696,380,1772,380,696,379,696,380,696,379,697,406,670,379,697,405,670,380,696,380,697,379,1772,379,1773,379,696,379,697,379,1772,406,1746,405,1746,380,695,381,696,406,669,380,696,380,695,384,692,381,696,379,696,405,671,406,1746,379,696,380,696,406,670,380,697,405,1746,379,695,381,696,379,697,379,696,380,696,380,696,379,697,405,670,380,697,379,696,380,696,379,697,379,696,406,670,380,696,380,696,379,696,405,671,405,671,379,1772,406,1746,380,1771,406,670,380,696,406,670,379,696,380,1771,381,1772,406,1745,406,1746,406,1745,380,696,380,697,379,696,379,697,379,697,379,696,380,697,379,695,380,697,406,670,379,696,379,697,379,695,381,696,405,671,379,697,379,1773,379,697,379,696,380,695,407,669,380,697,379,696,380,696,379,696,380,697,379,696,380,695,381,696,379,696,380,696,380,696,380,696,379,696,380,696,380,696,405,671,380,695,380,696,380,696,379,696,380,695,381,696,380,1772,379,1772,380,696,407,1745,379,697,386,1765,380,696,379,696,380}, //16C +{5043,2131,379,1773,379,696,380,695,381,696,379,1771,381,696,380,696,379,696,380,696,380,1772,380,696,379,1772,380,1772,379,697,379,1772,380,1772,379,1772,380,1771,380,1772,405,671,380,1771,406,670,380,697,379,696,380,696,379,697,379,697,379,1773,379,696,379,696,380,1772,379,697,379,697,405,670,379,1773,379,697,378,698,379,696,380,695,380,697,379,696,380,696,380,696,380,696,379,696,380,696,380,696,379,697,379,696,380,1772,379,1772,380,1772,380,696,380,696,379,1772,406,671,378,29383,5043,2130,380,1772,379,697,379,696,380,697,379,1771,380,696,380,697,379,696,379,697,379,1772,380,695,381,1772,379,1773,379,697,378,1772,380,1772,380,1771,380,1772,379,1772,380,696,380,1772,405,671,380,696,379,697,379,696,404,672,380,694,381,1772,380,696,380,695,381,1771,380,696,380,697,378,696,380,697,379,696,380,696,379,696,380,697,379,696,406,1745,380,1772,380,696,380,696,379,1772,380,1772,380,1771,380,695,381,696,380,696,379,697,379,697,379,696,380,695,381,696,379,697,379,1771,380,696,405,671,380,696,380,696,380,1771,406,671,379,695,381,696,379,696,380,696,380,696,380,696,380,696,379,696,380,696,380,696,379,698,378,697,379,696,380,696,380,696,405,670,380,696,380,696,380,696,379,697,379,697,405,1746,380,695,380,697,379,697,379,1771,380,1772,380,1772,379,1773,386,1765,405,671,379,697,379,696,380,696,380,696,379,697,379,696,380,696,380,696,379,697,405,671,379,696,380,696,379,697,379,696,406,670,379,1773,379,697,379,697,379,697,379,696,380,696,379,697,379,696,405,672,378,697,406,670,379,695,381,696,380,696,380,695,380,697,406,669,380,696,380,695,380,697,379,697,378,696,381,695,406,670,380,696,380,696,380,696,380,1771,406,670,405,1746,380,1772,380,696,382,1769,380,696,406,670,380}, //17C +{5043,2131,379,1773,379,697,379,696,405,672,378,1773,405,671,379,696,380,696,379,696,380,1772,380,697,379,1771,380,1773,379,696,379,1772,380,1772,380,1772,379,1772,380,1771,380,697,379,1772,380,696,379,697,379,697,379,696,379,697,379,697,379,1772,379,696,380,696,380,1773,378,697,379,696,380,697,379,1772,380,695,380,697,379,697,379,696,380,696,379,697,379,697,379,697,378,697,379,696,380,697,379,696,380,697,379,696,379,1772,405,1748,380,1771,379,697,378,697,380,1771,380,697,379,29382,5043,2130,380,1773,378,697,379,697,404,670,380,1773,379,696,406,671,378,697,379,697,379,1772,380,696,379,1773,379,1773,379,696,380,1771,380,1773,378,1773,379,1772,405,1746,380,696,379,1774,379,695,380,696,380,696,380,696,379,698,378,696,380,1773,379,697,378,696,406,1746,380,696,380,696,379,697,379,697,379,697,379,696,379,697,379,696,380,696,379,1773,379,1774,378,696,379,697,379,1772,379,1774,378,1773,379,697,379,696,379,697,379,696,380,697,379,696,379,697,379,697,378,697,380,1772,379,697,379,696,380,696,379,698,378,1773,406,670,378,697,379,697,379,697,378,697,380,696,379,697,405,670,380,696,379,697,380,696,379,696,380,697,379,697,378,697,379,697,379,697,379,695,380,698,378,1773,379,696,380,696,379,1773,379,697,379,696,380,697,378,1772,380,1772,379,1772,379,1773,380,1772,378,698,379,696,380,696,379,697,379,696,380,697,379,696,379,697,379,697,379,696,406,670,379,696,380,697,405,671,378,697,379,696,380,1772,379,697,384,692,379,697,379,696,380,697,378,702,374,697,379,697,379,696,379,698,378,696,380,697,379,696,379,697,380,695,379,698,379,697,379,696,380,695,380,697,379,697,378,698,378,697,379,697,379,697,378,697,379,1773,379,1772,379,1773,379,1772,379,697,380,1771,380,697,379,697,378}, //18C +{5068,2105,381,1770,381,695,406,670,410,666,380,1771,407,669,380,696,407,669,404,672,380,1771,380,696,379,1772,406,1745,408,669,380,1771,380,1771,381,1771,406,1746,407,1744,405,672,379,1772,405,670,407,670,379,696,407,669,380,696,380,695,406,1746,406,670,380,695,381,1771,405,670,381,695,407,669,380,1772,380,696,380,696,407,668,406,670,380,696,405,670,380,697,406,669,380,696,406,670,380,695,405,671,407,669,380,696,401,1750,380,1771,407,1745,380,696,380,696,380,1771,380,696,380,29382,5043,2131,405,1745,408,669,380,695,380,696,380,1772,380,695,380,696,406,670,380,695,381,1772,405,670,380,1771,380,1772,380,695,381,1771,407,1745,380,1771,407,1745,380,1771,380,696,381,1771,379,697,380,695,380,696,380,696,380,696,379,696,381,1771,380,696,379,696,406,1746,406,670,379,697,380,696,379,696,407,669,406,670,382,693,405,671,380,696,380,1775,376,1772,407,669,406,669,381,1771,380,1772,405,1746,380,696,406,670,380,696,380,695,380,696,405,671,380,696,406,669,380,696,407,1744,380,696,380,696,380,695,409,668,380,1771,406,670,406,670,380,696,380,695,407,669,380,695,381,695,406,670,406,670,405,671,407,669,405,671,379,696,380,696,380,696,379,697,406,669,380,696,380,696,380,696,406,1744,407,670,380,1771,406,671,379,696,406,670,406,1745,380,1771,406,1746,407,1745,380,1771,381,698,377,696,380,695,380,696,381,696,379,696,380,696,380,696,406,669,380,696,380,696,380,696,380,696,379,696,407,668,381,696,380,1771,380,695,380,697,405,670,380,697,379,696,380,696,380,696,379,697,379,695,381,696,380,695,408,668,380,696,380,696,380,695,406,670,380,696,380,696,380,695,380,696,407,669,407,669,380,695,407,669,380,696,406,670,380,1771,406,670,380,695,407,670,380,1771,406,1745,381,695,381,695,380}, //19C +{5069,2104,380,1772,380,695,405,671,380,696,380,1771,380,696,380,696,406,670,380,695,406,1746,380,696,406,1745,407,1744,406,671,405,1746,406,1745,407,1745,405,1747,405,1747,379,696,407,1744,404,673,379,696,406,670,380,696,405,671,379,696,380,1772,380,695,407,669,398,1754,380,696,379,696,380,696,406,1745,406,670,407,670,379,696,380,695,381,696,379,696,407,669,406,670,405,671,379,696,380,696,380,696,380,695,381,696,406,1745,380,1771,380,1773,379,696,406,669,380,1772,381,695,380,29382,5043,2131,406,1745,405,670,380,696,380,696,407,1744,380,696,406,670,380,696,379,697,379,1772,380,696,380,1771,380,1773,379,695,381,1771,405,1746,406,1746,380,1772,380,1772,379,697,379,1772,380,696,379,697,379,696,380,696,406,671,378,696,380,1772,380,696,380,695,406,1746,379,696,381,696,379,696,380,696,406,670,405,670,407,670,405,670,406,669,407,1744,381,1772,380,696,410,665,380,1772,380,1771,380,1772,380,696,405,670,380,696,380,696,380,696,379,697,406,669,380,696,406,670,405,1746,380,696,407,669,380,696,379,696,380,1772,380,696,405,671,379,696,380,696,380,696,380,696,379,696,406,671,379,696,380,696,380,696,405,670,380,696,380,696,380,695,380,696,380,696,380,696,380,696,379,1773,379,1771,408,668,380,1771,381,696,406,670,379,696,380,1772,379,1772,406,1746,379,1772,406,1746,380,696,380,695,380,697,379,696,405,671,380,696,379,696,380,696,405,671,380,695,380,696,380,696,406,670,380,696,379,696,406,670,380,1771,405,672,379,696,380,696,380,696,380,696,379,697,379,696,406,670,380,696,379,697,379,696,380,697,404,670,380,697,379,696,380,696,379,697,405,670,380,696,380,696,406,670,380,696,379,696,380,696,380,695,406,670,380,1772,380,1772,379,697,379,696,380,1771,380,1772,406,670,406,670,406}, //20C +{5044,2129,380,1772,405,671,380,695,406,669,407,1745,408,669,379,696,406,669,381,695,408,1744,381,695,407,1744,381,1771,380,696,380,1771,381,1771,380,1772,379,1772,406,1745,407,669,381,1771,406,669,381,696,407,668,380,696,407,668,407,670,380,1771,380,696,380,695,407,1745,380,696,380,696,379,697,407,1744,380,696,380,695,381,695,380,696,406,670,380,695,407,669,381,695,407,669,406,670,380,695,381,695,407,669,381,695,380,1771,381,1771,408,1744,379,696,407,669,380,1771,407,669,381,29381,5044,2129,380,1772,380,696,380,696,379,697,379,1772,380,696,404,671,381,695,380,696,380,1771,381,695,405,1747,380,1772,379,696,380,1772,406,1745,380,1772,380,1772,380,1771,380,696,406,1745,406,669,381,696,379,696,380,696,380,696,380,695,381,1771,406,670,380,696,380,1771,407,669,406,670,380,696,380,696,380,695,407,669,380,696,380,696,406,670,407,1744,407,1744,382,694,380,696,405,1746,380,1772,406,1746,380,695,380,696,380,696,380,696,380,695,380,696,404,672,380,696,380,696,406,1745,380,695,381,696,406,670,379,696,380,1771,380,697,379,696,380,696,380,695,381,695,406,671,379,695,381,696,380,695,405,671,380,696,406,670,380,695,380,697,379,696,380,696,406,669,380,696,380,696,406,670,406,669,380,1772,380,1771,381,695,380,697,379,696,379,1772,381,1770,408,1744,381,1771,380,1771,380,696,380,696,380,696,406,670,380,695,380,696,380,696,406,669,380,697,379,696,380,696,380,696,379,697,405,670,380,696,380,696,380,1771,380,696,407,669,406,670,405,671,407,668,380,696,380,696,380,695,380,696,380,696,406,670,380,695,380,696,380,696,405,671,406,669,380,696,380,696,380,696,380,695,380,697,405,670,406,670,379,696,381,695,407,670,379,1771,381,695,381,1771,406,670,380,1772,379,1772,380,695,407,669,380}, //21C +{5092,2104,380,1771,380,696,380,696,380,696,404,1747,380,696,405,671,379,696,381,695,407,1744,381,696,379,1772,407,1744,381,695,406,1746,380,1771,381,1771,380,1771,407,1745,380,696,380,1771,381,695,407,669,406,670,380,696,404,671,380,696,380,1771,381,696,379,696,380,1772,380,695,382,694,380,696,406,1746,380,698,377,696,407,669,406,669,381,696,380,696,379,696,380,696,380,696,379,696,407,670,406,669,380,696,380,695,380,1772,380,1771,381,1771,380,696,380,696,411,1740,380,696,380,29382,5043,2130,380,1771,380,696,380,696,379,696,407,1745,406,669,381,695,381,695,407,669,380,1772,379,697,379,1772,406,1746,379,696,380,1772,380,1771,380,1772,380,1771,381,1771,380,696,405,1746,380,696,380,696,406,670,406,669,406,670,381,695,380,1772,380,696,379,696,380,1772,379,697,406,669,407,669,406,670,406,670,379,697,379,696,406,670,380,696,379,1772,380,1772,406,670,380,695,406,1746,380,1771,406,1745,381,696,379,696,380,696,380,696,380,695,381,695,380,696,405,671,380,696,379,1772,406,670,380,696,380,695,381,695,380,1772,407,669,380,695,380,696,380,696,380,696,406,669,380,696,380,696,380,695,381,695,380,696,406,670,380,695,408,668,380,696,380,696,380,696,380,696,380,696,379,1771,381,696,379,1772,405,1747,380,696,380,695,407,669,380,1771,380,1772,380,1771,385,1767,407,1745,379,696,380,697,404,671,380,695,381,695,380,696,380,696,380,696,380,696,379,696,380,696,380,696,380,695,407,670,379,696,406,670,380,1772,379,696,380,696,380,695,380,696,380,696,395,680,381,696,379,696,380,696,380,696,406,670,379,697,379,696,380,696,380,695,380,697,379,697,379,696,380,696,379,697,379,696,380,696,380,696,380,696,380,695,380,696,380,1772,379,1772,380,1772,407,668,408,1744,380,1772,404,671,380,696,380}, //22C +{5042,2131,379,1772,406,671,379,696,405,671,380,1772,405,670,406,671,379,696,379,697,405,1746,380,696,379,1772,380,1772,379,697,379,1772,380,1772,379,1773,379,1772,379,1772,380,696,380,1772,406,670,379,697,379,696,405,671,379,697,379,697,379,1772,379,696,406,671,379,1772,380,695,380,698,378,697,379,1772,379,697,379,696,379,698,378,697,379,698,378,697,379,696,380,696,379,697,379,696,380,696,380,697,379,695,380,696,380,1772,379,1773,379,1772,379,697,379,697,379,1772,379,697,379,29359,5067,2130,406,1745,380,696,380,697,379,696,379,1773,379,696,380,697,378,697,379,696,380,1772,379,696,380,1772,379,1772,380,696,380,1772,379,1773,379,1772,379,1773,379,1771,381,695,380,1772,380,697,378,697,379,697,379,696,406,670,380,696,379,1773,379,696,380,696,380,1772,405,671,379,696,380,696,379,696,380,697,379,696,380,697,378,697,379,697,378,1773,380,1772,379,696,380,697,378,1772,380,1771,380,1773,379,696,380,697,379,697,378,697,379,696,379,696,381,696,379,697,379,697,379,1772,379,696,381,696,379,696,380,696,379,1772,380,696,380,695,380,697,379,697,405,671,379,696,405,671,379,697,379,696,380,696,379,697,379,697,379,697,379,696,380,696,379,697,379,697,379,696,380,696,379,697,406,1746,378,1772,380,1772,379,697,379,697,379,697,379,1772,379,1772,380,1772,379,1773,405,1747,379,696,379,697,379,697,379,697,379,697,378,696,380,697,379,696,379,697,379,697,406,669,406,671,379,696,379,697,379,697,379,696,380,1772,379,697,379,697,379,697,379,696,379,697,379,697,379,697,379,696,379,697,405,671,379,696,379,697,379,697,379,696,380,696,405,671,380,696,379,697,379,696,380,696,380,696,379,697,379,696,380,696,380,696,380,695,380,1772,380,696,380,696,379,1772,380,1772,379,1772,380,696,380,696,379}, //23C +{5068,2104,381,1771,407,669,380,696,406,670,379,1772,380,696,406,670,380,694,382,696,405,1745,406,671,380,1771,380,1772,405,671,405,1746,380,1771,380,1772,380,1772,380,1771,380,697,379,1770,381,696,380,696,407,669,380,696,379,697,379,696,380,1772,379,696,380,696,380,1772,379,696,380,696,407,669,405,1746,380,696,380,696,380,695,380,696,380,696,382,694,379,696,407,669,406,670,405,671,380,696,379,697,379,697,379,696,406,1746,379,1772,380,1772,406,669,380,696,385,1766,380,696,380,29381,5044,2130,380,1771,380,696,380,696,406,669,380,1771,406,670,381,696,380,695,380,697,406,1745,380,696,379,1772,380,1772,379,696,407,1745,380,1771,380,1773,404,1746,405,1747,380,696,405,1746,407,669,380,696,379,696,380,696,407,669,380,696,380,1771,406,669,381,696,379,1772,380,696,406,670,380,695,380,696,380,696,380,696,380,696,380,695,380,696,406,1744,381,1771,381,696,379,697,379,1772,405,1747,379,1771,381,696,406,670,380,695,380,696,380,696,380,696,379,697,385,690,380,695,406,1746,405,672,379,696,405,671,405,670,380,1772,380,696,379,696,381,695,380,696,380,696,380,695,380,696,380,695,381,696,379,697,379,696,380,696,406,669,381,696,379,697,404,671,405,671,379,697,379,697,379,1771,380,1772,380,1771,380,1772,380,696,380,695,381,696,379,1772,380,1772,379,1772,380,1772,379,1772,380,696,380,696,379,697,379,696,406,670,405,671,404,672,404,671,380,696,380,696,406,670,379,697,379,696,380,695,381,696,379,696,380,1771,380,697,379,697,379,695,381,696,379,697,379,696,407,669,380,696,405,670,380,696,380,696,380,696,379,696,380,696,380,695,407,670,379,696,380,696,380,696,380,695,406,670,380,696,380,696,380,696,380,696,379,696,407,1745,379,1772,380,696,380,1771,407,1745,380,1771,380,695,381,696,406}, //24C +{5043,2130,380,1772,379,697,379,697,379,697,405,1747,379,695,380,697,379,697,379,696,380,1772,379,695,381,1771,406,1745,381,696,380,1771,380,1772,379,1772,405,1747,380,1772,379,696,407,1744,380,697,379,697,379,696,406,670,380,696,379,697,404,1746,381,696,405,671,379,1771,381,697,378,696,407,669,380,1772,379,697,379,697,379,697,379,695,380,698,403,672,379,696,380,696,379,696,380,696,380,696,380,696,380,696,379,697,379,1772,379,1772,405,1747,379,696,380,696,380,1772,405,671,405,29355,5044,2130,380,1772,379,697,379,696,380,695,381,1771,406,671,405,670,380,695,380,696,380,1772,380,696,406,1744,381,1772,379,696,380,1772,380,1771,380,1772,380,1772,379,1772,380,696,380,1771,380,695,381,696,405,671,379,696,380,697,379,697,378,1773,405,670,380,696,380,1772,405,671,379,696,380,696,379,696,406,675,401,670,380,696,405,671,379,696,380,1771,381,1771,384,692,379,697,379,1772,380,1772,380,1771,380,696,379,697,379,697,379,697,379,696,380,696,406,670,379,696,380,696,380,1771,407,670,379,697,404,670,381,696,405,1747,379,696,379,696,380,696,380,696,380,696,379,697,379,696,380,696,380,696,379,697,379,696,380,696,380,696,380,696,379,696,405,671,380,696,379,697,379,696,380,696,380,696,380,696,379,697,379,1772,379,696,380,697,379,1772,379,1772,380,1777,375,1771,380,1772,406,671,404,671,379,696,380,695,407,670,405,671,405,670,380,696,379,697,406,670,379,696,406,670,379,696,380,697,379,697,379,696,406,1745,380,696,380,696,380,696,379,696,380,696,379,696,380,696,380,697,379,696,380,696,379,696,380,696,380,696,380,696,380,696,405,671,379,697,404,671,379,696,380,696,380,696,405,671,379,697,379,697,379,696,406,670,379,1773,405,670,380,1771,406,1746,380,1771,408,1744,406,670,379,696,385}, //25C +{5042,2131,380,1772,406,670,379,696,380,696,380,1771,380,696,379,697,406,670,379,696,380,1772,379,697,379,1772,379,1773,379,697,379,1772,379,1772,380,1772,380,1771,380,1772,382,694,379,1772,380,696,379,700,376,697,404,671,380,696,379,696,380,1772,380,696,379,697,379,1772,406,671,379,696,379,697,379,1772,380,696,379,696,380,697,404,672,379,696,380,696,379,697,379,696,380,696,379,697,379,696,380,696,380,696,380,696,379,1772,380,1772,379,1773,379,696,379,696,380,1772,404,672,379,29382,5043,2130,380,1772,379,697,379,696,380,696,380,1772,379,696,380,696,380,696,406,670,379,1772,380,696,379,1772,380,1772,380,695,406,1747,379,1772,405,1747,379,1771,406,1747,379,696,380,1772,379,697,405,671,379,696,379,697,379,696,406,670,380,1772,406,669,380,696,380,1771,380,696,380,697,379,696,405,671,405,670,380,696,380,695,380,696,380,697,379,1771,407,1745,380,696,380,695,406,1746,380,1771,380,1772,380,697,405,670,379,697,379,696,380,696,380,695,380,697,379,697,379,697,379,1772,406,670,404,671,380,696,379,697,380,1771,405,671,379,697,379,697,381,695,380,695,380,696,379,696,380,696,380,696,380,695,380,697,379,696,380,696,406,671,378,697,405,670,379,697,380,696,379,697,379,1772,380,696,379,697,379,696,380,1772,379,697,379,696,406,1746,405,1746,380,1772,379,1772,380,1771,380,696,380,696,380,696,380,696,379,697,379,696,380,696,380,695,380,697,379,697,379,696,379,696,380,697,379,697,379,697,379,696,379,1772,380,696,380,695,380,696,382,695,379,696,380,696,379,697,379,697,379,696,407,669,379,697,379,696,379,696,380,697,406,669,380,696,406,670,380,696,406,669,380,696,380,696,380,696,379,696,406,671,379,696,405,671,379,1772,406,1746,379,1772,380,1771,380,1772,380,1772,379,697,379,698,378}, //26C +{5043,2130,380,1771,380,696,406,670,380,696,407,1744,380,695,407,670,380,695,381,695,381,1771,406,669,406,1746,380,1772,380,695,406,1746,380,1772,405,1746,407,1744,381,1771,380,696,380,1771,380,696,380,696,407,669,380,695,407,669,380,696,380,1771,380,696,380,696,380,1771,406,670,380,696,380,695,381,1771,405,671,380,696,405,670,406,670,407,669,406,670,407,668,406,670,380,696,380,695,406,671,404,671,380,696,380,695,407,1750,375,1772,406,1745,380,696,380,696,407,1744,406,670,380,29382,5042,2130,380,1772,380,695,381,696,380,696,379,1772,406,670,380,695,380,696,380,696,380,1771,380,696,380,1772,405,1747,404,670,407,1746,379,1772,380,1771,381,1771,406,1746,379,696,380,1771,381,696,381,694,380,696,380,696,380,696,406,669,380,1772,380,696,379,697,379,1772,380,695,380,697,379,696,380,696,380,696,379,696,380,696,381,694,381,696,406,1745,380,1771,381,695,407,669,380,1772,380,1771,406,1745,380,696,406,670,380,696,405,670,381,696,379,696,406,670,380,695,381,696,379,1772,380,696,399,676,381,695,380,695,406,1747,406,669,380,696,380,696,405,671,380,695,406,670,380,696,406,670,406,669,380,696,407,669,405,671,407,668,406,670,380,696,406,669,380,697,405,670,380,696,405,671,393,1758,381,695,380,696,380,1771,404,672,406,669,408,1744,380,1771,380,1772,406,1745,380,1772,380,696,406,670,379,697,379,696,380,695,381,696,405,670,380,696,380,696,380,695,381,695,380,695,381,696,406,670,379,697,405,670,380,1771,380,696,380,696,406,670,380,695,380,696,380,696,380,696,380,695,380,696,406,670,406,669,381,696,380,695,406,670,406,670,380,696,379,696,380,696,380,696,380,695,381,695,380,696,380,695,381,696,379,696,380,696,380,1771,381,695,380,696,380,696,380,695,380,696,380,1772,406,669,380}, //27C +{5042,2130,407,1745,380,696,380,695,408,668,380,1771,407,669,380,696,380,696,380,696,380,1771,380,696,380,1772,379,1772,380,696,400,1751,407,1745,406,1745,380,1772,406,1745,380,696,380,1771,406,671,405,670,406,670,380,696,406,669,406,670,380,1772,379,696,380,696,380,1771,381,695,380,697,405,670,380,1771,380,696,380,696,405,671,406,670,406,669,380,696,380,695,381,696,379,696,406,670,406,670,406,669,380,696,380,696,380,1771,381,1771,380,1771,381,695,405,671,380,1771,408,668,380,29382,5043,2130,380,1771,380,696,380,696,379,697,379,1773,379,696,406,670,379,696,380,696,380,1772,379,697,379,1772,380,1772,379,696,380,1773,378,1773,379,1772,379,1772,380,1772,379,697,379,1772,406,670,379,698,405,669,380,696,380,696,379,697,379,1772,380,696,379,697,379,1772,380,696,379,697,379,697,379,696,379,697,380,696,379,697,379,696,379,697,406,1745,380,1772,380,696,379,697,379,1771,380,1773,379,1772,380,696,379,696,380,696,380,697,405,670,379,696,380,697,378,697,380,696,379,1772,406,670,380,696,379,697,379,696,380,1772,379,697,379,697,379,696,379,697,379,696,380,697,379,696,380,696,379,696,380,696,380,696,379,696,380,697,405,669,381,696,380,695,380,697,404,671,405,671,380,1771,380,1771,407,670,379,696,380,1773,405,670,379,697,379,1772,402,1749,380,1772,380,1771,380,1772,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,696,379,697,379,696,380,696,380,696,380,696,379,696,380,696,380,696,406,1745,380,696,380,696,379,697,379,697,379,696,380,696,379,697,379,697,406,670,405,670,379,697,379,695,381,696,406,670,380,696,379,697,379,696,406,670,379,696,380,696,380,697,379,696,380,696,379,697,379,696,380,696,380,1771,380,1772,380,696,379,697,379,696,380,696,380,1772,379,697,379}, //28C +{5043,2130,407,1744,381,695,380,696,407,669,406,1745,407,669,406,670,380,696,380,696,406,1745,406,669,406,1747,384,1766,407,669,381,1771,407,1744,384,1768,407,1744,407,1745,407,669,401,1751,380,695,407,669,380,695,407,669,381,695,380,696,380,1771,380,696,405,671,406,1745,406,670,380,696,380,696,380,1771,380,696,406,669,407,669,408,668,380,696,407,669,405,670,407,670,406,668,406,671,406,669,406,670,406,670,406,670,380,1771,407,1745,407,1744,380,695,381,696,380,1772,406,669,406,29355,5070,2104,406,1745,380,696,380,696,380,696,379,1772,406,670,380,696,379,696,380,696,380,1772,385,690,407,1744,408,1744,380,696,405,1747,406,1745,406,1746,380,1771,405,1746,381,695,380,1772,406,670,380,695,407,669,405,671,380,696,406,670,405,1746,407,669,380,695,380,1772,380,695,407,669,380,697,405,670,380,696,407,668,406,670,405,671,406,670,406,1745,380,1772,406,669,407,669,380,1771,380,1772,380,1772,380,696,379,696,380,696,406,670,380,696,380,695,380,696,380,696,380,695,380,1772,389,687,380,696,405,670,380,696,406,1745,381,695,380,696,380,696,406,669,381,695,407,669,405,671,379,696,381,695,405,671,406,670,380,696,406,669,380,695,381,696,406,669,380,696,406,670,405,670,381,695,406,671,379,1771,380,697,379,1771,381,696,406,669,380,1771,407,1746,380,1771,380,1771,380,1772,406,670,380,695,406,670,406,670,406,669,381,695,407,669,407,668,406,669,382,695,380,696,380,696,403,673,380,696,380,695,406,670,405,1746,406,670,380,696,380,695,406,670,380,697,379,696,380,696,380,695,380,696,406,670,380,696,380,695,380,696,380,696,380,695,381,695,407,669,406,670,380,695,380,696,380,696,407,669,406,669,380,697,379,696,380,696,406,1745,381,695,380,1772,380,695,384,692,380,695,407,1745,381,696,379}, //29C +{5043,2130,380,1772,404,671,406,670,406,670,380,1771,380,696,380,696,406,670,379,696,387,1765,380,696,380,1771,380,1772,405,670,381,1771,380,1772,405,1746,380,1771,381,1771,405,671,380,1771,380,696,380,695,407,670,380,695,406,670,380,696,406,1745,381,695,406,670,407,1744,406,670,406,670,380,695,381,1771,380,696,406,670,406,669,407,669,406,670,380,695,381,696,405,670,380,696,380,695,381,695,407,669,380,696,405,670,381,1771,406,1745,381,1771,380,696,406,669,381,1771,380,696,380,29381,5044,2129,406,1746,406,670,379,696,381,695,380,1772,380,695,381,696,379,696,380,696,380,1770,381,696,407,1744,380,1772,407,669,380,1772,405,1745,407,1745,406,1746,407,1744,380,696,380,1771,381,695,380,696,406,670,380,695,381,695,380,696,380,1771,381,695,380,696,410,1741,381,695,406,670,380,695,381,695,381,695,407,669,406,669,380,696,407,669,380,1771,381,1771,380,696,380,696,406,1745,380,1772,406,1745,380,696,380,695,381,696,405,670,407,669,380,696,380,696,380,695,380,696,407,1745,380,695,407,669,406,669,381,695,407,1745,408,668,406,669,381,695,406,670,380,697,379,695,381,696,380,695,406,669,408,669,380,695,405,671,380,696,380,695,406,670,380,696,380,696,380,695,381,695,380,1772,380,695,381,1771,380,696,380,1771,380,696,380,696,380,1771,381,1771,380,1771,380,1771,381,1771,407,669,407,669,381,694,407,669,407,669,380,696,380,696,406,669,381,695,380,696,380,696,405,670,381,695,380,695,381,696,379,696,381,1771,380,695,407,669,391,685,406,670,380,695,381,695,407,669,381,695,406,670,405,670,380,696,380,696,380,695,380,698,405,669,406,670,380,695,408,668,405,671,407,669,406,670,380,695,380,696,380,696,406,669,381,695,406,1746,380,1772,380,1771,406,670,406,669,380,696,380,1772,406,669,380}, //30C +{5043,2129,380,1773,379,696,379,697,380,696,380,1772,404,672,379,697,378,697,379,697,379,1771,380,697,379,1772,406,1746,379,696,380,1772,405,1747,379,1772,380,1771,380,1773,378,697,379,1772,380,697,379,696,379,697,380,695,380,696,379,697,380,1771,380,696,380,696,379,1772,380,696,380,696,380,696,379,1772,379,698,379,695,380,697,379,697,405,670,379,697,405,670,380,696,380,696,407,669,379,696,380,697,379,696,379,696,380,1772,380,1772,379,1772,379,698,378,697,379,1772,407,669,380,29382,5068,2105,379,1772,379,697,379,696,380,697,379,1772,379,698,378,696,406,671,379,696,380,1771,380,697,379,1772,379,1772,380,696,379,1772,380,1772,406,1746,379,1773,378,1773,405,671,379,1772,379,697,406,668,381,696,379,697,379,697,379,697,379,1771,380,696,380,695,381,1772,380,695,380,697,379,697,379,696,380,696,380,696,405,670,380,696,379,696,407,1746,379,1772,379,696,380,697,379,1771,380,1772,380,1771,380,697,379,696,380,696,406,670,405,670,380,697,378,696,380,697,379,696,380,1772,379,697,379,697,379,696,380,696,379,1772,380,697,379,696,379,697,379,697,378,698,379,696,380,696,379,697,379,696,380,695,381,696,379,696,380,697,378,698,379,697,378,697,406,670,379,696,379,696,380,697,379,1772,380,1771,380,697,405,1746,405,671,379,696,380,1772,380,1772,379,1772,379,1772,380,1772,379,697,379,697,379,696,379,697,379,696,380,696,380,696,380,696,379,696,380,697,379,695,380,697,379,697,379,697,379,696,380,696,379,1773,379,696,380,695,380,696,380,697,379,696,379,697,379,697,379,697,378,698,378,698,378,696,380,696,380,696,380,696,379,696,380,696,391,685,380,696,380,696,379,697,405,670,380,696,380,696,379,696,406,670,407,669,379,1772,380,696,380,696,405,1747,405,670,380,696,380,1771,380,696,380}, //31C +{5043,2130,407,1744,380,696,380,696,405,670,406,1746,406,670,405,670,380,697,379,696,380,1772,405,670,381,1771,380,1771,380,695,381,1772,379,1772,380,1772,380,1771,380,1772,380,695,407,1745,380,696,379,697,379,696,407,669,380,696,406,669,380,1772,380,696,379,697,405,1746,380,696,379,696,380,697,379,1772,385,690,380,696,380,696,380,696,380,696,380,695,380,696,380,696,380,695,407,669,380,696,405,671,380,696,379,696,380,1771,406,1746,407,1745,380,696,379,696,435,1716,406,671,379,29382,5069,2104,380,1772,405,670,380,696,380,697,379,1771,380,696,382,694,379,696,406,670,405,1747,380,696,379,1772,406,1745,381,695,380,1771,381,1771,380,1772,406,1745,380,1772,406,670,379,1772,380,696,380,696,379,696,380,697,379,696,407,669,380,1771,380,696,380,696,406,1745,380,696,380,696,380,696,379,697,379,696,394,682,380,695,407,670,404,672,379,1771,380,1772,380,696,405,670,380,1772,380,1771,380,1772,380,696,379,697,405,670,380,696,380,696,406,670,379,697,379,696,380,695,381,1771,380,696,380,696,380,696,406,669,380,1772,380,695,406,670,380,696,379,697,405,671,405,670,406,670,380,696,379,696,406,671,379,696,380,695,380,696,380,696,380,696,380,696,405,670,380,696,406,669,381,1772,380,1771,380,1771,380,696,405,1747,380,695,380,696,380,1772,379,1772,406,1747,379,1771,380,1772,379,697,379,696,380,695,381,696,379,696,380,696,380,696,405,671,407,669,379,696,380,696,406,670,379,696,380,697,379,696,405,670,380,1772,380,696,380,696,379,696,380,696,406,669,381,696,405,671,379,697,379,696,380,695,380,696,380,696,380,696,380,696,379,697,379,697,379,696,380,696,379,696,407,669,380,696,380,696,379,696,380,696,406,670,380,696,405,1746,380,1772,405,671,379,1772,380,696,380,695,380,1772,380,696,379} //32C + +//cool mid + +{5066,2130,406,1745,407,669,407,669,405,670,381,1771,380,696,380,696,404,671,380,696,406,1745,406,670,379,1772,380,1772,380,696,379,1772,380,1771,380,1772,405,1746,380,1771,380,697,405,1746,379,696,380,696,380,696,405,670,380,696,407,669,380,1772,379,695,406,671,406,1745,381,695,380,695,407,669,380,1772,380,696,379,696,380,696,407,669,380,695,380,696,380,696,380,696,405,669,381,696,380,695,406,670,380,696,380,696,380,1771,380,1771,381,1771,380,696,405,670,407,1745,379,697,379,29381,5042,2130,380,1772,380,696,379,697,406,669,380,1770,407,670,380,696,380,696,379,696,380,1772,379,697,379,1772,380,1771,380,696,380,1771,380,1772,406,1744,381,1772,405,1746,380,696,380,1772,405,670,406,670,379,696,380,697,379,696,394,681,380,1772,380,695,380,696,380,1772,405,671,379,697,405,670,405,670,380,696,380,696,380,696,380,696,379,697,379,1771,380,1772,380,696,379,696,380,1772,406,1745,380,1771,407,670,379,696,380,696,407,668,380,696,407,668,381,696,380,695,380,696,380,1772,379,696,380,696,380,695,380,697,379,1772,379,696,406,670,380,696,380,695,380,696,380,696,380,696,379,697,379,696,380,696,379,697,380,696,379,696,379,697,379,697,379,695,407,670,380,696,406,669,382,1769,380,1772,406,1745,407,669,379,697,379,696,380,697,405,1746,379,1772,380,1772,405,1746,406,1745,380,1772,380,696,379,696,380,696,380,696,406,669,405,671,405,671,379,696,380,695,381,696,380,696,379,696,380,696,405,671,380,695,380,1772,379,696,380,697,379,696,380,696,406,669,380,696,380,695,380,697,379,696,380,696,379,697,379,696,380,696,379,697,379,697,379,695,406,671,389,687,379,696,380,696,380,696,406,669,380,696,380,695,407,669,408,668,380,1771,380,1772,380,696,379,1772,380,695,380,697,379,1772,379,696,381}, //16 +{5041,2131,379,1773,379,696,380,696,379,697,379,1772,379,697,379,697,379,696,379,697,379,1772,380,696,379,1773,379,1772,379,697,379,1772,383,1768,380,1771,380,1773,379,1772,385,691,379,1772,379,697,379,696,380,696,379,697,379,697,379,696,379,1773,379,696,380,696,379,1772,380,696,379,697,379,696,406,1746,379,697,379,696,380,696,405,671,379,697,379,696,380,695,380,697,379,696,380,696,380,696,379,697,379,696,380,696,379,1772,379,1773,379,1772,380,696,380,696,379,1772,380,697,378,29381,5043,2130,379,1772,380,696,380,695,380,696,380,1772,379,697,379,696,406,670,379,696,381,1771,380,696,379,1772,379,1773,379,696,380,1772,380,1771,380,1771,380,1772,380,1771,380,696,380,1772,379,697,379,696,379,697,379,697,379,695,381,696,380,1771,379,697,380,695,380,1772,379,697,380,696,379,697,402,673,380,696,379,696,380,697,379,696,380,695,380,1771,381,1771,406,670,380,696,380,1770,381,1772,379,1772,380,696,379,697,379,696,380,696,391,685,379,696,380,697,379,695,380,697,380,1770,380,697,379,697,379,696,380,696,380,1771,380,696,379,696,381,697,378,696,380,696,379,696,380,696,405,670,407,670,379,696,380,696,379,697,379,696,380,696,380,696,380,695,380,696,380,696,379,697,379,696,406,670,380,696,379,1772,406,670,379,697,379,696,406,1746,379,1772,406,1745,380,1772,379,1773,379,1772,379,697,379,697,379,696,380,696,405,670,406,671,378,697,379,697,406,669,380,695,381,696,379,696,380,696,379,696,380,697,379,1771,381,696,406,670,379,696,379,697,379,696,379,697,380,696,379,697,383,691,381,696,406,670,379,697,379,701,374,697,405,671,379,696,406,670,380,696,379,696,380,696,380,695,407,669,406,670,380,696,379,697,379,696,380,1771,380,696,380,1772,405,1746,380,696,406,669,380,1772,405,671,379}, //17C +{5041,2132,379,1772,379,696,379,698,378,697,379,1773,378,698,379,697,378,697,378,698,378,1773,378,697,380,1772,379,1772,379,698,378,1774,377,1773,379,1772,379,1773,379,1772,379,697,379,1773,378,697,379,697,378,698,378,697,379,697,378,697,379,1773,379,697,379,696,380,1772,378,698,379,697,378,698,378,1773,378,698,379,696,379,697,378,697,379,697,379,697,378,698,378,698,378,698,378,697,379,697,405,670,379,697,379,696,379,1773,379,1772,379,1772,380,697,378,697,379,1773,378,698,378,29382,5041,2131,379,1773,378,698,378,698,378,697,378,1774,378,698,378,697,379,697,378,697,379,1773,378,698,378,1773,379,1772,379,697,379,1773,379,1771,380,1772,379,1773,378,1775,377,696,380,1772,379,698,378,697,378,697,379,698,378,697,379,697,379,1772,379,697,379,697,378,1772,380,696,380,697,378,697,378,698,378,697,379,697,379,697,379,698,378,696,379,1772,380,1773,378,697,378,698,378,1773,379,1773,378,1773,379,697,378,697,379,697,379,696,379,698,378,697,379,696,380,697,378,698,378,1773,379,697,379,696,379,697,379,697,378,1772,379,698,378,697,379,697,379,697,378,697,379,697,379,697,379,697,383,692,379,698,378,697,378,697,379,702,374,697,379,696,379,697,379,697,378,697,379,697,379,1773,379,697,378,697,378,1774,379,696,379,697,378,697,379,1773,379,1773,378,1773,379,1773,378,1773,379,1773,405,671,378,697,379,696,379,698,378,697,379,697,379,697,379,696,379,696,380,696,380,696,379,697,379,696,380,697,378,697,379,1772,380,696,405,670,381,696,379,696,379,696,393,683,406,670,380,696,379,697,379,696,380,696,380,695,380,696,380,696,380,695,381,695,380,696,405,671,379,697,380,695,380,696,380,696,379,696,407,668,381,696,406,670,405,1745,381,1771,407,1744,381,1771,380,695,381,696,403,1748,380,696,380}, //18C +{5044,2129,381,1770,381,695,381,695,381,696,379,1772,379,696,380,696,380,696,380,696,379,1772,380,696,380,1771,380,1771,380,696,380,1771,381,1771,380,1771,381,1771,380,1772,380,696,379,1771,381,696,379,697,379,696,380,695,381,696,379,696,380,1772,380,696,379,696,380,1772,379,696,380,695,381,696,379,1771,381,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,1771,380,1772,380,1771,380,696,380,696,380,1771,380,696,380,29358,5065,2129,381,1771,381,695,380,696,380,696,380,1771,379,697,380,696,380,695,380,697,379,1771,381,696,379,1772,380,1771,380,695,381,1772,379,1772,380,1772,379,1771,381,1771,380,697,379,1770,381,697,379,696,380,695,381,696,379,695,381,696,380,1771,380,695,381,696,380,1771,380,695,381,695,380,696,380,695,381,695,381,696,379,696,380,696,379,696,380,1772,380,1772,379,696,380,696,380,1770,381,1772,380,1770,381,696,380,696,380,696,379,696,380,696,380,696,379,696,380,696,380,696,379,1772,380,695,381,695,380,697,379,696,380,1772,379,697,379,696,380,695,381,695,380,696,380,696,380,695,380,696,380,695,381,695,380,696,380,697,379,697,378,697,379,696,407,669,380,696,380,695,380,695,381,696,379,1772,380,696,380,1770,381,696,380,696,379,696,380,1772,407,1744,380,1772,380,1770,381,1771,380,1772,380,696,380,696,380,695,380,696,380,695,381,695,380,697,379,695,381,696,380,695,380,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,696,380,696,379,696,380,696,380,695,380,696,380,697,379,696,379,696,406,669,381,696,379,697,379,697,379,695,381,696,379,696,380,695,381,696,379,697,379,696,380,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,695,381,696,379,1771,381,696,379,1771,381,695,381}, //19C +{5044,2129,379,1772,380,696,379,696,380,696,380,1772,379,697,379,696,380,696,380,695,406,1746,380,695,380,1772,380,1771,380,696,380,1772,380,1771,380,1772,380,1771,380,1772,405,671,379,1772,379,697,379,697,379,696,380,697,378,696,380,697,379,1771,406,671,379,696,380,1771,380,696,405,671,379,697,380,1772,405,670,380,696,379,697,379,696,380,696,380,696,379,697,379,696,380,696,405,671,379,697,379,696,383,693,379,697,404,1746,380,1772,380,1771,380,695,381,696,380,1771,380,696,380,29380,5043,2131,379,1772,380,696,380,696,379,697,379,1771,380,698,405,669,380,696,380,695,380,1773,379,696,380,1772,379,1772,380,695,380,1772,380,1771,380,1772,380,1772,379,1771,380,697,379,1772,380,695,381,695,380,697,404,670,381,695,380,696,380,1772,380,696,379,696,407,1747,377,697,379,696,380,696,405,670,381,695,380,695,381,696,379,696,380,697,379,1770,381,1772,380,696,380,696,379,1772,380,1772,379,1772,380,696,379,696,380,696,380,696,405,671,379,697,379,696,380,696,379,696,380,1771,381,695,380,697,405,670,380,696,379,1772,380,696,380,696,380,696,379,696,380,696,379,697,379,697,405,670,380,695,407,670,379,697,379,696,380,696,379,697,379,695,381,696,380,695,380,697,379,695,381,1771,380,1771,384,693,379,1772,405,670,381,700,375,696,380,1772,379,1772,380,1772,405,1746,380,1771,380,1771,381,695,407,670,379,696,380,695,380,696,380,696,380,696,404,671,380,697,379,696,380,695,380,696,406,670,380,696,380,695,407,1745,380,696,406,670,379,696,380,696,380,696,380,695,406,670,380,695,381,695,380,696,380,696,380,696,380,695,380,696,380,696,380,695,381,695,380,697,379,695,407,669,380,696,380,696,406,669,380,696,405,671,380,696,379,1772,380,1771,380,696,380,695,381,1771,380,697,379,1772,379,696,380}, //20C +{5042,2131,378,1773,379,698,378,697,378,698,378,1773,379,697,379,696,379,697,379,697,379,1772,379,697,379,1772,379,1773,379,696,379,1773,379,1772,380,1772,379,1772,380,1771,380,696,380,1772,379,696,380,697,379,697,378,696,406,671,378,696,380,1773,379,697,379,697,378,1772,405,671,379,698,378,697,379,1771,380,697,379,697,379,696,379,698,378,697,379,697,405,671,378,698,378,696,379,697,379,698,378,697,379,697,379,696,379,1771,381,1772,379,1773,379,697,378,697,405,1747,379,696,380,29359,5063,2132,379,1773,378,697,379,696,380,696,382,1769,380,696,379,697,379,697,379,697,379,1772,379,698,378,1772,379,1773,379,696,380,1772,380,1771,380,1772,379,1772,380,1772,379,697,378,1773,379,697,379,696,380,697,378,697,379,697,379,697,379,1772,379,697,379,696,380,1772,379,696,406,670,379,697,404,671,406,670,380,696,380,695,380,697,404,672,378,1772,380,1771,380,696,380,696,406,1745,380,1772,380,1771,380,696,406,670,380,696,379,696,380,697,379,696,380,696,379,696,406,670,380,1772,379,697,379,695,381,696,405,671,397,1754,379,696,380,696,406,670,380,696,379,697,379,696,380,695,380,697,379,696,380,696,406,670,405,670,407,669,406,670,405,670,407,669,380,696,405,670,381,695,406,670,405,670,407,1745,406,1746,379,696,406,670,407,669,405,1745,408,1744,406,1746,380,1771,406,1745,407,1745,406,670,380,695,408,668,380,695,407,670,379,696,380,696,407,669,405,669,406,671,407,669,406,669,380,696,379,697,407,668,407,1745,379,697,405,670,379,697,407,669,379,697,378,698,378,697,378,697,379,698,377,699,377,698,377,698,377,699,377,699,350,726,350,725,350,726,350,726,349,726,349,727,349,728,347,728,372,703,373,703,373,703,347,729,372,1778,374,702,373,1779,373,703,373,1778,374,701,374,1778,373,703,373}, //21C +{5043,2130,380,1773,378,697,379,697,379,696,379,1772,380,696,379,697,379,697,378,698,379,1773,378,697,379,1772,380,1771,380,697,379,1772,379,1773,379,1772,379,1773,379,1771,380,697,378,1774,378,697,379,697,379,697,379,696,379,697,378,698,378,1773,379,697,379,696,380,1772,378,698,379,695,380,698,378,1772,405,672,378,697,379,697,378,698,379,696,379,696,380,696,379,697,379,696,380,696,380,696,379,697,379,697,378,697,379,1773,379,1772,380,1772,379,696,379,698,378,1772,380,696,379,29382,5042,2131,379,1772,380,696,380,696,379,696,380,1771,380,696,380,696,380,696,379,697,379,1773,379,696,379,1772,380,1772,380,696,379,1772,406,1745,405,1747,380,1771,380,1772,379,696,380,1772,379,697,406,669,380,696,379,697,379,696,380,696,380,1771,380,696,380,696,380,1771,406,671,405,670,380,696,379,696,380,696,405,671,406,669,406,670,406,670,407,1744,407,1744,406,671,379,696,380,1771,380,1771,406,1746,380,696,399,677,380,696,406,669,406,670,380,696,405,670,380,696,406,669,407,1745,406,669,381,695,380,696,380,695,406,1746,406,669,407,670,406,669,406,670,380,696,406,669,407,669,407,669,380,696,405,670,380,696,380,696,406,669,406,670,406,670,379,696,406,671,405,670,380,696,379,1772,406,670,404,1748,378,1773,378,698,377,698,378,698,377,1773,377,1775,351,1801,350,1801,349,1803,348,1803,348,728,373,703,373,703,373,703,373,702,373,703,373,703,373,702,373,703,373,702,374,702,374,702,373,703,373,703,373,702,373,1779,372,703,374,703,372,703,372,704,372,703,371,705,371,706,370,704,371,705,370,706,346,729,347,729,346,730,346,729,347,729,347,729,346,730,346,729,347,729,347,729,347,729,347,729,347,728,348,728,347,728,373,703,373,1778,375,1776,376,1777,374,700,377,1775,376,700,377,1773,378,698,378}, //22C +{5043,2130,405,1746,380,696,380,695,381,696,406,1744,381,696,406,670,379,697,379,696,380,1772,379,695,406,1746,380,1772,380,696,380,1771,405,1746,383,1769,380,1771,380,1772,380,696,405,1746,406,670,380,696,379,696,380,696,393,682,381,696,406,1745,380,695,407,669,407,1745,380,696,406,669,406,670,406,1745,405,671,380,696,380,696,407,668,407,669,406,670,380,696,406,670,405,670,380,696,380,695,380,696,380,696,380,696,405,1746,380,1772,379,1772,407,669,405,671,379,1772,380,696,380,29380,5043,2130,380,1771,380,696,380,696,405,671,406,1745,380,695,381,696,406,670,379,697,405,1746,405,670,405,1747,380,1771,406,670,380,1772,379,1772,406,1745,407,1745,380,1771,380,696,380,1771,407,669,407,668,381,695,407,670,379,696,380,696,379,1772,407,669,380,696,407,1744,405,671,380,696,379,695,381,696,380,696,404,671,407,669,380,695,407,670,379,1772,407,1744,407,669,407,669,380,1771,406,1745,407,1746,406,669,405,671,379,697,381,694,386,690,405,671,405,671,405,670,380,696,406,1744,381,695,408,668,406,670,380,696,380,1771,406,670,407,669,406,670,379,697,405,670,406,670,380,695,380,697,379,696,380,695,408,669,379,697,405,670,380,696,379,696,380,696,379,696,381,696,406,669,380,696,407,1744,380,1772,380,1771,406,670,380,696,406,670,379,1772,380,1771,406,1746,380,1771,407,1745,405,1746,380,696,380,696,380,696,405,670,406,669,381,696,379,696,405,671,407,669,379,696,380,696,407,668,381,696,379,697,405,670,406,1744,381,696,380,696,380,696,380,696,405,670,380,696,405,670,407,669,405,671,380,696,405,671,405,671,404,671,406,670,379,696,380,696,406,670,405,671,405,670,405,671,380,696,379,697,404,671,380,696,380,696,379,696,380,1771,381,695,380,696,381,1770,380,1772,380,696,379,1772,406,670,379}, //23C +{5042,2130,380,1772,379,697,379,697,379,697,378,1772,380,697,379,696,379,697,379,696,382,1770,379,697,379,1775,376,1773,379,696,380,1772,379,1773,379,1771,380,1772,380,1771,380,697,379,1772,379,697,379,696,380,697,378,696,380,697,379,696,380,1772,379,696,380,697,378,1772,380,697,378,697,379,697,405,1747,378,697,379,697,379,697,379,696,379,698,378,696,380,696,379,697,379,698,378,697,378,698,378,698,378,697,379,697,379,1772,379,1773,378,1772,380,697,379,697,379,1772,378,697,379,29382,5042,2131,379,1773,379,697,378,697,379,696,380,1771,380,697,379,696,380,695,407,670,379,1772,379,697,379,1773,379,1772,379,697,379,1772,379,1773,379,1772,380,1772,379,1772,379,697,379,1773,378,698,378,696,405,672,378,698,378,697,379,697,379,1772,379,697,379,696,380,1771,380,696,380,697,378,697,379,697,379,696,379,697,379,698,378,696,380,697,379,1773,378,1772,379,697,380,696,379,1772,380,1771,380,1771,380,698,378,697,379,697,379,695,380,697,379,697,379,697,378,697,379,697,379,1772,380,696,379,697,379,696,379,697,379,1773,379,696,379,698,378,697,379,697,379,697,378,697,379,696,380,697,378,697,379,698,378,697,379,696,379,697,379,696,380,697,379,696,379,697,379,698,378,697,378,1773,379,1772,406,1746,379,1772,379,697,379,697,379,697,378,1773,379,1772,379,1772,380,1772,379,1772,381,1771,379,697,379,697,378,698,378,698,378,697,405,671,379,697,401,674,404,671,380,696,380,696,379,697,379,697,379,697,378,697,379,1772,380,696,379,697,379,696,380,697,378,697,405,671,379,696,380,697,378,697,405,670,380,697,378,697,379,697,379,696,379,698,378,697,379,696,380,696,380,696,379,697,380,695,380,697,378,697,379,697,379,697,406,670,378,1772,380,1772,379,697,406,1746,379,1772,379,696,406,1746,380,696,379}, //24C +{5069,2104,406,1745,380,696,406,670,380,696,405,1746,406,670,380,696,380,696,379,696,406,1745,381,696,405,1746,405,1746,380,696,380,1770,381,1772,380,1771,380,1771,380,1772,380,697,379,1772,406,669,407,669,380,695,381,696,406,669,380,695,381,1772,379,697,379,696,406,1745,406,670,406,670,406,670,405,1746,406,669,382,693,407,670,380,696,405,671,406,672,404,669,379,696,380,696,380,696,380,696,380,695,386,690,406,670,405,1746,406,1746,380,1771,405,671,406,670,380,1771,406,670,380,29358,5066,2129,381,1771,380,696,406,670,379,696,380,1771,380,696,407,669,380,696,380,696,379,1772,380,696,380,1771,380,1771,381,696,379,1772,380,1771,407,1746,379,1771,380,1772,405,670,380,1772,380,696,380,695,406,670,380,696,405,671,379,696,406,1746,380,696,379,696,380,1771,381,695,380,697,379,696,380,696,405,670,380,696,380,696,380,696,380,695,380,1772,406,1746,379,696,380,696,405,1745,381,1772,379,1772,380,696,405,671,379,696,407,670,404,671,405,670,407,669,380,696,406,670,379,1772,380,696,380,696,379,696,380,696,380,1771,380,696,406,670,405,671,379,696,380,696,380,696,380,695,380,696,380,695,381,696,405,670,380,697,379,696,380,696,379,697,399,676,380,696,406,670,379,696,407,669,400,676,379,696,407,668,380,1772,406,670,380,696,380,1771,380,1772,380,1771,406,1747,378,1773,379,1772,405,671,407,668,406,671,403,672,406,670,406,669,406,670,379,697,379,696,406,670,379,697,406,669,406,671,379,696,380,696,379,1771,407,670,406,670,405,671,379,696,407,669,379,696,380,696,380,696,380,696,379,697,406,669,380,696,380,696,379,696,380,696,379,696,381,696,406,669,379,697,380,695,406,670,380,696,380,696,379,697,404,671,406,670,380,1771,406,670,406,1745,380,1771,381,1772,405,670,380,1771,380,696,405}, //25C +{5041,2131,379,1773,379,697,378,697,379,697,379,1772,406,670,379,698,378,696,380,697,378,1772,380,697,379,1772,379,1773,404,672,378,1772,380,1773,378,1773,379,1772,379,1772,380,696,379,1773,379,697,379,696,380,696,379,697,379,696,380,696,380,1772,378,698,378,697,379,1773,379,696,380,697,378,697,379,1772,405,671,379,697,379,697,379,697,379,696,379,697,379,697,379,696,379,697,379,696,380,696,379,698,379,696,379,696,380,1771,383,1770,379,1772,379,697,379,697,379,1771,380,696,380,29380,5070,2103,407,1745,380,697,379,696,380,696,379,1772,380,696,405,670,380,696,406,670,380,1771,380,696,380,1772,380,1771,380,696,380,1771,406,1746,379,1772,380,1771,407,1745,380,696,406,1745,380,696,380,696,380,696,379,696,380,696,380,695,408,1744,380,696,405,671,379,1772,380,696,380,695,380,696,407,668,407,669,380,696,380,696,406,669,407,670,384,1766,407,1744,407,668,407,670,407,1745,407,1745,380,1770,381,695,407,669,380,696,380,696,407,668,380,696,406,670,406,669,407,669,406,1746,380,695,407,669,405,670,380,696,380,1772,407,669,406,669,407,669,407,669,379,696,406,670,406,670,405,671,405,671,405,670,404,672,379,697,379,696,379,697,377,699,377,699,377,698,376,700,376,700,350,1801,350,726,349,727,349,726,349,1802,349,728,348,728,347,1803,373,1778,374,1778,373,1779,373,1778,374,1778,373,703,373,702,373,703,372,704,373,703,372,702,374,703,372,704,371,704,373,703,371,706,371,704,371,704,347,729,370,706,351,1800,347,729,346,729,347,729,346,731,346,729,347,730,345,729,347,729,347,728,348,728,347,729,348,728,347,728,373,703,374,702,372,703,375,702,374,701,375,700,376,700,376,700,376,699,377,699,377,698,378,698,377,699,403,1748,378,1773,378,1774,378,1773,404,1748,378,697,404,1747,405,671,404}, //26C +{5042,2131,379,1773,379,696,378,697,379,697,380,1772,379,696,380,697,378,697,379,697,379,1772,379,697,379,1773,378,1773,379,697,378,1773,379,1773,379,1772,379,1772,380,1772,406,669,380,1772,379,697,379,697,378,697,379,697,379,698,378,697,379,1771,406,670,379,698,378,1773,379,697,378,697,379,697,379,1773,405,670,379,697,379,697,379,697,379,696,379,697,379,697,379,696,379,697,379,697,378,697,380,696,379,697,379,696,380,1772,379,1773,379,1772,405,672,378,696,380,1772,379,697,378,29361,5063,2131,379,1773,379,696,380,696,379,697,379,1773,379,696,379,697,379,697,379,696,379,1773,379,696,379,1773,379,1772,380,697,378,1773,378,1773,379,1773,378,1773,379,1772,379,697,379,1773,379,697,378,698,379,696,379,697,379,697,378,697,379,1772,380,696,379,697,379,1773,378,698,378,697,379,697,378,697,380,696,379,696,379,698,378,697,379,697,379,1773,378,1773,406,670,379,697,379,1772,379,1772,379,1773,379,697,379,697,378,697,379,697,378,698,379,697,379,696,379,696,380,697,379,1773,378,697,379,696,379,697,379,697,378,1773,379,698,378,697,379,696,379,697,379,697,379,696,379,698,378,697,379,697,379,697,378,697,379,697,379,696,380,697,379,696,379,697,379,697,379,696,379,697,379,696,380,1772,404,671,380,696,380,1772,379,696,381,695,380,1771,380,1773,379,1772,379,1772,379,1773,379,1772,380,695,380,696,380,696,381,695,406,670,379,697,379,696,380,695,381,695,406,670,380,696,406,670,379,696,407,669,406,670,382,1769,407,669,406,669,381,699,402,670,380,696,380,695,381,696,379,696,406,670,406,669,380,696,380,696,407,669,406,669,406,670,380,695,381,695,407,669,380,696,405,670,381,695,407,668,407,670,380,695,381,695,405,671,407,1743,408,669,388,688,405,670,380,696,406,1745,406,1746,380,696,380}, //27C +{5044,2130,380,1771,380,696,380,696,380,696,379,1772,380,696,406,670,379,696,380,696,380,1771,380,696,380,1771,380,1772,380,696,380,1770,381,1772,379,1772,380,1771,380,1771,381,696,380,1771,380,696,380,696,384,691,380,696,380,695,381,696,380,1772,379,696,406,669,380,1772,380,695,380,696,380,695,381,1771,380,696,380,695,381,695,381,695,381,695,380,695,381,695,381,695,380,696,380,695,381,696,380,695,380,696,380,696,380,1771,380,1771,381,1771,380,696,380,696,380,1771,380,695,381,29380,5043,2130,380,1771,381,695,381,696,379,696,380,1771,380,696,380,695,381,696,380,695,380,1771,381,696,379,1771,381,1771,380,696,380,1772,379,1772,407,1744,381,1771,380,1772,379,696,380,1771,381,695,381,695,380,696,380,695,381,696,379,695,381,1772,379,696,380,696,380,1771,381,695,380,696,380,695,381,695,380,695,381,695,381,696,380,695,380,696,380,1771,380,1771,381,695,381,695,380,1772,380,1771,380,1771,380,697,380,695,380,696,380,696,380,696,379,696,380,697,379,696,379,697,380,1769,382,695,381,695,406,670,406,670,380,1770,381,696,380,696,380,696,379,696,380,695,380,697,379,697,379,695,381,696,380,696,379,695,381,696,380,696,379,696,380,695,381,696,380,695,380,696,380,696,380,1771,380,1771,381,696,379,696,380,1771,380,697,380,695,380,1772,380,1771,380,1772,379,1772,380,1771,380,1772,380,696,379,697,379,696,380,696,380,696,380,695,380,696,380,695,381,695,380,695,381,696,380,696,380,695,380,696,380,695,381,1771,380,696,380,696,380,696,379,696,380,696,380,696,379,696,380,695,381,696,380,695,380,697,404,670,407,670,380,695,406,670,380,696,380,696,379,696,380,696,434,641,381,695,380,696,380,696,380,698,377,696,380,696,380,1771,380,1771,381,695,380,696,380,696,407,1745,379,1772,380,695,381}, //28C +{5071,2102,381,1771,406,670,380,696,407,669,406,1745,380,695,380,697,406,669,380,696,407,1744,380,696,406,1745,380,1772,406,670,406,1745,407,1744,405,1747,380,1771,407,1745,406,670,405,1746,405,671,380,696,406,669,407,669,406,670,380,696,380,1771,380,696,406,670,379,1771,381,695,381,696,381,695,379,1771,407,669,407,669,380,696,406,670,380,695,380,696,380,696,383,693,380,695,380,696,380,696,405,675,375,697,379,696,380,1771,380,1772,380,1771,406,670,407,669,405,1746,380,696,406,29355,5043,2130,407,1744,381,695,407,668,381,696,379,1772,380,696,380,695,380,696,380,695,381,1772,379,697,379,1772,380,1771,380,695,381,1771,380,1770,382,1771,406,1746,380,1771,380,696,380,1772,405,670,404,672,380,695,380,696,380,695,381,696,380,1771,380,696,380,695,406,1746,380,696,406,670,379,696,381,695,380,695,381,696,379,696,380,696,380,695,381,1771,380,1772,379,697,379,696,380,1772,379,1772,400,1752,379,696,380,696,380,696,379,697,379,696,380,696,405,671,405,670,406,670,380,1771,407,669,380,696,380,696,379,697,379,1771,381,696,379,696,380,696,380,695,381,695,406,670,406,670,380,696,379,696,380,697,379,696,380,696,407,668,407,669,380,696,405,670,380,696,380,697,379,695,407,669,380,696,380,1772,379,697,379,1772,380,695,380,696,406,1745,380,1772,404,1748,379,1772,380,1771,380,1771,381,696,380,696,405,670,380,696,398,678,405,670,380,696,380,696,380,696,406,669,380,696,407,669,380,695,380,696,380,696,380,1772,379,696,380,696,408,668,380,695,382,694,406,669,380,696,406,670,406,669,381,696,379,696,406,670,405,671,407,669,379,696,405,671,380,696,406,669,380,697,406,669,406,669,381,695,380,696,407,668,381,696,379,696,380,1771,380,696,407,1745,380,696,380,696,379,1772,406,1745,380,696,380}, //29C +{5043,2131,379,1771,381,695,406,670,380,695,406,1747,406,670,379,696,380,696,406,670,404,1746,381,696,380,1771,380,1772,380,695,380,1771,381,1772,380,1771,380,1771,380,1772,380,696,406,1745,380,696,406,670,380,696,406,670,379,696,380,696,380,1772,405,670,407,669,380,1771,380,696,407,670,381,694,380,1771,380,696,380,696,380,695,380,697,379,696,380,695,407,670,379,696,407,670,379,696,380,696,380,696,405,670,380,696,380,1771,380,1772,380,1771,380,697,379,696,380,1772,379,697,379,29382,5043,2130,380,1772,380,696,379,696,380,696,380,1772,380,695,380,696,380,696,380,696,379,1772,380,696,380,1771,380,1772,406,669,380,1772,380,1772,380,1771,385,1766,381,1771,380,696,380,1772,380,695,380,696,380,696,380,696,380,696,379,695,381,1772,379,697,379,696,380,1771,381,695,380,697,406,669,384,692,380,696,379,696,380,696,380,695,381,696,406,1744,381,1771,380,697,379,696,380,1771,380,1772,380,1771,380,697,379,695,381,696,380,696,380,695,380,696,380,696,380,695,380,696,380,1772,380,696,379,696,380,696,380,696,380,1770,381,696,380,695,381,696,379,696,380,696,380,696,380,696,379,697,379,696,380,696,380,696,380,695,380,696,380,695,381,696,379,697,380,695,380,696,380,696,380,1771,380,696,380,1771,380,696,380,1772,380,695,381,695,380,1771,385,1768,379,1772,380,1771,380,1771,381,1772,379,696,380,696,380,696,380,696,379,697,379,696,380,695,381,695,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,696,380,695,380,696,405,671,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,697,379,696,380,695,380,696,380,696,380,696,380,695,380,696,380,696,380,696,380,1771,380,1772,380,1771,380,696,380,696,380,1771,380,1771,381,696,384}, //30C +{5043,2130,382,1769,380,696,380,695,380,696,380,1772,380,696,406,669,380,697,379,697,379,1771,405,672,379,1771,380,1772,380,696,384,1767,380,1771,380,1773,405,1745,380,1772,380,695,381,1771,380,696,406,670,379,696,380,696,380,696,403,673,379,1772,380,697,379,696,379,1773,379,696,379,697,379,696,406,1746,379,696,380,696,380,696,379,696,380,697,379,697,379,695,381,696,379,697,379,696,380,696,405,671,379,696,380,695,406,1746,380,1772,379,1772,380,697,379,695,380,1773,379,696,380,29380,5044,2129,380,1772,406,670,380,696,379,697,379,1772,380,696,405,670,380,696,405,671,406,1745,380,696,380,1772,379,1772,380,696,379,1773,379,1772,406,1746,379,1771,406,1746,380,695,380,1772,380,696,380,696,379,696,407,669,380,696,380,696,404,1747,380,695,406,670,380,1772,380,696,379,697,379,696,406,670,380,696,379,696,380,697,379,695,381,696,379,1771,381,1771,380,697,405,670,406,1745,406,1746,379,1773,379,697,379,696,379,697,405,670,380,696,380,696,379,697,406,670,379,696,380,1772,379,696,380,696,406,669,380,697,379,1772,406,670,379,696,380,696,380,699,376,697,379,696,406,670,405,670,380,696,380,696,380,696,379,696,380,696,380,695,380,697,379,696,380,696,380,697,379,696,379,696,380,1771,380,1772,380,696,380,1772,379,696,380,696,379,1772,406,1745,381,1771,380,1772,379,1773,379,1772,380,695,403,673,380,696,405,670,380,696,380,697,379,696,379,696,380,697,404,671,379,696,381,696,379,697,379,696,380,696,379,1772,380,696,380,696,379,696,380,696,380,696,379,696,380,696,384,692,406,670,379,697,379,696,380,701,374,696,380,696,380,696,380,695,380,696,380,696,380,695,406,671,379,696,380,696,406,669,380,697,379,697,379,697,404,1747,379,696,380,695,407,1744,381,696,406,1745,380,1772,380,695,380}, //31C +{5043,2130,381,1771,380,696,379,696,380,696,380,1771,380,696,380,696,380,696,380,695,381,1770,406,671,379,1772,380,1771,380,695,381,1772,380,1771,380,1772,380,1771,407,1745,380,696,379,1772,380,695,405,672,379,696,380,696,380,696,379,697,379,1772,380,696,380,695,380,1771,407,669,380,695,381,696,380,1772,379,696,380,696,380,695,380,697,379,696,380,696,380,695,380,697,379,696,406,670,380,696,379,696,380,696,380,695,380,1773,379,1771,381,1771,380,696,406,670,379,1772,380,696,405,29355,5070,2103,380,1772,406,670,380,695,380,697,379,1771,380,697,379,696,380,696,380,696,380,1771,380,696,380,1771,380,1772,380,695,380,1771,381,1771,380,1772,380,1771,380,1772,380,696,379,1772,380,695,381,696,379,696,380,696,380,696,380,695,380,1771,381,696,379,696,380,1771,381,696,379,697,404,671,380,695,380,697,379,696,380,696,380,696,380,694,381,1771,381,1772,406,669,406,670,379,1771,381,1771,381,1771,380,696,406,669,380,696,380,696,380,695,380,697,379,696,406,670,380,694,382,1770,381,696,405,671,379,696,380,696,380,1771,380,697,405,670,380,695,406,671,380,695,406,670,380,695,381,695,380,696,380,696,380,695,380,696,407,669,380,696,380,695,380,696,380,696,380,695,381,695,380,1772,405,1746,380,1771,381,695,380,1771,381,696,379,696,380,1771,381,1771,380,1771,381,1771,380,1772,380,1772,379,695,381,696,379,696,380,696,380,695,381,695,380,696,380,696,380,696,379,696,380,695,381,696,380,695,380,696,380,696,381,1770,380,696,380,696,380,698,377,696,380,697,379,696,380,696,379,696,380,696,380,695,380,696,381,695,380,696,380,696,379,697,379,696,380,696,380,695,380,695,381,696,380,695,380,696,380,697,379,696,380,696,379,696,380,1772,379,1772,380,696,380,1771,380,696,380,1771,380,1772,380,695,380} //32C + +//cool high +{5043,2130,380,1772,380,696,404,671,406,670,380,1771,380,696,406,670,379,696,406,670,380,1771,407,670,379,1772,405,1746,406,670,406,1746,386,1765,406,1745,380,1772,380,1771,380,697,406,1745,379,697,380,694,407,670,406,670,405,670,405,672,379,1771,381,696,379,696,379,1773,379,696,380,695,381,695,380,1771,407,670,380,695,380,696,380,696,380,695,381,695,380,696,380,696,380,696,379,696,407,669,380,696,380,695,406,670,380,1772,380,1771,380,1772,380,695,380,696,380,1771,381,695,380,29381,5043,2130,380,1772,380,695,381,695,380,696,406,1745,380,697,379,696,406,670,379,696,380,1772,380,696,379,1771,381,1771,381,694,407,1746,405,1746,384,1768,379,1772,407,1744,381,695,380,1771,381,696,380,696,379,696,380,696,406,669,380,696,380,1772,406,669,380,696,380,1772,380,696,379,696,406,670,379,697,405,671,379,696,406,670,407,669,383,693,379,1772,380,1770,408,669,380,696,379,1772,380,1772,405,1746,405,671,379,697,379,696,380,695,381,696,380,695,406,670,407,669,406,670,380,1771,380,696,382,693,380,697,379,696,380,1770,381,696,380,696,380,696,406,670,379,696,380,696,405,671,379,697,379,696,380,696,380,695,406,671,379,696,406,669,406,671,379,696,380,696,407,669,380,696,405,1746,380,1772,405,1745,381,695,406,670,380,696,380,696,379,1772,380,1772,405,1746,380,1771,381,1771,406,669,406,1746,380,696,380,695,381,696,379,696,380,696,380,695,406,671,405,670,380,696,409,667,379,697,379,696,406,670,379,696,406,1745,381,696,380,696,379,696,406,670,405,671,405,670,380,696,406,670,380,695,407,670,404,671,407,669,380,696,379,696,406,670,380,695,380,696,380,696,380,696,380,695,407,669,407,669,380,696,380,696,406,670,405,670,406,1745,380,1772,380,696,379,1772,380,695,381,1770,408,1746,379,696,379}, //16C +{5043,2130,405,1746,380,697,379,696,380,696,405,1746,405,671,379,696,407,669,406,670,406,1745,380,696,380,1771,381,1771,380,696,380,1771,380,1772,380,1771,380,1772,405,1746,380,696,380,1772,380,696,379,697,379,696,405,671,379,696,380,696,379,1773,379,697,379,696,380,1772,406,669,406,669,381,696,379,1772,380,696,380,696,405,670,380,696,380,696,380,696,379,696,380,696,380,696,379,697,379,696,380,695,380,697,379,696,407,1743,409,1744,380,1771,380,696,380,696,405,1747,406,669,380,29357,5067,2130,380,1771,380,697,379,696,380,696,379,1772,380,696,380,695,405,672,379,696,380,1771,406,670,407,1744,380,1772,380,696,380,1771,380,1772,380,1772,406,1744,407,1745,380,696,380,1772,379,697,405,670,380,696,379,696,380,696,380,696,380,1771,380,696,406,671,378,1771,407,671,379,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,1772,379,1771,381,695,380,697,379,1771,381,1771,380,1771,380,696,380,696,380,696,379,697,379,696,380,696,380,696,379,696,380,696,380,1771,381,695,382,694,380,695,381,695,381,1771,380,696,380,696,379,696,380,696,380,695,381,696,433,642,406,670,380,695,407,669,380,696,380,696,380,695,380,695,381,696,380,696,405,671,406,669,406,670,380,695,380,696,380,696,380,1771,380,696,380,696,380,695,406,1746,380,1773,405,1745,380,1771,380,1773,379,697,405,1746,379,696,380,696,379,696,406,670,380,695,381,696,406,670,379,696,380,696,380,695,406,670,380,695,381,696,380,696,379,1772,380,695,380,696,380,696,380,696,379,696,406,670,380,697,379,696,379,697,379,697,379,696,380,696,379,696,380,696,381,695,379,697,379,697,379,696,380,696,380,696,379,697,379,696,380,695,381,695,380,697,379,696,380,1771,380,695,381,1771,380,1771,381,695,407,1745,405,1747,379,696,380}, //17C +{5044,2129,381,1772,379,696,406,670,405,671,380,1771,380,696,406,668,382,696,379,696,380,1771,380,696,380,1771,381,1771,380,695,381,1771,380,1772,380,1771,381,1772,379,1771,381,695,380,1772,406,670,379,696,380,696,379,697,380,695,381,695,380,1772,380,695,380,696,380,1771,380,696,380,696,380,696,380,1771,380,696,380,695,381,695,380,696,380,695,381,695,380,696,380,696,380,696,379,696,381,695,380,696,380,695,381,696,379,1772,380,1771,380,1772,380,696,379,696,380,1772,380,695,380,29381,5043,2130,380,1771,381,695,380,696,380,696,380,1771,380,695,381,696,380,696,379,696,380,1771,406,671,379,1771,381,1770,381,696,380,1771,380,1772,380,1771,406,1745,381,1771,380,696,380,1771,407,669,380,697,379,696,380,696,379,697,379,696,380,1771,380,696,380,696,380,1771,406,670,380,696,380,695,380,697,379,696,380,695,381,696,380,695,380,696,380,1770,381,1772,380,696,404,672,379,1772,380,1771,380,1772,380,695,380,697,379,697,379,696,380,696,379,696,380,696,380,695,380,696,380,1771,381,696,379,696,405,671,380,696,380,1771,380,696,380,696,380,696,379,696,380,696,380,695,381,696,379,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,696,380,695,406,670,380,696,380,1771,381,695,380,696,380,1771,380,696,380,696,380,696,380,1771,380,1772,379,1772,380,1772,379,1772,379,697,405,1746,380,695,381,696,379,696,380,696,405,671,379,696,407,669,380,696,379,696,405,672,379,696,379,696,407,669,380,696,380,1772,379,696,405,671,380,696,379,696,406,670,380,695,381,696,405,670,406,670,406,669,380,696,380,696,405,671,379,696,406,670,405,672,405,669,381,695,407,669,380,696,405,671,379,696,380,695,407,670,379,696,407,669,406,1745,407,1744,408,1744,407,1745,405,671,406,1745,406,1745,406,670,406}, //18C +{5044,2130,380,1771,379,697,380,696,380,696,379,1772,380,696,380,696,380,695,380,695,381,1772,379,697,379,1772,380,1771,380,695,381,1772,379,1771,381,1772,379,1773,379,1771,380,695,381,1771,381,696,379,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,696,380,1771,380,696,380,696,379,697,379,1773,379,695,381,695,380,697,379,695,381,696,380,696,379,696,380,695,381,696,380,695,380,696,380,696,379,696,380,696,380,1771,381,1770,381,1771,381,695,380,696,380,1772,379,696,380,29380,5044,2130,380,1771,380,695,381,696,380,696,379,1772,405,671,380,696,379,696,380,695,381,1772,379,695,381,1771,380,1772,380,696,380,1771,380,1771,381,1771,406,1745,381,1770,381,696,380,1771,405,672,379,696,380,696,380,695,380,696,380,695,381,1772,405,670,405,670,381,1771,380,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,696,380,1771,380,1772,405,671,380,695,380,1772,380,1771,380,1771,380,698,378,696,380,695,381,695,381,694,381,696,380,696,380,696,379,696,380,1772,380,694,381,696,380,696,380,694,381,1772,380,695,381,695,380,696,380,695,381,695,380,696,380,696,380,696,380,696,379,696,380,695,381,695,381,695,380,697,379,695,381,696,380,695,380,696,380,696,380,695,381,1771,380,696,380,1770,381,696,380,695,381,696,387,1763,381,1772,379,1771,381,1771,380,1771,381,696,379,1771,381,695,380,695,381,696,380,695,383,693,380,696,380,696,380,695,380,700,376,696,380,696,379,696,380,697,379,696,380,1771,407,670,379,696,379,696,380,696,380,696,380,696,380,695,380,697,379,695,380,696,380,697,379,696,379,697,379,695,407,670,380,696,379,697,379,696,380,696,380,696,406,669,380,696,406,670,379,696,380,696,380,696,380,1771,380,696,380,696,379,697,406,1745,406,1745,406,1745,407,669,406}, //19C +{5069,2104,406,1745,380,696,380,700,376,696,380,1771,380,696,380,696,379,696,380,697,379,1772,406,669,407,1744,407,1745,380,697,379,1771,381,1770,407,1745,406,1746,380,1772,406,669,405,1746,381,695,380,696,406,670,406,670,379,697,379,696,406,1746,379,696,380,696,380,1772,379,696,406,670,405,670,381,1770,381,696,380,695,380,696,406,670,380,696,380,696,406,669,380,696,380,696,380,696,379,696,382,694,380,696,380,696,379,1772,384,1767,380,1772,406,675,374,696,380,1771,381,695,407,29354,5043,2130,380,1771,407,670,405,671,379,696,380,1772,380,695,380,696,380,696,380,695,381,1770,381,696,406,1745,406,1745,381,696,379,1771,381,1772,405,1745,407,1745,380,1772,379,697,379,1772,380,696,406,670,379,696,380,696,379,697,379,695,381,1771,381,696,379,696,380,1772,380,695,380,697,379,696,380,696,379,697,379,696,380,696,380,695,381,695,380,1771,381,1771,380,695,381,695,380,1772,380,1772,406,1745,380,695,381,695,380,697,379,696,407,669,405,671,379,696,380,696,380,696,380,1771,380,696,380,696,379,696,380,696,380,1772,379,696,380,696,407,669,379,696,380,696,380,696,405,670,406,671,379,696,380,695,381,696,379,696,380,696,380,696,379,696,380,696,380,696,380,694,381,696,380,1771,380,1771,381,696,379,1772,380,697,379,695,406,671,379,1772,380,1771,380,1772,380,1771,380,1772,380,695,380,1772,380,695,381,696,379,696,380,696,380,695,381,696,379,696,380,696,380,695,381,695,380,695,381,696,380,696,379,696,380,1771,381,696,379,696,380,696,405,670,405,671,407,669,380,695,380,697,406,670,379,695,381,695,381,695,380,696,380,696,380,696,380,696,379,696,380,695,381,696,379,696,380,696,380,695,380,697,405,670,380,696,405,671,379,1772,406,1746,379,696,406,670,380,1770,381,1771,381,1771,380,696,406}, //20C +{5065,2131,379,1773,379,696,379,696,380,697,379,1771,407,669,380,696,380,696,380,695,380,1772,380,696,380,1771,380,1772,380,696,379,1772,406,1746,410,1740,381,1771,380,1772,380,695,380,1772,380,696,405,671,381,694,380,696,380,696,380,696,379,1772,380,696,380,695,380,1771,381,695,381,696,405,671,379,1771,381,696,404,671,380,696,380,695,380,696,380,696,380,695,381,695,380,696,380,696,380,696,406,670,404,671,380,696,381,1770,380,1772,396,1754,381,695,381,696,405,1746,380,696,380,29380,5070,2103,407,1745,380,696,406,669,407,670,405,1746,380,695,380,696,405,671,380,696,380,1770,381,696,380,1770,381,1772,381,694,381,1770,407,1745,380,1772,380,1771,407,1744,381,695,380,1772,380,695,407,670,379,697,404,671,380,695,406,670,406,1745,381,695,380,697,379,1771,407,669,381,696,379,696,380,695,407,670,379,696,380,696,380,696,404,671,380,1772,380,1771,407,669,380,696,379,1772,380,1771,381,1771,380,696,406,670,380,695,406,670,407,668,407,669,381,695,380,696,380,696,379,1772,380,696,380,696,379,696,380,696,380,1771,381,695,380,696,380,696,405,671,379,696,380,696,380,696,406,669,380,697,379,696,380,696,405,670,380,696,380,695,407,669,380,696,380,695,381,696,406,670,379,696,380,696,380,1771,380,1771,407,669,380,696,407,669,380,1771,380,1772,380,1770,381,1771,381,1771,381,695,380,1772,380,695,380,697,406,669,379,696,380,697,379,696,406,669,381,695,380,696,380,696,380,695,381,695,380,696,380,695,380,1772,406,670,380,696,380,695,380,696,406,670,380,695,407,669,405,671,380,696,387,688,380,696,380,696,380,696,380,696,405,670,380,696,406,669,380,697,405,669,381,695,407,669,406,671,379,696,380,695,397,678,381,696,380,1771,381,696,379,1772,379,696,380,1771,406,1746,381,1770,407,670,404}, //21C +{5069,2103,381,1771,380,696,405,670,380,696,406,1745,381,695,381,696,405,670,380,696,380,1770,381,696,380,1771,406,1745,407,670,379,1772,380,1771,380,1772,380,1772,379,1772,405,671,405,1746,380,696,405,671,380,696,389,687,379,696,380,695,407,1745,380,696,407,667,408,1745,406,670,380,696,406,669,380,1772,405,671,379,696,406,670,380,696,379,696,405,671,380,696,406,670,406,670,379,696,405,670,407,670,379,696,380,696,380,1771,380,1772,380,1771,406,670,380,696,380,1771,380,696,406,29355,5043,2130,380,1771,380,696,380,695,406,671,379,1772,380,696,380,695,380,697,379,696,380,1771,380,696,380,1771,381,1771,380,695,381,1771,380,1772,380,1770,381,1772,380,1771,380,696,404,1747,381,694,381,696,380,696,379,696,380,697,379,696,380,1772,379,696,380,696,380,1772,379,697,379,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,1771,380,1772,380,695,380,696,380,1772,380,1771,380,1771,380,696,380,696,405,671,380,696,379,696,380,696,380,696,379,697,379,696,380,1771,406,670,380,695,381,696,379,697,406,1745,380,696,380,695,380,695,406,671,380,695,381,695,380,696,380,696,380,695,380,696,380,696,380,695,381,696,380,695,380,696,380,696,379,696,380,696,380,695,381,1771,380,696,380,1771,380,1772,380,696,405,671,379,696,380,1771,380,1772,380,1771,380,1771,381,1772,380,695,380,1771,381,696,380,695,380,696,379,697,379,696,380,696,380,696,380,695,380,696,380,696,406,669,406,671,380,695,380,696,380,1771,380,696,380,695,380,697,379,696,380,696,380,696,379,696,380,696,380,695,381,696,380,695,380,696,380,695,380,697,379,696,380,696,406,670,380,695,380,696,405,671,380,696,380,696,379,697,379,695,381,695,380,696,380,1771,381,1770,381,1771,381,695,380,1772,380,1771,407,1744,381,695,380}, //22C +{5042,2131,379,1772,380,696,406,670,379,696,380,1772,379,697,404,671,380,696,379,697,379,1773,379,696,379,1772,380,1772,379,697,379,1772,380,1771,380,1772,380,1771,380,1772,379,696,381,1771,380,696,379,696,380,696,380,696,379,697,379,697,379,1772,380,696,379,696,380,1772,379,696,380,696,379,697,379,1773,379,695,381,696,379,696,380,697,379,696,380,696,379,697,379,696,380,697,379,696,382,693,380,697,379,696,405,671,379,1772,380,1772,379,1772,405,671,379,696,380,1772,380,695,380,29382,5042,2130,380,1771,381,696,379,697,406,669,380,1771,380,696,380,696,380,696,380,696,379,1772,380,696,380,1771,380,1772,380,696,379,1772,380,1772,379,1772,379,1773,379,1772,380,695,380,1773,379,696,380,695,380,696,380,696,380,696,380,696,405,1746,380,695,408,669,379,1772,380,696,379,697,379,696,380,696,380,696,379,696,380,696,379,697,380,695,380,1772,379,1773,379,696,380,696,380,1771,380,1772,379,1771,407,670,406,670,380,696,379,696,379,698,379,696,380,695,380,696,380,696,379,1772,380,696,379,697,379,697,379,696,380,1772,379,697,405,670,380,696,380,696,405,671,379,696,380,696,380,695,380,696,406,670,380,696,406,669,407,669,380,695,408,669,380,698,377,697,378,697,380,696,380,695,380,1772,379,1772,406,1746,405,671,405,670,380,696,379,1772,380,1772,380,1771,380,1772,406,1745,380,696,380,1771,380,696,380,695,381,696,379,696,380,696,380,696,379,696,407,670,379,696,379,697,379,697,379,696,407,668,381,696,379,1772,380,696,379,697,405,670,380,696,380,696,379,697,379,696,380,696,379,697,379,697,404,671,380,696,380,695,380,696,380,697,379,695,406,670,381,695,380,696,406,670,379,697,379,696,380,696,405,675,376,695,407,669,406,1745,380,695,381,696,406,1746,379,1771,407,1745,406,1745,408,668,380}, //23C +{5043,2130,381,1771,380,696,380,696,380,695,381,1770,381,696,380,695,380,696,380,696,379,1772,380,697,379,1771,380,1772,380,696,380,1771,380,1772,380,1771,380,1772,379,1772,380,696,380,1771,406,671,379,696,405,670,380,695,408,669,380,695,407,1745,380,696,380,696,380,1771,380,696,380,695,381,696,379,1772,380,696,379,696,380,696,380,695,405,672,379,696,380,695,380,696,381,695,380,697,379,696,405,670,380,697,379,695,381,1772,404,1746,381,1772,379,696,380,696,380,1771,407,668,381,29380,5044,2130,380,1770,381,696,380,695,381,696,379,1772,380,696,405,671,379,697,379,696,379,1773,384,691,407,1744,381,1771,405,672,406,1745,404,1746,380,1772,380,1772,405,1745,381,696,380,1772,379,697,379,695,381,695,380,697,379,695,381,696,380,1772,379,696,380,695,380,1773,379,696,380,696,379,696,433,643,380,696,379,697,379,696,380,696,380,696,380,1771,380,1771,380,697,379,696,380,1772,379,1772,406,1745,406,670,380,695,381,695,380,696,380,697,379,696,380,696,379,696,380,695,381,1772,380,695,380,696,380,696,380,695,380,1772,380,696,380,695,380,697,379,696,380,695,380,697,405,670,405,671,380,696,379,696,380,696,380,696,379,697,379,696,380,697,403,672,380,695,380,696,380,696,380,1771,380,1771,407,1745,406,1745,381,696,379,696,380,697,379,1771,380,1772,380,1771,406,1746,406,1745,380,697,379,1772,379,697,379,696,380,696,379,697,379,697,379,695,381,696,406,669,380,697,379,696,380,696,379,697,379,695,381,696,379,1771,407,670,380,696,380,695,380,696,380,696,380,696,379,696,405,671,380,696,380,695,406,670,380,696,380,696,379,697,379,696,380,696,380,696,380,696,379,696,380,696,405,671,379,697,405,670,380,696,379,697,379,696,380,1772,379,1771,381,696,380,1770,381,1771,380,1773,379,1772,379,696,406}, //24C +{5043,2130,381,1772,379,696,380,695,380,696,380,1772,380,695,380,697,404,670,381,696,379,1772,406,670,380,1771,380,1772,406,669,406,1746,380,1772,379,1772,380,1771,380,1772,380,696,379,1772,380,696,380,696,379,697,379,697,379,696,379,697,384,1766,381,696,380,696,379,1772,380,697,404,670,380,696,380,1772,380,696,379,696,380,696,380,695,405,671,380,696,380,695,381,696,379,696,380,697,379,696,380,696,379,696,380,696,380,1772,379,1771,381,1772,379,696,406,670,380,1771,380,696,380,29381,5043,2130,380,1770,381,697,379,696,380,695,380,1771,381,696,379,696,380,697,379,696,380,1772,405,670,405,1747,379,1772,380,696,379,1772,380,1772,380,1771,380,1772,380,1772,379,696,380,1771,404,672,380,696,380,695,380,696,406,669,381,695,380,1772,380,696,379,696,380,1772,380,696,380,696,379,696,380,696,405,670,381,696,379,696,380,696,380,696,379,1772,380,1772,379,697,379,696,380,1771,380,1772,380,1771,380,696,380,696,380,696,379,697,379,697,379,696,379,696,407,670,379,696,380,1772,379,696,407,668,381,697,378,697,405,1746,380,695,380,697,379,695,381,696,380,695,380,696,380,696,380,696,407,669,379,696,380,696,380,696,379,697,379,695,381,697,379,696,380,696,379,696,380,697,379,696,379,697,379,696,393,684,378,1772,380,697,379,696,380,1770,381,1771,382,1770,406,1746,379,1773,379,696,380,1771,380,696,409,667,380,695,381,696,379,696,380,695,381,695,435,641,380,696,380,695,406,671,379,696,380,695,380,696,380,1772,380,695,380,697,379,696,380,696,406,670,379,697,379,696,380,696,380,695,406,670,406,670,380,695,380,696,380,696,380,696,379,697,379,695,381,696,380,696,379,696,380,696,380,696,380,696,380,695,380,696,380,696,380,1771,406,670,406,1745,380,1772,380,1772,379,1772,386,1765,380,696,380}, //25C +{5044,2129,408,1743,407,670,406,670,379,696,380,1772,406,669,407,669,407,669,383,692,408,1744,380,697,379,1771,406,1746,405,671,380,1771,380,1772,380,1771,380,1771,381,1772,405,669,407,1745,406,670,380,696,405,670,406,671,379,696,406,670,406,1746,405,670,406,670,405,1746,380,696,406,670,380,695,381,1771,406,670,380,695,406,670,380,696,405,671,406,669,380,696,380,696,380,695,380,696,380,696,380,695,406,670,407,669,380,1771,381,1771,380,1771,408,669,379,696,380,1771,380,696,406,29355,5043,2130,380,1772,380,696,406,669,407,670,379,1771,407,669,406,670,406,669,406,670,380,1772,380,695,380,1772,380,1772,380,696,406,1745,405,1746,407,1745,406,1745,380,1772,380,696,380,1771,380,695,381,695,380,696,380,696,380,696,380,694,381,1772,379,696,407,669,380,1772,379,696,406,670,407,669,380,695,381,695,380,696,380,696,380,696,379,697,379,1772,379,1772,406,670,380,695,380,1772,380,1771,381,1771,380,695,381,696,380,696,379,696,380,696,380,696,379,697,380,696,406,669,405,1746,380,696,406,670,379,697,379,695,381,1772,379,696,407,670,379,696,379,696,380,696,407,669,405,670,380,696,380,696,406,670,380,696,379,696,406,669,408,669,405,670,407,670,379,696,380,696,405,671,379,1772,379,696,406,671,379,696,380,1772,379,696,380,696,380,1772,406,1745,380,1771,380,1772,405,1746,406,670,380,1771,406,670,407,669,380,695,380,696,407,669,406,670,405,670,381,695,380,696,380,696,380,696,379,696,380,696,406,670,405,1746,404,672,405,670,380,697,405,669,381,695,381,696,379,697,404,671,380,696,405,670,380,696,380,697,378,697,380,695,380,696,380,695,380,697,404,672,379,696,380,696,380,696,406,669,380,696,380,696,379,697,379,695,407,1745,407,1745,380,1771,380,1772,406,1745,380,1771,381,1771,380,696,407}, //26C +{5043,2130,406,1746,379,696,380,697,405,670,380,1772,379,696,380,696,380,695,408,668,380,1772,405,671,405,1746,406,1745,381,696,405,1746,379,1772,380,1770,381,1772,407,1745,379,696,380,1772,380,695,386,691,404,670,381,696,380,696,379,697,379,1772,379,697,379,696,380,1772,380,695,406,670,407,669,380,1771,405,671,380,696,406,670,379,696,380,696,380,696,405,671,379,697,383,693,378,697,380,695,380,697,404,670,381,696,379,1771,381,1771,380,1772,406,670,379,696,406,1746,380,696,379,29381,5043,2130,406,1746,380,696,379,697,379,695,381,1772,379,695,381,697,379,696,379,697,379,1771,381,696,379,1773,379,1772,407,669,405,1746,379,1773,379,1772,380,1771,380,1772,379,697,405,1745,381,696,379,696,380,696,380,695,381,696,379,696,380,1772,405,671,379,697,379,1772,379,696,407,670,404,671,380,696,380,696,379,696,380,696,380,696,379,697,379,1771,380,1772,380,697,379,695,380,1771,381,1771,381,1772,379,696,405,671,405,670,380,697,379,696,379,697,379,697,405,671,379,696,379,1772,380,695,406,671,379,697,379,695,381,1771,380,696,380,696,380,696,379,696,406,671,405,669,380,697,379,697,405,670,380,696,379,697,379,696,380,696,406,670,379,697,379,696,405,671,379,697,379,697,383,693,379,1771,380,696,380,695,381,1772,379,696,380,696,380,1772,379,1772,379,1772,380,1771,406,1746,380,696,379,1772,380,697,381,694,379,697,379,696,380,697,405,670,379,696,380,697,379,696,406,670,379,697,379,696,380,695,406,670,406,1747,405,670,405,671,379,696,380,696,380,696,379,697,379,697,378,697,380,696,379,696,380,696,380,696,379,697,379,697,379,696,379,697,379,696,380,696,380,696,406,670,379,696,380,696,380,696,379,696,380,697,379,696,380,1771,407,668,381,696,380,696,379,697,379,697,379,696,379,1772,380}, //27C +{5044,2130,379,1773,379,696,380,695,381,696,405,1746,380,696,380,695,380,696,380,696,380,1771,380,697,379,1772,379,1771,407,670,380,1771,380,1772,380,1771,380,1772,380,1771,380,695,407,1745,380,696,380,696,380,696,379,697,379,696,380,696,380,1771,380,696,391,685,406,1745,380,696,405,670,405,672,379,1772,380,696,380,699,376,696,380,695,380,697,379,696,380,697,379,695,380,697,405,670,380,696,405,670,380,697,379,696,380,1771,380,1771,381,1771,380,696,380,696,380,1771,380,695,381,29380,5044,2129,381,1770,381,696,380,695,381,696,379,1772,406,670,380,696,379,696,380,696,380,1772,379,696,380,1772,379,1772,405,671,380,1772,379,1772,379,1772,406,1746,379,1771,381,696,380,1771,380,697,379,695,407,670,380,695,380,696,380,695,381,1771,380,695,407,670,405,1746,380,696,406,670,379,696,380,696,380,695,381,695,380,696,405,671,380,695,380,1772,380,1772,379,697,379,696,380,1771,408,1744,380,1771,380,696,380,695,391,686,380,695,407,669,380,695,381,696,380,696,379,696,380,1771,380,696,380,696,405,670,380,696,407,1744,381,696,407,669,379,696,380,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,696,405,671,379,696,380,696,404,672,379,696,380,697,379,696,380,1770,382,1771,379,697,379,697,379,1771,380,697,379,696,380,1772,379,1772,380,1771,380,1772,380,1771,380,696,380,1772,379,696,380,696,380,696,380,695,381,695,380,696,405,671,407,669,379,696,380,696,380,696,379,696,380,697,379,697,379,1771,380,696,380,696,406,669,380,697,379,695,381,696,379,696,406,671,379,696,380,695,380,697,379,697,405,670,380,695,380,697,379,696,407,669,380,696,404,671,380,696,380,696,379,696,380,696,380,696,379,697,433,642,380,1771,406,1746,380,696,380,696,379,696,380,696,380,697,378,1772,380}, //28C +{5043,2129,381,1772,380,696,380,696,379,697,382,1769,406,671,378,695,407,674,375,696,380,1773,406,669,379,1772,380,1772,379,697,379,1772,380,1771,380,1772,380,1772,379,1772,380,696,380,1772,379,696,380,696,379,697,379,696,380,696,379,697,379,1772,407,669,379,697,380,1771,407,669,379,697,380,696,379,1772,379,697,379,697,379,696,379,696,406,671,379,696,406,669,381,695,380,697,406,669,380,696,379,697,379,696,380,696,379,1772,406,1745,381,1772,379,696,380,697,383,1766,406,671,380,29381,5068,2105,379,1772,380,697,379,696,380,696,380,1770,381,696,379,696,380,697,379,696,380,1771,380,697,379,1772,379,1772,380,696,380,1771,380,1772,379,1773,379,1772,380,1771,380,696,380,1771,380,696,380,696,380,696,379,697,379,697,379,695,381,1771,380,696,380,696,379,1772,406,670,380,696,379,697,379,696,405,671,380,696,379,696,406,671,379,696,379,1772,407,1745,380,695,380,697,405,1745,407,1745,380,1771,406,670,380,696,406,670,379,697,379,697,379,696,380,695,407,669,380,696,380,1771,380,696,380,697,379,696,379,697,379,1772,380,696,379,696,406,671,379,696,405,671,380,696,406,669,405,671,379,697,379,697,379,696,406,670,406,670,379,696,406,670,380,695,401,676,405,671,379,696,380,697,378,696,380,1771,381,695,380,1771,381,696,379,696,380,1771,381,1772,405,1746,380,1771,380,1772,379,696,380,1772,380,695,408,669,405,671,379,695,380,697,405,670,405,671,380,696,406,670,379,696,380,695,381,696,379,697,405,671,379,1771,380,696,380,697,379,695,381,695,406,671,379,696,380,696,380,696,379,696,379,697,379,696,380,696,380,696,380,696,380,696,405,670,380,696,380,696,406,669,406,670,380,696,380,695,381,696,379,695,381,695,381,696,404,1747,380,696,380,1772,379,696,380,696,380,695,380,696,406,1745,406}, //29C +{5043,2130,380,1771,407,669,406,670,380,695,406,1746,434,642,380,695,407,669,380,696,406,1746,379,696,380,1772,379,1773,405,670,380,1772,379,1773,405,1745,380,1772,380,1771,380,696,380,1772,379,697,405,670,379,697,379,696,407,669,380,696,380,1772,379,695,407,670,380,1771,380,697,379,696,405,671,379,1771,381,696,405,670,380,696,380,696,379,696,380,697,379,697,379,695,406,670,407,669,407,669,380,695,380,696,407,669,405,1747,379,1772,405,1747,406,669,406,669,407,1745,406,670,380,29381,5043,2130,380,1771,406,670,380,696,380,695,381,1771,380,696,379,697,379,696,380,696,380,1771,380,696,406,1746,379,1772,405,671,406,1745,380,1772,406,1746,379,1771,381,1771,380,696,405,1746,380,696,379,697,406,670,380,695,380,696,380,696,406,1745,380,695,381,695,380,1772,380,696,405,670,381,695,406,671,379,697,378,696,380,696,380,697,379,695,381,1771,380,1771,405,671,380,696,406,1745,382,1769,381,1771,380,696,380,696,380,696,379,695,381,696,380,697,379,696,379,696,404,672,380,1770,381,696,380,696,380,696,405,670,380,1772,405,671,379,696,380,697,379,696,405,671,379,695,381,697,379,696,379,696,406,670,405,671,380,696,405,670,380,696,380,696,380,695,381,695,380,695,381,695,380,1771,408,669,406,1745,380,696,380,1772,405,671,406,668,381,1771,380,1771,381,1772,379,1771,381,1771,380,696,380,1772,379,696,380,696,380,696,405,671,379,696,380,696,380,695,407,668,407,671,379,696,380,695,380,697,379,696,406,669,381,1771,380,697,379,696,405,670,380,696,380,696,380,695,406,670,407,668,407,669,407,670,380,695,406,670,380,696,380,696,379,697,379,696,380,695,399,677,380,696,380,695,406,669,381,696,380,695,381,696,379,696,380,696,380,1771,405,1747,380,1771,405,672,379,696,380,695,381,696,379,1771,407}, //30C +{5043,2129,383,1769,380,700,375,696,380,696,405,1746,380,696,406,670,380,696,380,696,379,1772,380,696,380,1772,379,1772,406,669,380,1772,380,1772,379,1772,380,1771,407,1745,404,672,379,1771,381,696,379,696,380,696,380,697,379,696,380,696,379,1773,379,696,405,671,379,1772,405,671,407,669,379,696,380,1771,381,695,380,696,380,696,405,670,380,696,380,696,406,670,379,696,406,670,380,696,380,696,405,671,379,697,379,696,406,1745,380,1771,380,1772,406,670,380,696,405,1746,380,696,380,29380,5043,2130,380,1772,406,669,380,697,379,696,380,1772,379,697,407,668,380,696,406,670,379,1772,399,677,379,1772,380,1772,379,697,379,1772,379,1772,380,1772,405,1746,380,1772,380,696,405,1746,380,695,407,670,379,697,379,696,379,697,379,696,380,1772,379,697,379,696,380,1772,379,697,379,696,380,696,379,697,405,671,379,697,379,696,380,696,379,697,379,1771,381,1771,380,696,380,696,379,1772,380,1772,405,1746,380,696,380,695,380,697,379,696,380,696,379,697,379,696,380,697,379,696,379,1772,380,695,406,671,379,697,379,695,381,1772,380,696,379,696,379,697,405,670,380,696,380,696,380,695,380,696,380,697,404,671,406,670,405,671,379,696,380,695,380,697,379,696,380,696,379,696,405,671,380,697,379,1771,380,1772,405,671,379,1772,380,696,380,695,407,1745,406,1745,380,1772,380,1772,379,1772,380,696,380,1771,405,671,379,696,380,696,380,696,405,671,379,697,379,696,406,670,380,696,379,697,379,696,380,696,406,670,379,697,379,1772,379,697,379,696,380,696,380,696,379,696,380,696,407,670,406,668,406,670,380,696,380,696,379,697,379,696,380,696,379,697,406,669,380,696,380,696,379,696,380,697,379,697,378,697,379,697,405,670,380,695,380,697,379,1773,379,696,407,668,381,1771,380,696,379,696,406,671,379,1772,379}, //31C +{5070,2104,379,1772,380,696,407,669,379,697,379,1772,379,696,380,696,380,696,380,695,380,1771,381,696,380,1771,380,1771,380,696,405,1747,391,1760,380,1771,381,1771,407,1745,380,695,380,1772,380,696,405,671,379,696,380,696,379,697,379,696,380,1772,380,696,379,696,380,1772,379,697,379,696,380,695,406,1746,380,696,380,696,380,696,379,697,379,696,380,696,391,685,379,696,383,693,380,696,380,696,379,696,382,694,380,696,379,1772,380,1771,380,1772,380,696,380,695,380,1771,381,696,380,29380,5043,2131,379,1772,380,696,380,696,398,677,380,1772,405,671,379,696,380,696,380,696,405,1746,406,669,380,1772,380,1772,379,696,380,1772,379,1772,380,1772,379,1772,380,1772,406,670,405,1746,380,695,380,696,405,671,380,696,380,696,379,696,380,1771,380,697,379,696,406,1746,380,695,380,696,380,696,380,695,406,670,380,697,379,695,406,671,405,671,379,1772,406,1745,380,695,380,697,379,1773,379,1771,381,1771,380,696,380,696,379,696,380,697,379,696,380,696,379,697,379,696,405,670,381,1771,380,696,379,696,406,670,380,696,405,1746,406,671,379,696,380,696,379,697,379,696,380,696,380,695,380,696,406,670,380,695,381,696,404,671,381,695,380,695,381,696,379,696,380,696,379,696,380,697,379,1771,381,1771,380,1772,379,696,380,1771,381,695,381,695,380,1772,380,1771,380,1772,380,1772,379,1772,379,697,379,1771,381,696,379,696,380,696,380,696,379,696,406,671,379,696,406,670,380,695,380,696,380,696,380,696,404,671,380,695,381,1771,380,696,380,696,379,697,380,696,379,696,380,696,397,678,380,697,379,696,380,696,379,697,403,673,379,695,380,697,379,697,406,669,380,696,380,696,379,697,379,696,380,696,405,671,379,697,379,697,379,696,379,697,379,1772,380,1771,380,696,380,1772,379,696,380,696,407,668,380,1771,381} //32C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/IRcode_york.txt b/src/IRcode_york.txt new file mode 100644 index 0000000..4090242 --- /dev/null +++ b/src/IRcode_york.txt @@ -0,0 +1,133 @@ +//york +//30-18 + +//cool auto + +//18 +{8983,4472,569,630,569,627,570,1671,569,629,568,1670,570,628,569,628,569,628,569,631,568,1669,569,630,570,627,569,628,569,631,569,1668,569,1671,569,628,569,629,569,630,569,627,569,629,568,630,570,627,569,628,570,630,569,628,569,628,569,629,569,628,569,627,570,630,569,628,569,628,569,628,568,631,568,629,569,628,568,631,568,1669,569,631,568,1669,569,1671,569,627,569,629,568}, +//19 +{8978,4472,568,631,568,630,567,1672,567,629,592,1648,568,629,567,629,567,631,566,631,568,1669,568,631,568,630,566,630,567,1676,563,630,567,628,569,631,567,630,567,629,568,630,568,630,567,630,567,631,568,629,567,629,593,606,568,629,567,630,592,606,567,630,567,630,567,631,593,604,595,602,567,631,568,629,593,603,594,605,591,1646,594,603,593,1647,594,602,593,1647,593,1645,593}, +//20 +{9005,4470,571,629,569,626,571,1670,570,627,569,1670,571,626,570,627,570,627,570,628,570,1668,570,629,569,627,570,626,570,1670,569,627,570,1670,570,627,569,627,570,629,570,627,569,627,569,630,569,627,570,627,570,629,569,628,568,629,569,629,569,628,569,627,570,629,569,628,569,627,569,628,569,630,569,627,570,627,569,629,570,1667,570,629,570,1668,569,627,569,1671,568,627,570}, +//21 +{8981,4473,569,630,569,627,570,1670,570,627,570,1669,570,627,570,627,570,628,569,630,569,1668,569,631,569,628,568,628,569,1671,570,1668,568,631,569,627,569,628,569,630,569,627,570,628,569,629,569,628,569,628,569,630,569,628,568,628,570,629,569,628,570,626,570,630,568,628,570,627,570,627,569,630,569,628,569,627,570,630,568,1668,570,629,569,1669,569,628,569,630,569,1669,569}, +//22 +{9008,4445,596,603,597,600,621,1616,624,575,595,1643,595,605,621,575,595,602,596,603,622,1616,596,601,622,577,595,602,623,1617,622,1616,596,1644,625,572,623,573,597,604,594,602,597,599,595,606,593,603,594,602,595,604,595,602,596,600,596,604,596,601,622,575,622,576,596,601,595,602,596,601,594,605,596,601,595,602,595,603,597,1641,596,604,600,1637,596,601,594,604,596,601,596}, +//23 +{9040,4413,599,601,598,598,625,1614,599,598,599,1641,625,572,624,572,599,598,625,574,626,1611,625,574,599,598,626,1613,627,570,653,544,598,599,598,601,626,570,599,598,626,573,625,573,598,598,599,599,599,599,598,598,653,546,626,571,625,571,625,574,599,598,624,572,599,600,624,573,626,570,599,601,624,572,626,571,598,601,625,1612,626,571,624,575,598,1639,599,1640,600,1639,598}, +//24 +{9010,4443,598,599,598,601,598,1639,598,601,599,1638,599,601,598,598,598,599,598,599,598,1641,599,598,598,600,599,1639,598,601,598,598,599,1638,599,601,598,598,598,599,598,601,598,598,599,598,598,601,598,599,598,599,598,600,598,598,599,598,599,600,598,598,599,598,599,597,599,601,598,599,597,599,598,601,597,599,598,599,597,601,598,599,598,1642,598,599,597,600,597,602,597}, +//25 +{9006,4445,595,605,594,602,594,1646,595,602,594,1645,622,576,594,602,593,604,596,603,594,1643,595,605,594,602,595,1645,594,603,594,1643,595,604,595,602,594,603,594,604,595,602,595,602,594,604,594,603,594,603,594,604,595,602,594,603,594,604,596,601,595,602,595,604,594,603,594,602,594,604,593,605,594,603,594,602,595,605,593,1644,594,605,595,602,594,1643,594,605,594,1643,594}, +//26 +{8981,4471,570,632,567,628,569,1671,569,628,569,1671,569,627,569,628,568,629,569,630,569,1668,569,630,569,628,569,1670,569,629,568,1668,569,1672,568,628,569,630,569,628,568,632,565,631,568,628,568,629,568,629,568,631,568,628,568,629,568,631,568,628,569,629,568,630,568,629,568,628,593,606,568,629,568,629,568,631,593,604,568,1671,569,628,568,628,568,1672,568,628,569,628,568}, +//27 +{8981,4472,569,631,568,629,594,1645,593,604,568,1672,575,622,593,604,593,604,593,606,592,1645,593,606,593,605,567,1673,568,1669,568,629,568,631,594,603,568,629,567,632,592,605,592,604,594,605,567,629,568,630,593,605,569,628,568,629,594,604,569,629,593,604,568,631,593,604,594,603,593,603,593,606,568,628,593,605,567,632,567,1670,594,605,568,630,592,604,593,1646,568,1670,567}, +//28 +{8980,4473,568,631,568,629,568,1671,567,630,567,1672,568,629,567,630,567,630,568,632,566,1671,567,631,568,629,567,1673,567,1670,592,605,567,1672,568,629,568,631,568,629,567,629,594,605,568,629,567,629,593,604,567,632,567,630,567,629,568,631,588,608,568,629,568,631,568,629,568,629,568,630,568,629,568,629,568,631,568,629,568,1671,568,630,567,629,568,629,592,1648,567,629,568}, +//29 +{8980,4472,569,630,569,628,569,1671,568,628,568,1672,568,628,569,628,568,629,568,631,569,1668,569,631,567,629,568,1671,568,1670,568,1671,569,628,568,629,567,631,568,629,568,628,568,631,568,628,568,629,568,629,568,632,567,629,568,629,568,630,568,629,568,629,567,632,567,629,569,628,568,631,568,629,567,629,568,631,567,630,567,1672,567,629,568,630,567,629,568,631,568,1670,567}, +//30 +{9004,4447,594,604,595,602,594,1646,593,603,594,1646,595,602,593,603,594,603,594,604,594,1644,594,605,593,604,594,1645,595,1642,595,1646,594,1643,595,602,594,605,594,602,595,602,594,605,594,602,594,603,593,606,593,603,595,602,594,605,595,602,594,602,595,605,594,602,595,602,594,605,595,602,593,603,595,604,594,603,594,605,592,1645,593,603,595,603,594,605,594,602,594,603,593}, + +//cool low + +//18 +{9007,4439,600,600,598,597,600,1636,600,599,599,1637,599,599,600,596,599,597,600,599,599,1637,599,597,600,599,599,596,600,597,599,1639,599,1638,598,599,600,599,597,597,599,598,600,597,599,596,600,599,599,597,599,597,599,599,600,596,600,596,600,598,600,596,600,597,599,599,600,597,599,596,600,599,599,596,600,596,600,599,599,596,600,597,599,1639,600,1636,600,1639,599,597,599}, +//19 +{9008,4439,600,599,599,597,600,1637,599,599,600,1637,599,599,600,596,600,597,600,598,600,1637,599,598,598,600,599,596,600,1640,599,596,601,596,599,599,600,597,599,596,600,598,600,597,599,597,600,599,599,597,599,597,599,597,599,599,600,596,600,596,600,599,599,597,599,597,600,599,599,596,599,596,600,599,600,596,600,597,599,599,599,597,599,1637,599,1639,600,597,599,1638,600}, +//20 +{9007,4440,599,600,654,543,654,1582,651,548,597,1639,653,545,653,544,652,544,598,601,598,1638,654,542,653,545,599,598,654,1584,654,542,652,1584,653,546,653,544,652,544,598,601,654,542,653,543,654,544,653,544,653,543,654,545,652,544,653,543,654,544,598,599,598,598,653,545,651,546,597,599,653,545,652,544,652,543,652,547,598,599,652,543,598,1641,653,1582,654,546,653,542,654}, +//21 +{9006,4439,599,600,598,598,599,1638,598,601,598,1638,599,600,598,598,598,598,599,600,598,1638,599,598,598,600,598,598,598,1641,598,1638,599,598,598,600,598,598,599,597,599,600,598,598,598,598,598,600,599,598,598,598,598,600,599,597,599,597,599,599,599,598,598,597,599,600,598,598,598,598,598,600,598,598,598,598,598,600,598,598,599,597,599,1640,598,598,598,1640,599,1638,599}, +//22 +{9059,4389,597,601,653,544,651,1585,651,548,651,1586,652,547,596,599,653,544,651,547,653,1584,651,545,651,548,597,600,651,1588,648,1588,651,1588,653,544,652,544,650,548,652,544,653,543,598,601,598,598,652,545,597,602,651,544,651,546,650,548,597,599,652,545,652,546,653,543,597,599,652,545,652,546,601,595,653,543,598,601,651,545,652,545,597,1641,597,599,598,1641,628,569,651}, +//23 +{9006,4440,599,600,598,599,597,1639,598,600,598,1638,599,600,599,598,598,599,598,600,598,1639,598,598,599,600,598,1639,598,601,598,598,598,599,598,600,598,598,599,598,598,600,598,598,599,598,598,601,598,599,598,598,598,598,598,601,598,598,598,598,599,599,599,598,598,598,598,601,598,599,597,599,598,600,598,598,599,598,598,600,599,597,599,1638,599,600,598,598,599,1640,598}, +//24 +{9007,4440,598,601,597,599,598,1638,599,600,598,1638,598,601,598,599,597,599,597,601,598,1638,598,599,598,600,598,1639,598,601,597,598,599,1638,598,601,597,599,598,598,603,595,598,598,598,599,597,601,598,598,598,598,598,601,598,598,598,598,598,601,598,598,598,598,597,602,597,599,597,599,598,600,598,599,598,598,598,601,597,599,598,598,598,1641,598,599,597,599,597,601,597}, +//25 +{9060,4389,599,601,597,599,598,1639,598,600,598,1639,598,601,597,599,598,599,597,601,598,1638,598,599,598,600,599,1638,598,601,597,1639,598,599,598,601,597,599,598,598,598,600,599,598,597,599,597,601,598,599,597,599,597,600,599,598,598,598,598,601,598,599,598,598,598,601,598,598,598,599,597,601,598,598,598,599,598,600,598,599,598,598,598,599,598,1641,598,1640,599,1639,598}, +//26 +{9006,4440,598,601,598,599,597,1639,598,601,651,1586,597,601,598,598,598,599,598,601,597,1639,598,598,598,601,598,1638,598,600,598,1639,597,1641,598,598,598,598,598,601,597,599,597,599,598,601,649,546,599,598,598,601,597,599,597,598,598,601,598,598,598,598,598,601,597,599,598,598,598,599,597,601,598,598,598,599,597,601,598,598,598,598,598,600,598,1638,598,1640,599,598,598}, +//27 +{9060,4387,680,519,598,598,598,1639,598,600,598,1639,598,600,652,545,597,599,651,547,653,1584,653,543,598,600,653,1584,652,1587,598,598,654,543,600,598,654,542,599,598,654,544,653,544,652,544,651,547,651,546,652,544,598,600,654,542,651,546,650,548,651,545,598,598,598,600,654,542,599,597,655,544,653,543,652,544,655,543,598,598,598,599,654,542,651,1586,653,544,598,1640,652}, +//28 +{9012,4440,600,599,600,597,599,1638,600,599,599,1639,599,599,600,597,600,597,599,599,600,1638,599,597,600,599,600,1637,600,1640,599,597,600,1640,599,597,600,597,599,600,600,596,600,597,600,600,598,597,600,597,600,599,600,597,599,597,600,599,600,596,600,597,600,599,599,597,600,597,600,597,599,599,600,597,599,598,599,599,600,596,600,598,599,599,600,1637,600,599,599,597,600}, +//29 +{9063,4386,599,600,599,598,598,1638,598,600,599,1638,599,600,598,598,599,598,598,601,597,1639,599,597,599,600,599,1638,652,1587,599,1638,599,600,598,598,598,599,598,600,599,597,599,598,599,600,682,514,598,598,653,546,599,598,598,597,599,600,599,598,598,599,652,546,651,546,598,598,599,597,599,600,653,543,598,597,600,600,652,544,599,597,599,600,599,597,599,1640,599,1637,600}, +//30 +{9007,4442,597,602,597,600,596,1640,653,545,598,1640,653,546,596,600,597,599,597,602,597,1640,597,600,596,602,597,1639,598,1642,597,1640,597,1641,599,599,597,601,597,600,597,599,597,601,598,599,597,599,653,544,653,545,598,598,655,541,599,600,655,541,598,599,597,601,598,599,598,598,598,601,597,599,654,543,597,601,598,598,598,599,597,600,655,543,598,599,597,1642,598,599,597}, + + +//cool mid + +//18 +{9027,4441,654,546,598,598,598,1640,598,600,652,1585,598,601,598,598,598,598,655,544,653,1584,652,1587,652,545,598,599,597,601,652,1585,598,1641,598,599,597,599,597,600,599,599,651,545,651,548,597,599,651,545,598,601,653,543,652,544,599,600,653,544,652,544,652,547,597,600,597,599,597,599,598,600,678,519,653,543,598,601,598,599,650,546,598,1641,598,1639,598,601,598,599,653}, +//19 +{9093,4359,598,601,654,543,652,1584,599,601,661,1576,681,518,652,544,650,547,653,546,652,1585,652,1587,652,544,654,543,654,1586,652,545,598,598,653,546,598,599,680,516,653,545,654,543,652,545,654,544,654,544,652,544,654,545,652,544,598,599,653,546,680,516,652,544,598,602,654,542,653,544,654,545,654,542,598,599,682,516,654,543,652,545,598,1641,655,542,597,1642,598,1639,599}, +//20 +{9063,4387,598,601,598,599,652,1584,652,547,652,1585,598,601,652,544,653,544,653,545,651,1586,651,1588,598,599,598,599,653,1586,597,599,652,1587,654,543,652,545,651,547,652,545,653,543,598,601,653,543,598,599,597,602,652,544,598,598,598,602,651,544,598,599,598,600,652,545,653,543,650,546,654,546,597,599,653,543,651,547,652,545,598,599,598,1641,651,546,597,1641,652,545,653}, +//21 +{9009,4441,599,600,598,599,598,1639,598,601,598,1639,598,601,597,599,598,599,597,602,597,1639,598,1642,598,599,598,599,597,1642,598,1640,597,601,598,599,597,600,597,602,597,599,597,600,597,601,598,599,597,599,598,601,597,599,598,598,598,601,598,599,598,599,597,601,598,599,598,598,598,599,598,601,597,599,598,598,598,601,597,599,598,599,598,1642,597,599,597,602,597,1639,598}, +//22 +{9009,4441,599,600,598,599,598,1639,598,601,598,1639,598,601,597,599,598,599,597,602,597,1639,598,1642,598,599,598,599,597,1642,598,1640,597,601,598,599,597,600,597,602,597,599,597,600,597,601,598,599,597,599,598,601,597,599,598,598,598,601,598,599,598,599,597,601,598,599,598,598,598,599,598,601,597,599,598,598,598,601,597,599,598,599,598,1642,597,599,597,602,597,1639,598}, +//23 +{9029,4441,598,601,597,599,650,1590,598,598,598,1641,598,599,651,545,598,598,599,601,598,1639,598,1642,597,599,650,1589,598,599,597,598,599,601,597,599,598,598,598,602,597,599,598,598,598,600,598,599,598,598,598,600,599,598,598,598,598,602,597,598,599,598,598,601,598,598,598,599,598,598,598,601,598,598,598,598,598,601,598,598,598,598,598,601,598,1640,597,1641,598,1639,598}, +//24 +{9010,4441,598,601,597,599,598,1639,598,601,598,1639,598,601,598,598,598,599,598,601,598,1639,598,1641,599,598,598,1641,652,545,598,598,598,1642,598,599,598,599,597,601,598,599,598,599,597,601,598,599,597,600,597,602,597,599,598,599,598,601,651,545,598,599,597,601,652,545,598,599,597,599,598,601,599,597,598,599,598,600,599,598,598,599,598,601,598,1639,598,1641,598,599,598}, +//25 +{9008,4441,598,601,598,598,598,1639,651,548,599,1639,598,600,598,599,652,545,598,601,597,1640,598,1640,653,544,598,1641,653,544,651,1586,652,548,597,599,653,543,652,546,653,544,598,598,598,600,598,599,598,598,650,549,652,545,597,599,651,548,653,543,598,599,598,601,650,547,597,599,652,544,651,547,598,599,598,599,651,547,598,598,652,545,598,600,651,1586,651,548,598,1638,653}, +//26 +{9009,4441,598,602,598,599,597,1639,598,601,598,1639,598,601,598,598,598,599,650,549,598,1639,598,1641,598,599,598,1641,598,599,651,1586,651,1588,599,598,653,546,598,598,651,546,598,601,598,598,598,599,598,599,597,601,598,599,597,599,598,601,598,599,597,599,598,601,598,599,598,598,598,601,598,598,598,599,651,547,651,546,598,598,598,601,598,598,599,1639,598,600,598,599,598}, +//27 +{9007,4441,598,601,597,599,598,1638,599,601,598,1638,598,601,598,599,597,599,598,601,598,1639,598,1641,598,598,598,1642,597,1640,597,599,598,601,598,599,598,598,598,600,599,598,598,599,598,600,598,598,598,598,599,601,598,598,598,598,598,601,598,598,598,598,598,601,598,599,597,599,597,599,598,600,598,599,597,599,598,601,597,599,598,599,597,601,598,598,598,1641,598,1639,598}, +//28 +{9007,4441,598,601,597,599,598,1638,599,601,598,1638,598,601,598,599,597,599,598,601,598,1639,598,1641,598,598,598,1642,597,1640,597,599,598,601,598,599,598,598,598,600,599,598,598,599,598,600,598,598,598,598,599,601,598,598,598,598,598,601,598,598,598,598,598,601,598,599,597,599,597,599,598,600,598,599,597,599,598,601,597,599,598,599,597,601,598,598,598,1641,598,1639,598}, +//29 +{9062,4386,599,601,598,599,653,1583,652,547,652,1585,653,546,651,546,598,599,597,602,651,1585,650,1590,649,548,651,1587,598,1640,652,1587,598,599,651,545,598,601,598,599,598,598,598,601,598,598,597,599,598,599,600,598,598,598,598,599,598,601,597,599,597,599,598,601,598,599,597,599,598,600,598,599,598,599,597,601,597,599,598,599,598,601,597,599,598,598,598,601,598,1639,597}, +//30 +{9010,4441,599,601,598,599,597,1640,598,601,598,1639,598,601,598,599,649,547,598,601,598,1639,598,1641,598,599,598,1642,598,1639,598,1641,598,1639,598,599,598,601,598,599,597,599,598,601,598,599,598,598,598,601,598,599,598,598,599,601,597,599,598,599,597,602,597,599,598,599,597,601,598,598,598,598,651,548,598,599,597,599,650,549,598,598,598,599,598,598,598,601,598,598,598}, + +//cool high + +//18 +{9010,4441,598,601,654,543,598,1641,652,545,654,1585,598,599,652,544,654,543,598,600,652,1585,598,601,598,1639,652,547,598,598,652,1585,598,1642,654,542,653,545,653,544,652,544,598,601,598,599,652,544,598,598,598,604,648,546,598,598,653,545,650,547,598,598,654,544,598,599,598,598,652,547,652,545,598,597,599,600,654,543,652,544,652,547,653,1584,598,1642,654,542,650,1589,652}, +//19 +{9008,4442,598,601,598,599,597,1640,597,602,597,1640,597,602,597,604,593,599,597,601,598,1640,597,599,598,1641,597,599,599,1641,597,599,598,599,597,601,597,600,597,599,598,601,598,599,597,599,598,601,597,600,597,599,597,602,597,599,598,599,597,601,598,599,597,599,597,601,598,599,597,599,598,601,597,599,598,599,597,602,597,599,598,599,597,1642,598,1639,598,601,598,599,598}, +//20 +{9061,4389,598,601,599,598,650,1587,598,601,650,1587,598,601,598,598,651,546,651,547,652,1586,598,599,650,1589,650,546,598,1641,651,546,598,1641,598,599,598,598,598,601,652,544,599,598,598,601,598,598,598,599,598,601,598,599,598,598,615,584,598,599,597,599,598,601,598,599,597,599,653,543,598,601,598,598,650,546,599,600,598,598,650,547,598,1641,599,597,598,1642,652,1584,599}, +//21 +{9008,4442,598,602,597,599,597,1640,598,601,598,1639,598,601,598,599,597,599,598,602,596,1640,598,599,651,1589,598,599,598,1642,597,1639,598,601,598,600,596,599,598,601,598,599,598,598,598,601,598,599,597,599,621,578,597,600,597,599,598,601,598,598,598,598,650,549,598,599,598,598,598,599,598,601,650,547,597,599,650,549,597,599,597,599,598,1641,598,599,598,1642,597,600,597}, +//22 +{9064,4386,654,546,652,545,652,1584,598,601,598,1639,652,547,652,545,680,516,654,545,598,1639,652,544,652,1587,654,543,653,1586,653,1584,653,1586,598,599,654,545,652,544,652,545,598,601,598,599,597,599,598,599,653,545,652,545,683,514,597,601,598,598,635,562,651,548,653,544,633,563,655,544,598,600,597,598,598,601,650,546,654,543,598,601,598,1639,653,544,680,519,597,1639,652}, +//23 +{9010,4443,597,602,598,599,597,1640,597,602,598,1640,597,602,597,599,598,599,598,601,598,1639,598,599,598,1642,598,1642,597,600,598,599,597,600,597,601,598,599,598,599,597,602,597,600,597,599,598,601,598,599,598,599,597,602,597,600,597,599,598,601,598,599,597,599,598,602,597,599,598,599,597,602,597,599,598,599,597,602,597,599,598,599,597,1643,597,599,598,599,597,601,598}, +//24 +{9009,4443,598,601,598,599,597,1640,598,601,598,1639,598,601,598,599,597,600,597,602,597,1640,598,599,598,1642,598,1642,597,599,598,600,597,1642,597,600,597,599,598,601,598,600,597,599,598,601,598,599,597,600,598,601,598,598,598,599,598,601,598,599,597,599,598,601,597,600,597,600,598,599,597,601,598,599,598,599,597,602,598,599,597,600,597,601,598,1640,598,1642,598,1640,602}, +//25 +{9063,4387,654,545,599,598,653,1585,653,546,679,1557,653,547,653,543,598,599,598,600,652,1585,653,545,652,1587,654,1586,598,599,597,1640,653,545,656,541,654,543,655,544,598,598,653,544,598,601,653,543,654,543,652,547,656,540,598,599,653,545,598,599,654,546,594,601,653,544,652,544,652,545,598,601,598,599,652,543,599,601,598,599,597,599,598,601,598,1639,598,1642,653,544,653}, +//26 +{9011,4442,598,602,597,599,598,1639,598,601,598,1639,598,602,597,599,598,599,598,601,598,1639,598,599,597,1642,598,1641,598,599,598,1639,598,1642,598,599,598,600,599,599,597,599,598,601,598,599,598,598,598,600,597,601,598,599,597,599,598,601,598,599,598,598,598,601,598,599,598,598,598,601,598,599,598,598,599,600,598,599,598,599,597,602,597,599,598,1639,599,601,597,1640,598}, +//27 +{9031,4442,599,600,599,597,600,1640,599,598,599,1641,601,595,600,597,599,598,599,600,599,1638,599,600,599,1638,599,1640,599,1638,599,601,598,598,599,597,599,600,599,598,599,597,599,600,599,598,598,597,600,598,598,600,599,598,599,598,599,600,599,597,599,598,599,599,600,598,599,597,599,600,599,597,600,597,599,600,599,598,598,598,599,600,599,598,599,1638,599,600,599,598,599}, +//28 +{9011,4441,600,600,604,592,599,1638,600,600,599,1639,598,600,599,598,599,598,599,600,598,1638,600,597,599,1641,599,1641,598,1638,599,598,598,1642,599,598,598,601,598,599,598,598,599,600,599,598,599,597,599,598,598,600,599,598,598,599,598,600,599,598,599,597,599,601,598,599,598,600,596,601,599,597,599,599,598,600,599,597,599,598,599,600,599,598,599,598,598,1641,599,1638,599}, +//29 +{9011,4442,598,601,653,544,652,1585,599,601,598,1639,597,602,598,599,598,598,653,546,599,1638,653,544,598,1643,598,1641,598,1640,652,1588,652,545,597,599,598,601,598,598,680,518,598,600,653,544,598,598,598,599,652,547,652,545,598,598,598,601,598,598,599,598,652,547,599,598,598,598,599,600,598,599,598,598,599,600,652,545,598,598,599,600,599,599,597,599,598,1641,598,599,651}, +//30 +{9009,4442,598,601,598,598,598,1640,598,601,597,1640,597,602,597,599,598,599,597,601,598,1640,598,599,597,1642,598,1642,598,1639,598,1642,597,1640,598,599,597,602,597,603,594,599,598,601,597,599,598,599,597,602,597,599,598,599,597,601,598,598,599,598,598,601,598,599,597,599,598,602,597,599,598,598,598,602,597,599,597,600,597,602,597,599,598,599,597,599,598,601,598,1639,597}, + +//fan + +//low +{9009,4443,597,601,596,603,596,1642,596,603,623,1615,596,603,595,601,571,626,572,625,597,603,596,1642,596,1644,596,1642,571,628,571,626,596,1645,596,600,572,625,624,576,571,625,572,626,570,628,571,626,571,626,571,626,573,626,571,626,570,627,570,628,571,627,570,626,571,629,570,626,571,625,571,629,570,627,569,628,569,633,567,626,570,627,570,1670,570,627,569,628,569,1670,570}, + +//mid +{9015,4439,599,599,625,573,599,1640,598,600,599,1639,599,600,599,598,599,598,626,571,599,600,599,1639,598,601,627,1611,625,574,598,598,599,1639,626,573,598,598,599,598,625,574,599,598,599,597,599,601,626,571,598,599,598,600,626,572,598,598,654,545,598,599,627,570,598,598,599,600,626,571,625,571,627,573,598,598,625,572,598,600,599,599,599,1641,628,569,598,1639,626,573,626}, + +//high +{9038,4414,598,598,626,574,628,1609,625,574,598,1639,599,600,598,599,626,572,598,599,625,573,627,569,599,1641,626,1612,626,573,599,598,626,1612,598,601,626,571,598,598,626,574,597,599,653,543,599,601,597,599,598,599,625,574,624,572,625,572,598,601,624,572,627,570,598,599,626,573,625,572,627,569,626,574,599,597,598,599,598,601,598,599,598,1642,626,570,625,1612,624,1617,598}, + +//off +{9007,4444,650,546,597,602,649,1588,597,602,596,601,596,600,597,603,596,601,596,600,596,603,596,1641,596,1643,650,548,596,1644,677,519,597,1641,596,604,648,548,596,600,649,550,650,547,597,600,596,603,597,604,592,601,596,602,633,564,650,547,596,603,596,601,596,600,596,601,596,603,650,547,596,601,650,548,596,601,596,600,597,602,597,600,596,601,596,1643,597,600,597,1643,649} \ No newline at end of file diff --git a/src/ir_codes.cpp b/src/ir_codes.cpp deleted file mode 100644 index f843ba4..0000000 --- a/src/ir_codes.cpp +++ /dev/null @@ -1,104 +0,0 @@ -#include - -const uint16_t ir_code_cool[4][16][91] = { - // Fan Speed Auto - { - {8976, 4498, 562, 546, 589, 547, 588, 1649, 588, 548, 587, 1649, 588, 547, 589, 548, 587, 564, 589, 547, 588, 1649, 588, 548, 587, 547, 588, 548, 588, 548, 588, 547, 587, 566, 587, 548, 587, 548, 588, 548, 587, 548, 588, 548, 587, 549, 586, 548, 587, 565, 588, 549, 586, 548, 588, 548, 588, 548, 560, 577, 584, 549, 586, 551, 585, 565, 588, 549, 587, 548, 560, 576, 560, 574, 587, 549, 587, 550, 586, 548, 588, 570, 560, 576, 586, 549, 560, 575, 560, 1665, 560}, // 15C - {8976, 4498, 560, 548, 587, 549, 587, 1650, 587, 549, 587, 1649, 586, 550, 587, 548, 587, 565, 587, 549, 586, 1652, 586, 549, 586, 549, 587, 548, 587, 549, 586, 549, 587, 1667, 587, 548, 587, 548, 587, 549, 588, 547, 587, 549, 587, 549, 587, 548, 587, 565, 587, 549, 586, 549, 587, 549, 586, 548, 587, 549, 587, 549, 587, 547, 589, 564, 587, 548, 588, 548, 587, 548, 587, 549, 587, 550, 585, 549, 587, 549, 586, 570, 587, 548, 587, 550, 586, 549, 587, 536, 587}, // 16C - {8976, 4499, 531, 577, 558, 577, 559, 1678, 559, 577, 558, 1679, 559, 577, 558, 577, 558, 595, 558, 577, 558, 1679, 558, 577, 559, 576, 559, 578, 558, 576, 559, 1679, 558, 594, 558, 578, 558, 577, 559, 576, 558, 578, 558, 577, 558, 577, 558, 578, 558, 594, 559, 577, 558, 577, 558, 578, 557, 578, 558, 577, 559, 577, 557, 578, 559, 593, 559, 577, 558, 577, 559, 576, 559, 577, 558, 578, 557, 578, 559, 576, 559, 599, 558, 1678, 559, 1679, 559, 1678, 558, 1666, 560}, // 17C - {8977, 4498, 561, 549, 587, 547, 588, 1649, 588, 547, 589, 1648, 589, 547, 588, 548, 587, 565, 589, 547, 587, 1650, 587, 547, 589, 548, 588, 546, 589, 547, 588, 1649, 588, 1667, 587, 548, 588, 547, 588, 548, 588, 547, 588, 548, 588, 548, 587, 548, 587, 565, 587, 548, 588, 547, 588, 549, 587, 548, 587, 548, 588, 548, 587, 548, 588, 564, 588, 547, 588, 549, 586, 550, 587, 547, 588, 548, 587, 548, 588, 548, 587, 570, 587, 1649, 588, 1650, 588, 1649, 588, 536, 587}, // 18C - {8998, 4502, 534, 574, 587, 549, 585, 1652, 586, 550, 560, 1677, 560, 575, 586, 550, 561, 591, 587, 548, 586, 1651, 587, 549, 586, 549, 585, 550, 561, 1676, 563, 573, 560, 592, 587, 549, 561, 574, 586, 550, 586, 550, 559, 575, 561, 575, 561, 575, 560, 592, 560, 576, 560, 575, 560, 576, 560, 574, 561, 575, 560, 576, 560, 575, 560, 593, 559, 576, 560, 575, 560, 577, 558, 576, 560, 575, 562, 574, 560, 576, 560, 597, 560, 1676, 562, 1676, 559, 576, 561, 1665, 560}, // 19C - {8978, 4503, 562, 548, 586, 549, 588, 1649, 587, 547, 589, 1649, 588, 547, 588, 548, 587, 565, 590, 546, 587, 1649, 588, 548, 588, 548, 587, 548, 587, 1649, 588, 548, 588, 1666, 588, 547, 588, 547, 588, 549, 587, 548, 588, 547, 588, 547, 589, 547, 587, 565, 588, 547, 588, 549, 587, 548, 587, 549, 587, 547, 588, 548, 588, 547, 588, 564, 589, 547, 587, 549, 587, 548, 588, 548, 588, 547, 588, 547, 588, 547, 588, 570, 588, 1649, 588, 1649, 587, 548, 588, 535, 589}, // 20C - {8977, 4503, 560, 549, 587, 548, 560, 1677, 587, 548, 587, 1650, 587, 549, 586, 549, 586, 567, 587, 548, 587, 1650, 588, 547, 587, 549, 587, 548, 587, 1650, 587, 1650, 588, 565, 588, 547, 587, 549, 587, 548, 587, 548, 587, 548, 588, 548, 587, 549, 587, 565, 586, 549, 587, 548, 588, 548, 587, 549, 586, 549, 587, 548, 587, 548, 588, 565, 588, 547, 588, 548, 587, 548, 588, 548, 587, 548, 587, 548, 588, 548, 587, 570, 588, 1649, 588, 547, 588, 1650, 588, 1635, 589}, // 21C - {8996, 4503, 506, 603, 533, 603, 533, 1703, 534, 602, 532, 1705, 533, 602, 533, 602, 533, 619, 533, 603, 533, 1704, 533, 602, 533, 603, 533, 603, 531, 1705, 533, 1704, 532, 1722, 533, 602, 533, 603, 533, 602, 534, 602, 533, 602, 533, 602, 533, 603, 533, 619, 533, 602, 533, 603, 533, 603, 532, 603, 533, 602, 533, 602, 534, 602, 533, 620, 532, 603, 533, 602, 533, 603, 533, 602, 533, 602, 533, 603, 533, 602, 533, 624, 533, 1705, 533, 602, 533, 1704, 533, 590, 533}, // 22C - {8976, 4504, 560, 549, 587, 548, 587, 1650, 587, 548, 587, 1650, 587, 549, 587, 548, 587, 566, 587, 548, 587, 1649, 589, 548, 587, 548, 587, 1650, 587, 549, 587, 548, 588, 564, 588, 548, 587, 548, 587, 549, 587, 548, 587, 548, 587, 548, 588, 548, 588, 565, 587, 548, 588, 548, 587, 547, 588, 548, 587, 549, 586, 549, 587, 548, 588, 565, 587, 548, 587, 548, 588, 548, 586, 549, 587, 549, 587, 548, 588, 548, 587, 570, 587, 1650, 588, 547, 587, 549, 587, 1637, 588}, // 23C - {8976, 4504, 560, 549, 587, 549, 586, 1651, 586, 549, 586, 1651, 587, 548, 587, 548, 588, 565, 587, 548, 587, 1650, 587, 549, 586, 549, 587, 1650, 587, 549, 586, 549, 587, 1667, 587, 548, 587, 549, 587, 549, 586, 549, 586, 549, 587, 548, 588, 548, 587, 565, 587, 548, 587, 549, 587, 548, 587, 549, 587, 548, 587, 549, 587, 548, 586, 567, 586, 549, 586, 549, 586, 549, 587, 548, 588, 549, 586, 549, 586, 550, 587, 570, 586, 1650, 587, 549, 587, 548, 587, 537, 586}, // 24C - {8977, 4503, 531, 578, 534, 602, 556, 1680, 534, 602, 533, 1704, 556, 579, 557, 579, 533, 619, 533, 603, 532, 1704, 558, 578, 533, 603, 532, 1705, 555, 580, 532, 1705, 557, 595, 557, 579, 556, 579, 557, 579, 557, 578, 557, 579, 557, 578, 557, 578, 557, 596, 557, 578, 557, 579, 557, 577, 559, 577, 559, 576, 558, 578, 557, 578, 558, 594, 559, 577, 558, 578, 558, 577, 558, 577, 559, 577, 559, 576, 560, 575, 560, 598, 558, 578, 558, 1678, 559, 1679, 559, 1666, 558}, // 25C - {8976, 4498, 507, 602, 534, 602, 533, 1703, 534, 602, 533, 1704, 533, 602, 557, 579, 533, 619, 533, 602, 557, 1680, 534, 602, 533, 602, 534, 1703, 534, 602, 556, 1680, 534, 1720, 533, 602, 534, 602, 534, 602, 533, 602, 556, 580, 533, 601, 535, 601, 534, 619, 533, 602, 534, 602, 534, 601, 534, 602, 533, 602, 558, 577, 534, 602, 533, 619, 534, 602, 557, 578, 557, 578, 534, 602, 533, 603, 532, 603, 556, 579, 533, 624, 557, 579, 533, 1704, 533, 1704, 533, 590, 533}, // 26C - {8977, 4503, 533, 576, 560, 575, 559, 1679, 559, 577, 559, 1677, 559, 576, 559, 580, 556, 593, 559, 577, 559, 1677, 561, 575, 559, 576, 560, 1678, 559, 1678, 560, 575, 559, 593, 559, 577, 559, 576, 560, 575, 560, 576, 559, 576, 560, 576, 560, 576, 559, 592, 560, 576, 560, 575, 560, 576, 559, 576, 560, 576, 559, 577, 558, 576, 560, 593, 559, 576, 560, 575, 561, 575, 560, 575, 559, 577, 559, 576, 560, 576, 559, 598, 560, 576, 560, 1677, 558, 577, 559, 1667, 559}, // 27C - {8996, 4504, 483, 626, 533, 602, 510, 1727, 533, 602, 533, 1704, 533, 602, 534, 602, 510, 642, 533, 603, 533, 1704, 532, 602, 534, 602, 533, 1704, 533, 1704, 533, 603, 512, 1742, 531, 604, 532, 603, 533, 603, 531, 604, 532, 603, 532, 603, 533, 603, 532, 620, 532, 604, 531, 604, 531, 604, 533, 602, 511, 626, 532, 603, 509, 626, 510, 643, 531, 604, 532, 603, 533, 603, 532, 603, 531, 605, 532, 602, 533, 602, 533, 625, 531, 605, 532, 1704, 533, 603, 533, 590, 534}, // 28C - {8977, 4497, 508, 601, 534, 601, 535, 1702, 535, 601, 534, 1703, 534, 601, 535, 601, 534, 618, 534, 601, 535, 1702, 534, 602, 535, 600, 534, 1703, 534, 1703, 534, 1704, 534, 618, 534, 601, 534, 602, 534, 601, 534, 601, 535, 600, 535, 601, 535, 601, 534, 618, 534, 602, 534, 600, 535, 601, 535, 600, 535, 601, 534, 602, 533, 602, 534, 619, 534, 600, 535, 601, 534, 602, 533, 602, 535, 600, 535, 601, 534, 601, 535, 623, 533, 602, 534, 601, 534, 1703, 535, 1690, 534}, // 29C - {8978, 4503, 533, 575, 561, 575, 559, 1678, 559, 577, 559, 1678, 559, 577, 558, 576, 560, 593, 559, 576, 560, 1677, 560, 575, 559, 577, 560, 1677, 560, 1677, 559, 1679, 558, 1696, 559, 576, 559, 576, 560, 576, 559, 576, 559, 576, 560, 576, 560, 575, 559, 594, 559, 576, 560, 575, 560, 576, 560, 575, 560, 576, 559, 576, 560, 575, 560, 594, 558, 576, 560, 575, 559, 577, 560, 575, 560, 576, 559, 577, 561, 574, 559, 599, 559, 576, 559, 579, 557, 1677, 560, 564, 559} // 30C - }, - // Fan Speed High - { - {8978, 4504, 561, 548, 587, 549, 586, 1650, 587, 549, 586, 1650, 586, 550, 586, 549, 586, 566, 586, 550, 586, 1649, 587, 549, 585, 1651, 586, 550, 585, 550, 586, 550, 584, 568, 585, 550, 585, 550, 584, 552, 583, 552, 584, 550, 585, 551, 584, 551, 585, 568, 584, 550, 559, 576, 585, 551, 560, 576, 583, 551, 559, 577, 558, 577, 584, 568, 584, 551, 584, 552, 584, 551, 558, 577, 558, 577, 559, 577, 558, 577, 558, 599, 558, 577, 558, 577, 584, 552, 558, 564, 559}, // 15C - {8978, 4503, 563, 546, 588, 546, 590, 1647, 589, 546, 590, 1647, 589, 546, 590, 545, 590, 563, 589, 546, 589, 1647, 590, 545, 590, 1647, 589, 546, 589, 547, 589, 545, 589, 1665, 589, 546, 589, 546, 589, 547, 589, 546, 589, 546, 589, 547, 588, 547, 589, 563, 589, 545, 589, 547, 589, 546, 589, 547, 588, 546, 589, 547, 589, 546, 589, 563, 589, 546, 589, 547, 589, 545, 589, 547, 588, 547, 588, 548, 588, 546, 589, 568, 589, 1648, 589, 1647, 589, 1648, 589, 1635, 589}, // 16C - {8978, 4447, 561, 549, 587, 548, 588, 1648, 588, 547, 588, 1648, 589, 546, 589, 547, 588, 564, 588, 548, 588, 1648, 588, 548, 588, 1648, 588, 547, 588, 547, 589, 1648, 588, 564, 587, 548, 588, 548, 587, 548, 587, 548, 587, 549, 587, 547, 587, 549, 587, 564, 588, 547, 588, 548, 588, 548, 587, 547, 588, 548, 588, 547, 587, 552, 584, 565, 587, 548, 587, 547, 589, 547, 587, 548, 588, 547, 588, 547, 588, 548, 587, 569, 589, 1647, 589, 1649, 587, 1648, 589, 535, 589}, // 17C - {8978, 4523, 507, 602, 533, 602, 533, 1703, 534, 601, 534, 1704, 533, 601, 534, 601, 534, 618, 534, 601, 534, 1703, 534, 601, 534, 1703, 534, 601, 534, 601, 534, 1703, 534, 1719, 534, 601, 534, 602, 534, 601, 533, 602, 534, 602, 533, 602, 533, 602, 534, 618, 533, 602, 534, 602, 533, 601, 534, 602, 533, 602, 534, 601, 534, 601, 534, 618, 534, 601, 534, 602, 534, 601, 534, 601, 534, 601, 534, 602, 533, 601, 535, 623, 534, 1703, 533, 1703, 534, 601, 534, 1691, 533}, // 18C - {8978, 4502, 559, 550, 585, 551, 585, 1650, 587, 549, 586, 1649, 587, 549, 587, 549, 585, 567, 586, 549, 586, 1650, 586, 550, 585, 1652, 585, 550, 586, 1650, 586, 549, 586, 567, 586, 549, 586, 549, 587, 547, 587, 549, 587, 548, 587, 549, 586, 549, 586, 566, 586, 549, 586, 549, 586, 550, 585, 550, 586, 549, 586, 549, 586, 549, 586, 567, 585, 549, 586, 550, 585, 550, 586, 549, 586, 550, 587, 548, 586, 549, 586, 571, 586, 1650, 586, 1651, 586, 549, 586, 537, 586}, // 19C - {8978, 4502, 562, 547, 635, 500, 589, 1647, 589, 546, 589, 1648, 589, 546, 590, 545, 589, 563, 589, 547, 588, 1648, 589, 547, 588, 1648, 589, 547, 588, 1648, 589, 546, 589, 1664, 589, 547, 589, 546, 588, 547, 588, 547, 589, 546, 589, 547, 588, 547, 588, 564, 589, 547, 588, 546, 589, 546, 589, 547, 588, 548, 588, 546, 589, 546, 589, 564, 588, 547, 588, 547, 588, 547, 588, 547, 589, 546, 589, 546, 589, 547, 588, 568, 589, 1648, 589, 547, 588, 1648, 589, 1635, 589}, // 20C - {8978, 4502, 532, 577, 533, 602, 560, 1676, 560, 576, 559, 1677, 534, 602, 533, 601, 561, 592, 559, 576, 560, 1677, 558, 577, 560, 1676, 558, 578, 559, 1677, 560, 1677, 559, 594, 558, 577, 558, 577, 533, 602, 559, 576, 559, 576, 558, 577, 559, 577, 558, 594, 558, 577, 535, 600, 558, 577, 558, 577, 559, 576, 559, 577, 558, 577, 559, 593, 559, 576, 559, 576, 534, 601, 559, 577, 533, 601, 558, 578, 559, 577, 558, 598, 534, 1702, 534, 602, 558, 1679, 533, 590, 558}, // 21C - {8978, 4497, 562, 547, 588, 546, 589, 1648, 589, 546, 590, 1647, 589, 546, 589, 547, 589, 563, 588, 546, 590, 1648, 588, 547, 588, 1648, 589, 547, 588, 1647, 589, 1649, 589, 1664, 589, 546, 589, 547, 588, 547, 588, 546, 590, 546, 590, 546, 587, 547, 590, 562, 589, 546, 589, 547, 589, 546, 588, 547, 589, 547, 588, 546, 590, 546, 589, 563, 588, 547, 589, 546, 589, 547, 588, 548, 588, 546, 588, 547, 589, 547, 588, 569, 588, 1648, 589, 546, 589, 547, 588, 1636, 589}, // 22C - {8978, 4495, 564, 546, 589, 546, 589, 1648, 589, 546, 589, 1648, 588, 547, 589, 546, 589, 563, 589, 546, 590, 1646, 590, 546, 589, 1647, 590, 1646, 590, 546, 589, 546, 590, 563, 588, 547, 589, 546, 589, 546, 589, 546, 589, 546, 590, 545, 590, 546, 589, 563, 589, 546, 589, 547, 589, 545, 590, 545, 590, 546, 589, 546, 589, 546, 589, 564, 589, 545, 590, 545, 590, 546, 589, 546, 589, 546, 589, 546, 590, 546, 589, 568, 589, 1647, 590, 546, 589, 545, 590, 534, 589}, // 23C - {8978, 4501, 562, 547, 589, 546, 588, 1648, 589, 547, 588, 1649, 587, 548, 587, 547, 589, 564, 589, 546, 588, 1649, 588, 547, 588, 1649, 588, 1648, 589, 546, 588, 547, 588, 1665, 589, 547, 588, 548, 587, 548, 588, 547, 588, 547, 588, 547, 588, 548, 588, 564, 587, 547, 589, 547, 588, 547, 588, 547, 588, 548, 587, 548, 588, 547, 588, 564, 588, 547, 589, 546, 589, 547, 587, 547, 589, 547, 587, 548, 588, 548, 588, 569, 587, 548, 587, 1649, 588, 1649, 588, 1636, 588}, // 24C - {8978, 4502, 559, 548, 562, 574, 561, 1676, 560, 575, 561, 1676, 561, 574, 561, 574, 562, 590, 561, 575, 561, 1675, 586, 550, 560, 1676, 561, 1675, 560, 575, 561, 1676, 561, 592, 560, 575, 586, 548, 588, 548, 561, 574, 560, 575, 562, 573, 561, 574, 561, 591, 561, 575, 560, 576, 586, 548, 586, 550, 586, 548, 562, 574, 561, 574, 561, 592, 586, 548, 587, 548, 585, 551, 561, 574, 561, 574, 562, 574, 560, 575, 587, 569, 588, 548, 585, 1652, 585, 1651, 588, 535, 561}, // 25C - {8978, 4496, 507, 601, 534, 601, 534, 1703, 534, 602, 533, 1702, 534, 602, 534, 601, 533, 620, 533, 602, 533, 1703, 534, 601, 534, 1703, 533, 1704, 533, 602, 533, 1703, 533, 1720, 534, 602, 533, 602, 533, 602, 534, 601, 534, 602, 533, 601, 535, 600, 534, 619, 534, 601, 534, 601, 534, 601, 534, 601, 534, 602, 533, 602, 534, 601, 534, 618, 534, 601, 534, 602, 533, 602, 534, 602, 533, 601, 534, 602, 534, 601, 534, 623, 533, 603, 533, 1702, 535, 601, 533, 1691, 534}, // 26C - {8978, 4501, 533, 576, 560, 575, 560, 1677, 560, 575, 559, 1677, 560, 575, 560, 576, 559, 592, 560, 576, 560, 1676, 561, 575, 559, 1677, 560, 1676, 561, 1676, 560, 576, 559, 593, 559, 576, 559, 576, 560, 575, 560, 575, 560, 576, 559, 575, 560, 576, 559, 593, 560, 575, 560, 576, 559, 575, 560, 576, 560, 575, 560, 576, 559, 576, 559, 593, 560, 575, 559, 575, 560, 576, 559, 576, 560, 575, 560, 576, 559, 576, 560, 597, 560, 575, 559, 1678, 559, 576, 559, 564, 560}, // 27C - {8978, 4496, 562, 547, 589, 547, 588, 1648, 589, 546, 589, 1647, 589, 547, 589, 546, 588, 565, 588, 546, 588, 1648, 590, 546, 588, 1649, 588, 1649, 588, 1648, 588, 547, 589, 1664, 588, 548, 588, 547, 592, 543, 588, 547, 589, 547, 588, 547, 588, 547, 588, 564, 588, 548, 588, 547, 588, 547, 588, 546, 589, 547, 588, 547, 589, 546, 589, 564, 588, 547, 588, 547, 588, 547, 588, 548, 588, 546, 589, 547, 588, 547, 588, 569, 588, 547, 588, 548, 588, 1648, 589, 1636, 588}, // 28C - {8978, 4503, 507, 601, 534, 601, 534, 1702, 534, 602, 534, 1703, 533, 602, 533, 602, 533, 619, 534, 601, 558, 1679, 534, 601, 557, 1680, 533, 1704, 533, 1703, 534, 1702, 534, 618, 534, 601, 534, 602, 534, 601, 534, 602, 533, 601, 534, 602, 533, 602, 533, 619, 534, 601, 534, 602, 533, 602, 534, 601, 533, 602, 534, 602, 533, 601, 535, 617, 534, 602, 534, 601, 534, 601, 534, 602, 533, 601, 534, 602, 557, 578, 534, 624, 533, 601, 559, 577, 533, 1703, 534, 590, 533}, // 29C - {8978, 4502, 534, 575, 562, 573, 561, 1675, 561, 575, 560, 1676, 561, 575, 560, 574, 562, 591, 560, 575, 560, 1676, 562, 574, 560, 1676, 561, 1675, 562, 1675, 561, 1676, 560, 1693, 561, 575, 561, 574, 560, 575, 561, 575, 560, 574, 561, 575, 560, 575, 561, 591, 561, 574, 561, 575, 560, 574, 561, 575, 563, 572, 560, 576, 560, 574, 561, 592, 560, 574, 561, 575, 561, 574, 561, 573, 562, 575, 561, 574, 560, 575, 560, 597, 560, 575, 561, 574, 561, 575, 560, 1664, 561} // 30C - - }, - // Fan Speed Med - { - {8978, 4497, 506, 602, 534, 602, 557, 1679, 534, 602, 533, 1703, 556, 579, 534, 602, 533, 618, 534, 601, 534, 1703, 534, 1703, 533, 602, 534, 601, 534, 601, 534, 601, 534, 618, 534, 602, 533, 603, 533, 601, 534, 602, 533, 602, 533, 602, 533, 603, 533, 618, 534, 602, 557, 577, 534, 601, 534, 602, 533, 602, 534, 601, 534, 602, 533, 619, 534, 601, 533, 602, 534, 602, 533, 601, 534, 602, 533, 602, 534, 602, 533, 623, 534, 1703, 534, 1702, 534, 1703, 534, 1691, 533}, // 15C - {8978, 4503, 560, 550, 585, 549, 587, 1650, 586, 549, 586, 1651, 585, 550, 585, 550, 586, 566, 586, 549, 587, 1650, 586, 1651, 585, 550, 585, 550, 586, 550, 585, 550, 585, 1668, 585, 550, 587, 548, 586, 549, 586, 549, 586, 549, 586, 550, 586, 549, 586, 566, 586, 549, 586, 549, 586, 549, 586, 550, 586, 549, 585, 550, 586, 549, 586, 567, 585, 550, 585, 550, 585, 550, 586, 549, 585, 551, 585, 550, 585, 550, 585, 572, 586, 1650, 586, 1651, 585, 1651, 586, 538, 586}, // 16C - {8978, 4529, 507, 601, 534, 601, 534, 1703, 534, 601, 534, 1703, 533, 602, 534, 602, 533, 618, 534, 602, 533, 1704, 533, 1703, 533, 601, 534, 602, 534, 601, 534, 1703, 534, 618, 533, 603, 533, 601, 534, 601, 534, 601, 534, 601, 534, 602, 533, 602, 533, 619, 534, 601, 534, 601, 534, 602, 533, 602, 534, 601, 534, 601, 534, 601, 534, 618, 534, 602, 533, 602, 534, 602, 533, 602, 533, 602, 533, 602, 534, 601, 534, 623, 534, 1703, 533, 1703, 534, 602, 533, 1691, 534}, // 17C - {8978, 4496, 508, 600, 535, 601, 534, 1702, 535, 600, 535, 1701, 536, 600, 535, 601, 534, 618, 534, 601, 534, 1702, 535, 1702, 534, 601, 535, 600, 535, 601, 534, 1702, 534, 1719, 535, 601, 534, 601, 534, 602, 534, 601, 533, 601, 535, 601, 534, 601, 534, 618, 534, 601, 534, 602, 533, 602, 534, 601, 534, 601, 534, 602, 533, 601, 535, 617, 535, 601, 534, 601, 534, 601, 535, 600, 534, 601, 535, 600, 535, 601, 534, 623, 534, 1703, 533, 1703, 534, 601, 534, 589, 535}, // 18C - {8978, 4522, 508, 601, 534, 602, 533, 1703, 534, 602, 533, 1703, 533, 602, 534, 601, 534, 619, 533, 602, 533, 1703, 534, 1702, 534, 602, 535, 600, 534, 1702, 535, 601, 534, 618, 533, 602, 533, 603, 533, 602, 534, 601, 533, 602, 534, 601, 533, 602, 534, 619, 533, 602, 533, 602, 533, 602, 534, 602, 533, 602, 533, 601, 534, 601, 534, 619, 533, 601, 535, 601, 534, 601, 534, 602, 533, 602, 533, 602, 533, 602, 534, 624, 533, 1702, 535, 601, 534, 1702, 534, 1691, 533}, // 19C - {8978, 4523, 507, 602, 534, 601, 533, 1704, 533, 601, 534, 1703, 534, 601, 534, 601, 534, 619, 533, 601, 534, 1703, 534, 1703, 534, 601, 534, 601, 534, 1702, 535, 600, 535, 1719, 534, 601, 534, 602, 533, 602, 534, 601, 534, 602, 533, 602, 533, 602, 533, 619, 533, 602, 534, 601, 534, 601, 534, 601, 534, 602, 533, 603, 533, 601, 534, 618, 534, 602, 533, 601, 535, 601, 534, 601, 534, 601, 534, 602, 533, 602, 533, 624, 534, 1703, 533, 601, 534, 1702, 535, 589, 534}, // 20C - {8978, 4503, 562, 547, 588, 547, 589, 1647, 589, 546, 589, 1648, 588, 547, 589, 546, 589, 564, 588, 547, 589, 1648, 588, 1648, 588, 546, 590, 546, 589, 1648, 588, 1648, 589, 564, 588, 547, 589, 546, 588, 548, 588, 546, 589, 546, 589, 547, 588, 547, 589, 563, 589, 547, 587, 547, 589, 547, 588, 547, 588, 547, 588, 547, 589, 545, 590, 564, 588, 546, 589, 546, 589, 547, 589, 546, 589, 546, 589, 547, 588, 547, 589, 569, 587, 1648, 589, 547, 588, 546, 589, 1637, 588}, // 21C - {8978, 4497, 508, 601, 534, 601, 534, 1702, 535, 601, 534, 1702, 534, 602, 534, 601, 534, 617, 534, 602, 534, 1703, 533, 1703, 534, 602, 533, 602, 533, 1703, 534, 1703, 533, 1720, 534, 601, 534, 602, 533, 602, 534, 601, 534, 602, 533, 601, 534, 602, 533, 619, 533, 602, 534, 601, 534, 601, 534, 602, 533, 601, 535, 602, 532, 602, 534, 618, 534, 602, 533, 601, 535, 601, 533, 602, 534, 602, 533, 601, 534, 601, 534, 624, 533, 1703, 534, 602, 533, 602, 533, 590, 534}, // 22C - {8978, 4503, 507, 602, 534, 602, 533, 1703, 534, 601, 534, 1702, 534, 602, 533, 602, 533, 619, 533, 602, 534, 1703, 533, 1704, 533, 602, 533, 1703, 534, 600, 535, 601, 534, 619, 533, 601, 534, 602, 533, 602, 534, 601, 534, 601, 534, 602, 533, 602, 533, 619, 533, 602, 533, 603, 533, 602, 533, 602, 533, 602, 533, 603, 533, 601, 534, 619, 533, 602, 533, 602, 534, 601, 534, 602, 533, 601, 534, 602, 534, 601, 533, 624, 534, 601, 534, 1703, 533, 1703, 534, 1691, 533}, // 23C - {8978, 4495, 507, 602, 557, 581, 531, 1703, 533, 601, 559, 1679, 557, 578, 558, 577, 558, 594, 558, 578, 557, 1679, 533, 1704, 533, 601, 558, 1679, 557, 578, 534, 601, 534, 1720, 558, 577, 558, 577, 534, 601, 559, 577, 558, 577, 558, 577, 534, 602, 533, 619, 557, 578, 557, 577, 558, 578, 534, 601, 557, 578, 559, 576, 559, 577, 558, 593, 558, 578, 559, 577, 533, 601, 557, 579, 558, 577, 557, 578, 534, 601, 559, 598, 558, 577, 534, 1703, 559, 1678, 538, 585, 558}, // 24C - {8978, 4501, 507, 601, 558, 578, 534, 1702, 534, 601, 534, 1703, 558, 577, 534, 602, 533, 619, 558, 577, 534, 1702, 534, 1703, 534, 602, 557, 1679, 533, 602, 534, 1703, 533, 619, 533, 602, 534, 601, 534, 601, 534, 601, 534, 602, 533, 602, 533, 602, 534, 619, 532, 602, 534, 601, 534, 602, 533, 602, 533, 602, 534, 602, 533, 601, 534, 619, 533, 602, 534, 601, 533, 602, 557, 578, 534, 601, 534, 602, 533, 602, 534, 623, 533, 602, 534, 1703, 534, 601, 534, 1691, 533}, // 25C - {8978, 4529, 531, 577, 533, 603, 558, 1678, 559, 576, 559, 1678, 558, 576, 561, 575, 558, 594, 559, 576, 559, 1677, 561, 1676, 559, 576, 560, 1677, 559, 577, 558, 1678, 533, 1721, 558, 576, 550, 586, 559, 576, 560, 575, 558, 577, 558, 577, 559, 577, 533, 619, 559, 576, 559, 577, 557, 577, 560, 575, 559, 577, 558, 577, 559, 576, 558, 594, 558, 578, 559, 575, 558, 578, 559, 576, 559, 576, 558, 577, 558, 578, 558, 599, 558, 576, 559, 1678, 558, 578, 559, 565, 556}, // 26C - {8978, 4495, 562, 547, 588, 547, 588, 1648, 589, 547, 588, 1648, 588, 547, 589, 547, 589, 563, 590, 544, 591, 1647, 588, 1648, 589, 545, 590, 1647, 590, 1647, 589, 546, 589, 564, 589, 546, 589, 546, 588, 547, 589, 546, 589, 547, 589, 545, 589, 546, 590, 563, 589, 546, 590, 545, 590, 546, 588, 547, 589, 546, 589, 546, 588, 547, 588, 564, 590, 546, 588, 547, 588, 547, 588, 548, 588, 547, 589, 546, 588, 547, 588, 570, 587, 547, 588, 548, 588, 1648, 589, 1634, 589}, // 27C - {8978, 4502, 562, 547, 587, 549, 587, 1649, 586, 549, 588, 1648, 588, 548, 588, 547, 561, 591, 587, 548, 562, 1675, 564, 1673, 587, 548, 587, 1649, 588, 1648, 588, 548, 562, 1691, 588, 548, 587, 548, 587, 548, 561, 575, 586, 548, 588, 547, 588, 548, 587, 564, 588, 548, 562, 573, 587, 549, 588, 546, 563, 572, 588, 548, 588, 548, 587, 564, 562, 573, 563, 572, 588, 548, 588, 548, 561, 574, 587, 547, 562, 574, 587, 570, 587, 547, 563, 573, 588, 1648, 588, 536, 561}, // 28C - {8978, 4495, 534, 575, 562, 573, 561, 1676, 561, 574, 561, 1675, 560, 576, 560, 574, 561, 592, 561, 574, 561, 1676, 561, 1676, 560, 574, 561, 1677, 559, 1676, 562, 1675, 560, 593, 560, 575, 560, 575, 560, 575, 560, 575, 561, 574, 561, 574, 560, 575, 561, 592, 561, 574, 560, 575, 561, 575, 559, 576, 559, 576, 560, 575, 561, 574, 561, 592, 560, 575, 560, 575, 560, 575, 560, 575, 561, 574, 560, 576, 560, 574, 561, 597, 559, 576, 560, 575, 560, 575, 561, 1664, 560}, // 29C - {8978, 4503, 534, 575, 559, 577, 560, 1676, 558, 577, 559, 1677, 560, 575, 560, 576, 560, 592, 559, 576, 561, 1675, 561, 1676, 560, 575, 559, 1678, 560, 1676, 559, 1677, 561, 1693, 560, 576, 558, 577, 560, 575, 558, 577, 560, 575, 559, 576, 560, 575, 559, 594, 559, 576, 560, 575, 559, 577, 559, 579, 556, 576, 559, 576, 560, 575, 560, 592, 559, 576, 559, 577, 559, 576, 559, 576, 560, 575, 560, 575, 559, 577, 559, 598, 560, 576, 557, 578, 559, 576, 559, 564, 559} // 30C - }, - // Fan Speed Low - { - {8978, 4502, 508, 600, 536, 600, 535, 1702, 534, 601, 534, 1703, 534, 601, 535, 599, 535, 618, 535, 600, 534, 1703, 534, 1702, 535, 1702, 534, 601, 534, 601, 535, 601, 534, 618, 533, 601, 535, 601, 534, 601, 534, 601, 535, 601, 534, 601, 534, 601, 534, 617, 536, 600, 535, 600, 535, 600, 535, 600, 535, 601, 535, 600, 536, 599, 534, 618, 535, 601, 534, 601, 535, 600, 534, 601, 535, 600, 535, 600, 535, 601, 534, 622, 535, 1702, 535, 1701, 535, 1703, 534, 589, 534}, // 15C - {8978, 4497, 508, 601, 533, 602, 535, 1701, 535, 601, 534, 1703, 534, 601, 536, 598, 535, 618, 534, 601, 534, 1703, 534, 1702, 535, 1702, 533, 602, 534, 602, 533, 601, 535, 1719, 534, 601, 534, 601, 535, 600, 535, 601, 534, 601, 535, 600, 534, 601, 535, 617, 535, 601, 533, 602, 534, 601, 534, 601, 534, 602, 534, 601, 535, 601, 533, 618, 535, 600, 535, 601, 533, 602, 534, 602, 532, 602, 534, 601, 535, 601, 534, 623, 535, 1701, 535, 1701, 536, 600, 534, 1690, 535}, // 16C - {8978, 4525, 507, 601, 534, 602, 533, 1704, 533, 602, 534, 1702, 534, 601, 534, 602, 533, 618, 535, 600, 535, 1702, 534, 1702, 535, 1702, 534, 601, 534, 602, 533, 1703, 534, 618, 534, 603, 532, 602, 533, 602, 534, 601, 533, 602, 534, 601, 535, 600, 534, 618, 535, 601, 534, 601, 534, 601, 534, 601, 535, 601, 534, 600, 535, 601, 534, 618, 534, 600, 536, 600, 535, 601, 533, 602, 534, 601, 534, 601, 535, 601, 534, 622, 535, 1702, 534, 1703, 534, 601, 534, 589, 534}, // 17C - {8978, 4504, 505, 603, 533, 603, 533, 1703, 533, 602, 533, 1704, 534, 601, 533, 602, 533, 620, 533, 601, 533, 1704, 533, 1703, 534, 1703, 533, 602, 533, 603, 532, 1704, 533, 1720, 534, 602, 533, 602, 532, 604, 534, 600, 534, 601, 534, 601, 533, 603, 533, 618, 534, 602, 533, 602, 534, 602, 533, 602, 533, 602, 533, 602, 533, 602, 533, 619, 533, 602, 534, 602, 533, 602, 533, 602, 533, 602, 533, 602, 534, 602, 533, 624, 532, 1704, 534, 601, 534, 1703, 533, 1692, 533}, // 18C - {8978, 4496, 508, 601, 534, 601, 534, 1703, 533, 602, 534, 1702, 534, 602, 534, 601, 533, 619, 534, 601, 534, 1703, 534, 1702, 534, 1703, 534, 601, 534, 1702, 535, 600, 534, 618, 535, 601, 533, 602, 534, 602, 533, 602, 533, 601, 534, 601, 534, 602, 534, 619, 533, 601, 534, 602, 534, 601, 534, 601, 534, 601, 534, 601, 534, 601, 534, 618, 535, 600, 535, 601, 534, 601, 534, 601, 534, 601, 534, 602, 533, 602, 534, 623, 534, 1702, 535, 601, 534, 1702, 535, 589, 534}, // 19C - {8978, 4522, 508, 602, 533, 602, 533, 1703, 534, 602, 533, 1703, 533, 603, 533, 602, 533, 618, 534, 602, 533, 1704, 533, 1703, 533, 1703, 534, 602, 533, 1703, 533, 603, 533, 1719, 534, 602, 533, 602, 534, 601, 533, 602, 534, 601, 534, 602, 533, 602, 533, 619, 534, 601, 533, 603, 533, 602, 533, 602, 533, 602, 534, 602, 556, 578, 534, 618, 534, 602, 533, 602, 533, 602, 534, 601, 534, 602, 533, 601, 534, 602, 533, 624, 533, 1704, 533, 602, 533, 602, 533, 1691, 534}, // 20C - {8978, 4503, 506, 603, 533, 602, 533, 1703, 534, 602, 533, 1703, 533, 602, 533, 603, 532, 620, 533, 602, 533, 1703, 534, 1703, 533, 1703, 534, 601, 560, 1677, 533, 1704, 533, 619, 533, 602, 533, 602, 534, 601, 534, 601, 534, 602, 533, 602, 533, 602, 533, 619, 533, 603, 532, 603, 533, 602, 533, 602, 533, 602, 533, 602, 534, 601, 534, 618, 534, 602, 533, 602, 533, 602, 533, 602, 534, 602, 533, 602, 533, 602, 533, 625, 532, 1703, 534, 602, 533, 604, 531, 590, 533}, // 21C - {8978, 4523, 508, 601, 534, 601, 535, 1702, 534, 600, 535, 1702, 535, 600, 535, 600, 535, 618, 534, 603, 532, 1703, 534, 1702, 534, 1702, 535, 601, 534, 1702, 535, 1702, 535, 1719, 534, 601, 534, 601, 534, 601, 534, 601, 535, 600, 535, 600, 535, 601, 534, 618, 534, 601, 534, 601, 534, 601, 535, 601, 534, 600, 535, 601, 534, 602, 533, 618, 535, 601, 534, 601, 534, 601, 534, 601, 534, 601, 535, 600, 535, 600, 534, 623, 534, 602, 534, 1703, 534, 1702, 534, 1690, 535}, // 22C - {8978, 4504, 507, 601, 534, 601, 534, 1702, 534, 602, 534, 1702, 534, 602, 534, 600, 535, 618, 534, 601, 534, 1702, 535, 1702, 534, 1702, 534, 1703, 534, 601, 535, 600, 535, 618, 533, 601, 535, 601, 534, 601, 535, 600, 535, 600, 534, 602, 534, 600, 535, 618, 534, 601, 534, 602, 533, 601, 535, 601, 535, 600, 534, 601, 535, 600, 534, 618, 534, 601, 535, 601, 535, 600, 534, 601, 534, 601, 535, 600, 534, 601, 535, 622, 535, 601, 535, 1702, 534, 1703, 533, 590, 534}, // 23C - {8978, 4529, 507, 602, 534, 600, 535, 1702, 535, 600, 535, 1703, 533, 602, 533, 601, 535, 617, 535, 601, 534, 1702, 535, 1702, 534, 1702, 534, 1703, 534, 601, 535, 600, 534, 1720, 534, 601, 534, 601, 534, 602, 533, 601, 535, 601, 534, 601, 534, 601, 535, 617, 534, 602, 534, 601, 534, 601, 534, 601, 534, 601, 534, 602, 533, 602, 534, 618, 534, 601, 534, 601, 534, 601, 534, 602, 534, 600, 534, 601, 535, 601, 534, 623, 533, 602, 534, 1702, 534, 602, 534, 1691, 534}, // 24C - {8978, 4529, 506, 603, 533, 602, 533, 1703, 533, 602, 534, 1703, 533, 602, 533, 602, 533, 619, 533, 603, 533, 1703, 533, 1703, 534, 1703, 534, 1702, 534, 602, 533, 1703, 534, 619, 533, 601, 534, 602, 533, 602, 533, 602, 533, 602, 534, 602, 533, 601, 534, 619, 533, 602, 533, 601, 535, 601, 534, 601, 534, 602, 533, 602, 533, 603, 533, 620, 532, 602, 533, 602, 533, 602, 533, 602, 534, 601, 534, 601, 534, 601, 534, 623, 534, 602, 533, 1703, 534, 602, 533, 590, 533}, // 25C - {8978, 4504, 506, 603, 533, 602, 533, 1703, 534, 601, 534, 1703, 533, 602, 534, 602, 533, 619, 533, 602, 533, 1704, 532, 1704, 534, 1702, 533, 1704, 533, 602, 533, 1704, 533, 1720, 534, 602, 533, 601, 534, 602, 533, 602, 533, 602, 533, 603, 532, 602, 535, 617, 534, 602, 534, 601, 533, 602, 533, 602, 534, 601, 533, 603, 533, 602, 533, 620, 532, 602, 533, 603, 532, 603, 533, 602, 533, 601, 534, 602, 533, 602, 533, 624, 533, 602, 534, 601, 534, 1703, 534, 1691, 533}, // 26C - {8978, 4497, 507, 600, 534, 602, 533, 1704, 533, 602, 533, 1704, 533, 602, 533, 602, 533, 619, 533, 602, 533, 1704, 532, 1705, 533, 1703, 533, 1704, 533, 1703, 533, 602, 533, 620, 532, 603, 533, 602, 533, 602, 534, 601, 533, 602, 533, 603, 532, 603, 533, 619, 533, 602, 533, 602, 533, 602, 534, 601, 533, 603, 533, 601, 534, 602, 534, 618, 533, 602, 533, 603, 533, 602, 533, 602, 533, 602, 533, 603, 532, 603, 533, 623, 534, 601, 534, 602, 533, 1704, 532, 591, 533}, // 27C - {8978, 4503, 506, 602, 534, 603, 532, 1704, 532, 603, 532, 1704, 533, 602, 533, 603, 532, 620, 532, 603, 533, 1704, 531, 1705, 532, 1705, 532, 1704, 532, 1704, 533, 603, 532, 1721, 533, 602, 533, 603, 532, 602, 533, 603, 532, 603, 533, 602, 533, 602, 533, 619, 533, 603, 533, 601, 534, 602, 532, 603, 533, 602, 534, 601, 533, 603, 532, 620, 533, 602, 533, 602, 533, 603, 532, 603, 533, 602, 533, 602, 533, 602, 534, 623, 532, 603, 533, 603, 533, 602, 532, 1692, 534}, // 28C - {8978, 4497, 507, 602, 532, 603, 533, 1703, 534, 601, 533, 1704, 533, 603, 532, 602, 534, 619, 532, 603, 533, 1704, 532, 1704, 533, 1704, 532, 1704, 534, 1702, 533, 1704, 533, 619, 533, 602, 534, 602, 533, 602, 532, 602, 534, 603, 533, 601, 533, 602, 533, 619, 533, 602, 533, 603, 533, 602, 533, 602, 533, 602, 533, 603, 533, 602, 533, 619, 533, 602, 533, 602, 533, 603, 533, 602, 532, 603, 532, 603, 533, 602, 533, 624, 533, 602, 533, 603, 532, 603, 533, 589, 534}, // 29C - {8978, 4504, 507, 601, 533, 603, 533, 1703, 533, 602, 534, 1703, 533, 602, 533, 602, 534, 618, 533, 602, 534, 1703, 533, 1704, 533, 1703, 534, 1703, 533, 1704, 532, 1704, 533, 1720, 534, 602, 533, 602, 533, 602, 533, 602, 533, 602, 533, 602, 534, 601, 534, 619, 533, 602, 533, 602, 533, 602, 534, 601, 534, 602, 533, 601, 534, 602, 534, 619, 532, 602, 534, 602, 532, 603, 533, 602, 533, 602, 533, 602, 534, 601, 533, 624, 533, 1704, 533, 1703, 534, 1703, 533, 1691, 534} // 30C - }}; - -const uint16_t ir_code_fan[4][91] = { - {8976, 4498, 559, 551, 584, 550, 560, 1677, 586, 550, 584, 1652, 585, 551, 560, 575, 585, 568, 559, 576, 585, 551, 585, 550, 584, 552, 559, 1677, 584, 1653, 560, 1677, 585, 1669, 584, 551, 560, 576, 559, 576, 584, 554, 583, 550, 584, 551, 585, 551, 585, 567, 561, 575, 584, 551, 560, 576, 584, 551, 585, 550, 560, 576, 584, 551, 560, 593, 560, 576, 584, 550, 585, 551, 584, 551, 584, 552, 584, 551, 584, 551, 560, 598, 559, 576, 585, 1652, 583, 1654, 559, 565, 559}, // AUTO - {8990, 4500, 530, 579, 557, 578, 557, 1680, 557, 578, 557, 1680, 557, 579, 557, 578, 557, 595, 557, 579, 557, 578, 557, 579, 556, 1680, 558, 1679, 557, 1680, 558, 1680, 556, 1697, 558, 577, 558, 579, 555, 579, 558, 578, 557, 578, 557, 578, 557, 579, 556, 596, 557, 579, 556, 579, 557, 578, 557, 579, 556, 579, 557, 579, 556, 579, 557, 595, 557, 578, 558, 578, 557, 579, 556, 579, 557, 579, 556, 578, 557, 579, 557, 600, 557, 579, 556, 1680, 557, 579, 557, 1668, 557}, // HIGH - {8977, 4497, 508, 601, 533, 602, 535, 1702, 534, 602, 533, 1703, 535, 601, 534, 602, 533, 619, 534, 601, 533, 603, 533, 1703, 534, 602, 533, 1704, 533, 1704, 534, 1702, 534, 1721, 533, 601, 534, 602, 534, 602, 533, 602, 533, 602, 534, 601, 536, 600, 534, 618, 534, 602, 534, 601, 534, 602, 533, 601, 534, 602, 534, 602, 533, 602, 533, 619, 534, 602, 533, 602, 533, 602, 533, 603, 533, 602, 534, 602, 534, 601, 533, 624, 534, 602, 533, 1703, 534, 603, 534, 588, 533}, // MED - {8976, 4505, 506, 602, 534, 601, 534, 1703, 533, 603, 533, 1705, 532, 602, 534, 602, 533, 619, 534, 601, 533, 603, 533, 1704, 533, 1704, 533, 1703, 533, 1705, 533, 1704, 533, 1720, 534, 602, 533, 602, 534, 601, 534, 602, 533, 602, 534, 601, 534, 603, 532, 620, 532, 603, 532, 604, 532, 602, 534, 602, 532, 603, 534, 602, 533, 602, 534, 618, 534, 601, 534, 602, 534, 602, 534, 600, 534, 602, 533, 602, 534, 602, 533, 624, 534, 602, 533, 602, 534, 1703, 533, 1692, 534} // LOW -}; -const uint16_t ir_code_off[91] = {9004, 4475, 559, 552, 583, 578, 557, 1680, 557, 554, 582, 578, 557, 553, 582, 553, 583, 569, 583, 552, 584, 1679, 558, 552, 583, 578, 557, 1680, 557, 1655, 582, 1680, 557, 1697, 557, 553, 582, 578, 558, 577, 558, 578, 558, 552, 583, 578, 557, 579, 557, 569, 583, 553, 583, 578, 557, 552, 584, 577, 558, 553, 582, 553, 582, 553, 583, 594, 557, 579, 557, 579, 556, 552, 584, 579, 557, 578, 557, 552, 584, 578, 557, 600, 557, 1653, 584, 552, 584, 1679, 558, 539, 584}; - -size_t getInfraredCode(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr) { - switch (mode) { - case 0: // Off - *codePtr = &(ir_code_off[0]); - return 91; - case 1: // Fan Only - *codePtr = &(ir_code_fan[fan_speed][0]); - return 91; - case 2: // Cool - *codePtr = &(ir_code_cool[fan_speed][temperature_index][0]); - return 91; - default: // Invalid mode - return 0; - } -} \ No newline at end of file diff --git a/src/ir_codes.hpp b/src/ir_codes.hpp deleted file mode 100644 index 4b02e08..0000000 --- a/src/ir_codes.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include -#include - -// IR codes for the remote control -extern const uint16_t ir_code_cool[4][16][91]; -extern const uint16_t ir_code_fan[4][91]; -extern const uint16_t ir_code_off[91]; - -// Function to retrieve the IR code for the given mode, fan speed and temperature -size_t getInfraredCode(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr); \ No newline at end of file diff --git a/src/ir_codes_daikin.cpp b/src/ir_codes_daikin.cpp new file mode 100644 index 0000000..6fa4292 --- /dev/null +++ b/src/ir_codes_daikin.cpp @@ -0,0 +1,109 @@ +#include + +const uint16_t ir_code_cool_daikin[4][17][407] = { + // Fan Speed Auto + { + + {5043,2131,404,1747,379,697,379,697,379,695,407,1746,379,698,378,697,379,697,379,696,406,1745,380,697,380,1772,379,1772,379,697,379,1773,379,1772,379,1773,379,1772,406,1746,379,697,379,1772,380,695,381,696,405,670,406,671,379,696,380,697,379,1772,405,671,379,696,380,1771,407,670,379,696,380,696,380,1772,405,670,405,672,379,697,379,695,380,697,379,697,379,696,380,696,379,697,380,696,379,696,380,696,380,696,380,696,380,1772,379,1772,380,1772,379,696,380,697,379,1772,379,697,379,29383,5043,2130,380,1772,380,696,405,671,379,697,405,1746,380,696,380,696,405,670,406,670,380,1772,380,696,405,1746,405,1747,405,671,379,1773,405,1746,379,1773,379,1773,379,1773,379,695,380,1772,407,669,379,697,379,696,407,670,379,696,380,696,379,1773,405,671,379,695,380,1773,379,697,405,670,380,696,380,696,405,671,379,697,379,697,379,696,380,696,379,1772,380,1772,379,696,405,671,380,1772,406,1746,380,1772,379,696,380,696,379,697,379,697,379,696,380,696,380,695,381,695,380,697,405,1746,380,696,379,697,406,670,379,697,378,1773,379,697,405,670,380,696,380,696,380,696,380,696,379,696,380,696,380,696,380,695,380,696,380,696,380,697,379,696,405,670,406,671,382,693,405,671,380,695,408,1748,401,1747,379,1773,379,696,406,670,380,695,381,697,378,1773,405,1746,379,1772,380,1772,380,696,379,696,380,697,379,697,379,696,380,697,405,670,379,696,380,696,380,697,379,696,379,697,405,671,379,696,380,696,381,695,379,697,379,1772,380,696,379,696,380,697,379,696,380,696,380,696,405,670,380,697,379,697,379,696,380,696,380,695,380,696,380,697,404,671,406,671,378,697,379,696,380,696,380,696,380,696,379,697,406,669,407,669,380,696,380,696,404,1748,379,1772,380,697,378,1773,379,1772,380,697,378,696,380,696,380}, //16C + {5043,2130,405,1747,380,696,380,696,406,670,384,1767,380,696,380,695,380,702,374,697,405,1746,407,669,405,1747,406,1745,380,696,379,1773,379,1772,380,1772,379,1772,380,1772,379,697,379,1772,380,696,406,670,405,671,406,670,379,696,406,671,379,1771,406,670,380,697,406,1745,405,671,379,697,379,696,405,1747,380,696,380,696,379,696,406,670,380,696,380,696,379,697,380,695,380,696,380,696,379,697,379,697,379,696,380,696,405,1746,406,1746,380,1772,405,671,379,696,382,1770,380,696,379,29384,5042,2130,380,1772,407,670,406,669,380,696,379,1773,379,697,406,669,380,695,381,695,385,1767,406,670,380,1777,402,1744,407,669,380,1772,379,1772,401,1750,381,1771,380,1772,406,670,380,1771,380,697,379,696,406,670,379,697,379,696,380,696,405,1747,406,670,379,696,406,1746,380,696,379,697,379,696,380,696,380,696,380,695,381,695,407,669,380,696,380,1771,380,1772,380,696,380,696,379,1772,380,1772,380,1772,379,697,379,697,404,672,378,696,380,697,405,670,380,696,380,696,379,697,380,1771,380,697,381,694,380,696,380,695,380,1775,377,696,379,696,380,696,380,696,380,696,380,696,406,669,380,697,379,696,408,668,404,672,379,697,406,669,380,695,381,696,380,695,405,672,379,696,380,696,380,696,406,669,381,696,379,1772,380,696,379,697,405,670,406,1746,380,1771,406,1746,380,1771,380,696,380,697,379,696,380,696,379,697,380,695,380,697,379,696,406,670,379,697,379,696,380,696,406,670,380,696,379,697,379,697,379,697,379,1771,380,696,380,696,380,697,379,696,380,696,379,697,379,696,380,696,405,671,379,696,380,696,407,670,405,670,407,669,379,697,405,670,380,696,380,696,405,670,381,696,379,696,380,696,380,696,405,670,406,670,380,696,380,1771,381,696,379,1771,381,1772,409,1743,379,696,380,696,406,670,379}, //17C + {5069,2104,407,1745,380,696,380,696,380,695,380,1772,380,696,380,696,379,696,380,696,380,1772,380,696,379,1772,380,1771,381,696,405,1746,380,1771,381,1771,380,1772,380,1771,380,696,380,1772,380,695,406,670,408,668,380,696,380,695,380,697,406,1745,380,696,380,696,379,1772,407,669,405,671,380,695,406,1746,380,696,405,671,380,695,380,697,380,695,380,695,381,696,379,696,380,696,380,696,406,670,380,696,388,687,380,696,380,1771,381,1771,380,1772,380,696,379,697,405,1746,380,696,380,29361,5064,2130,406,1746,380,696,379,697,405,670,380,1772,380,695,380,696,380,696,380,696,380,1771,380,696,380,1771,381,1771,380,696,406,1745,381,1771,380,1771,381,1771,380,1772,380,696,406,1745,407,669,381,694,381,696,380,695,406,670,380,696,405,1746,380,696,380,696,407,1745,407,669,405,671,379,696,380,695,381,696,380,695,380,696,380,696,406,670,406,1745,380,1772,405,671,379,696,380,1771,381,1772,380,1771,380,696,406,670,384,691,381,695,380,696,380,696,380,695,381,696,379,696,380,1772,406,669,407,669,380,696,380,696,380,1772,406,669,407,669,407,669,380,696,405,671,405,670,380,696,380,696,380,695,408,668,406,669,381,695,380,697,379,696,380,696,407,669,405,671,380,695,408,668,405,1746,381,695,380,695,381,1772,380,696,406,669,380,696,380,1771,406,1746,380,1771,381,1771,406,670,380,696,406,670,405,671,380,695,381,695,407,669,379,697,405,670,380,696,406,670,380,696,407,668,380,696,407,669,405,671,405,670,381,1771,407,673,376,696,380,695,381,695,406,670,380,696,407,669,405,670,381,695,406,670,405,671,406,670,407,668,407,669,380,696,406,670,405,671,380,695,406,670,380,696,405,670,381,696,406,668,407,670,380,695,381,695,380,1772,380,1771,408,1744,407,1745,380,1771,380,696,380,696,380,695,407}, //18C + {5069,2105,380,1771,380,696,406,670,379,697,404,1747,380,696,407,669,380,696,406,670,379,1772,380,696,406,1745,380,1772,406,670,406,1745,406,1746,406,1746,379,1773,379,1772,380,696,379,1773,404,671,380,696,386,690,405,670,405,672,404,671,379,1773,379,696,407,670,379,1771,406,671,406,669,406,670,380,1773,378,696,380,696,380,696,379,697,380,696,379,696,405,670,406,671,379,697,379,696,380,696,380,696,406,670,379,696,380,1772,380,1772,380,1771,380,696,380,695,380,1773,379,697,379,29360,5065,2130,380,1773,379,697,379,697,379,696,379,1771,381,696,380,696,405,672,378,697,379,1772,379,697,379,1772,380,1772,405,672,378,1772,380,1772,380,1771,380,1772,380,1772,379,696,407,1745,380,696,380,697,404,670,380,696,380,697,379,696,379,1773,378,697,380,697,378,1772,407,670,379,697,379,697,378,697,379,697,404,672,381,694,380,696,405,670,380,1775,377,1771,380,697,379,696,380,1772,405,1746,380,1772,380,696,379,697,404,672,379,697,405,671,379,696,379,697,379,696,380,697,379,1772,379,697,379,696,380,697,406,668,380,1772,380,697,379,696,380,696,379,697,379,696,380,697,378,697,380,696,379,696,380,697,379,696,379,697,380,696,379,698,378,697,378,697,380,695,380,696,380,697,379,696,379,1773,379,697,379,1772,379,697,379,697,379,697,379,1772,379,1773,379,1773,379,1772,379,697,379,697,404,672,405,670,379,697,379,697,379,697,378,697,406,670,379,696,380,696,380,696,380,696,379,696,380,696,406,670,379,697,379,1773,379,697,404,672,378,697,379,697,379,697,379,696,380,695,380,696,380,697,379,697,379,695,380,696,380,696,380,697,380,695,379,696,380,697,379,697,379,696,380,696,379,697,379,697,379,696,380,696,407,669,379,697,379,1772,380,696,379,696,383,693,380,695,381,1772,380,695,406,670,380}, //19C + {5087,2108,380,1772,406,670,379,696,380,696,380,1772,379,697,379,697,379,696,407,669,379,1772,380,697,379,1773,378,1772,380,696,380,1771,380,1772,380,1772,379,1772,407,1745,380,695,380,1773,379,696,380,696,379,697,379,696,406,671,379,696,407,1745,405,671,379,697,379,1772,379,697,379,696,380,697,379,1772,379,697,379,697,379,697,378,697,379,697,379,696,379,696,381,696,379,697,406,669,380,697,379,697,382,693,380,695,380,1773,378,1773,379,1772,380,696,406,671,378,1772,380,697,379,29360,5065,2130,380,1773,379,696,405,670,380,697,379,1772,380,696,380,695,380,697,379,696,406,1747,378,697,379,1773,378,1773,379,697,379,1772,405,1747,379,1772,380,1772,379,1773,379,696,380,1772,379,697,378,697,406,670,379,697,379,696,380,696,380,1771,380,696,380,696,380,1772,380,696,379,697,379,696,380,696,380,696,379,697,379,697,379,697,379,696,379,1773,379,1773,404,671,379,697,379,1772,405,1747,380,1771,380,696,380,697,384,692,378,697,379,697,379,697,379,696,379,697,379,697,379,1772,379,697,379,697,379,696,380,696,380,1772,379,696,380,696,380,697,378,697,379,697,379,697,379,697,378,697,405,671,379,698,378,697,379,696,379,696,380,697,379,697,379,696,379,697,379,697,379,697,379,1772,379,1773,379,697,404,1747,379,697,379,696,379,698,404,1747,379,1773,378,1772,380,1773,379,697,433,643,379,696,379,697,379,696,380,696,379,696,380,697,379,697,379,696,379,697,405,671,379,696,380,697,383,693,404,671,379,697,379,1777,375,697,378,697,405,671,379,697,379,697,403,672,379,696,380,697,379,696,379,697,379,697,379,697,379,697,379,696,406,670,379,697,379,696,380,697,378,698,379,696,379,697,379,697,379,697,378,697,379,697,379,696,380,1772,379,1773,379,697,378,697,379,697,379,1772,380,697,379,696,380}, //20C + {5043,2130,407,1745,407,669,379,696,381,695,405,1747,380,695,406,670,406,670,380,696,406,1745,380,697,405,1745,406,1746,406,670,406,1746,405,1746,406,1745,407,1745,407,1745,390,686,380,1772,405,670,406,670,380,695,380,696,380,697,405,670,406,1745,408,668,405,670,407,1745,393,683,406,670,380,696,406,1745,380,696,406,670,405,670,381,696,379,696,380,696,406,669,408,669,406,670,379,696,380,697,379,696,406,670,405,670,384,1768,406,1746,380,1770,407,670,405,670,406,1746,380,696,405,29336,5064,2130,380,1772,406,670,405,671,395,680,380,1772,406,670,380,696,380,696,379,696,380,1772,405,671,406,1746,379,1772,379,696,380,1771,381,1772,405,1746,380,1771,380,1772,380,697,405,1745,380,696,380,696,380,696,380,696,407,669,379,696,380,1771,381,695,380,696,380,1771,380,696,380,697,379,696,380,696,405,671,379,697,379,696,380,696,406,669,380,1772,406,1746,382,694,405,671,379,1772,380,1771,381,1771,380,697,405,669,381,695,405,672,405,671,379,696,405,671,405,670,380,696,380,1771,381,696,379,695,381,696,380,695,380,1773,405,670,380,696,406,669,407,670,379,696,380,696,380,696,380,696,379,696,380,696,380,697,405,670,406,669,406,671,379,695,381,696,380,696,379,697,379,696,380,696,380,695,380,1771,381,1771,406,671,379,696,380,696,380,1771,380,1772,380,1771,380,1772,380,696,405,670,381,696,405,670,380,697,406,669,380,695,381,695,380,697,379,696,380,696,379,697,379,697,406,669,407,668,381,696,405,670,380,1772,380,696,380,696,379,697,405,670,380,696,379,697,379,696,380,696,380,696,380,696,404,672,379,697,406,669,380,695,407,670,379,696,406,670,380,695,381,696,384,692,404,671,407,669,380,695,406,671,405,670,380,696,380,1771,380,696,407,1745,380,696,379,697,405,1746,380,696,407,669,405}, //21C + {5042,2131,379,1773,378,699,377,697,402,674,379,1773,381,694,379,698,378,697,379,697,379,1772,406,670,379,1772,379,1773,379,697,379,1772,379,1773,378,1774,378,1774,378,1772,380,697,378,1773,379,698,378,697,379,697,379,697,378,698,405,670,379,1772,379,698,378,697,379,1773,378,698,378,697,379,697,379,1773,405,670,379,697,379,697,379,697,379,697,378,697,379,697,379,697,405,670,380,697,378,697,379,696,380,697,378,698,378,1774,378,1772,405,1748,378,697,379,697,378,1773,380,697,378,29362,5090,2103,381,1771,380,696,380,696,384,691,381,1771,380,696,405,671,380,696,379,696,380,1772,384,691,381,1771,406,1745,407,669,406,1746,407,1744,407,1745,406,1746,406,1745,406,669,407,1745,407,670,404,671,407,669,405,670,381,695,406,670,406,1746,405,670,380,696,380,1772,380,695,407,669,406,670,406,670,405,671,406,669,406,670,384,692,380,695,381,1770,406,1746,380,696,380,697,406,1744,407,1745,406,1746,406,670,379,696,398,678,379,698,377,698,378,697,379,697,378,698,378,698,377,1774,377,699,351,726,349,726,350,726,349,1802,349,728,348,731,344,728,348,728,347,729,371,704,372,705,372,702,373,704,373,702,373,703,373,702,374,702,373,703,373,703,374,701,374,703,373,702,373,703,373,1778,374,702,373,1778,373,1779,373,703,372,704,371,706,369,1781,371,1780,347,1805,347,1804,347,730,346,729,347,729,347,731,345,728,348,728,347,729,347,729,347,728,373,703,373,703,373,703,374,701,374,702,374,702,375,701,375,700,376,1776,376,700,376,699,377,699,377,699,377,698,378,698,377,698,384,693,377,698,378,697,405,671,389,692,374,697,404,672,404,671,404,672,404,672,403,673,403,672,378,698,404,672,403,673,403,673,377,698,403,673,403,673,403,1748,403,1749,402,1749,377,699,402,674,377,1775,401,675,376,699,376}, //22C + {5043,2131,379,1772,380,697,379,697,378,697,379,1772,380,697,378,697,379,697,379,697,379,1772,379,697,379,1772,380,1772,379,698,378,1772,406,1746,379,1772,380,1772,379,1772,380,697,379,1772,379,698,378,698,378,697,379,697,379,696,379,697,379,1772,380,696,380,697,382,1768,380,697,379,696,379,697,379,1772,380,696,406,670,380,695,380,697,379,696,380,696,379,696,380,697,379,696,379,696,381,696,379,697,379,697,379,696,379,1772,380,1773,379,1773,404,671,379,697,379,1773,378,696,380,29382,5043,2131,404,1748,379,696,380,697,379,696,405,1746,380,696,379,697,379,697,379,697,379,1772,379,697,379,1772,380,1772,379,697,379,1772,380,1772,379,1773,379,1772,379,1772,380,696,380,1772,379,697,379,696,380,697,379,697,379,695,380,697,379,1771,381,696,406,669,380,1772,379,698,378,697,379,697,379,697,379,696,379,697,379,697,379,696,380,695,380,1773,379,1771,381,695,381,696,379,1772,380,1772,379,1773,378,697,380,697,378,697,379,696,380,697,379,696,379,697,379,697,379,697,379,1772,379,697,379,697,379,697,379,697,378,1773,379,696,379,697,406,671,378,697,379,697,379,696,380,697,378,697,379,697,379,697,379,696,379,697,379,696,380,696,380,697,378,698,378,697,379,696,380,696,380,696,380,1772,379,1773,379,1773,404,671,379,696,380,697,378,1773,379,1772,380,1772,379,1772,380,695,381,696,405,671,379,697,379,696,380,696,380,696,379,697,379,696,379,697,379,698,378,697,378,697,380,697,378,697,379,697,379,697,379,1772,379,698,378,697,379,697,378,698,379,696,379,698,378,697,379,696,406,671,379,697,378,697,379,697,379,697,379,696,379,696,380,697,379,697,378,697,379,696,380,697,379,696,380,696,380,696,379,697,380,696,379,697,379,1771,380,696,380,697,379,1772,379,697,379,1772,407,670,379,696,405}, //23C + {5034,2137,375,1778,398,679,397,677,373,703,373,1780,373,703,371,703,372,706,397,705,345,1779,373,705,369,1807,344,1781,399,678,370,1781,397,1754,371,1781,380,1770,372,1808,344,706,370,1780,371,707,368,733,343,733,371,678,371,703,372,732,370,1781,370,705,346,731,369,1759,368,731,370,706,344,732,344,1808,343,732,344,707,394,707,345,731,370,680,396,705,344,732,343,706,370,733,370,679,370,706,370,733,343,731,345,731,371,1781,344,1808,342,1783,394,709,342,733,343,1808,344,732,344,29393,5032,2140,397,1781,343,709,368,732,342,734,341,1810,343,733,341,735,343,733,367,710,340,1839,311,735,344,1781,369,1810,342,733,370,1783,365,1785,343,1811,341,1809,336,1789,368,735,341,1809,342,734,341,737,367,708,368,708,341,735,342,732,369,1784,341,734,340,736,342,1810,339,737,368,706,343,734,342,732,342,735,343,733,342,734,340,735,342,735,342,1808,343,1808,370,710,341,704,372,1807,342,1810,371,1780,345,704,371,732,343,733,344,731,345,731,342,734,371,677,372,731,343,733,370,1754,398,679,371,703,372,704,372,704,373,1778,372,703,374,703,399,676,373,704,397,678,372,703,403,673,374,702,400,675,399,677,400,676,400,675,399,677,401,675,427,649,374,701,401,675,401,674,402,675,402,1750,401,1750,401,1751,404,1747,403,674,401,673,376,700,402,1750,401,1750,375,1777,375,1777,374,701,375,701,403,673,402,673,402,674,404,672,376,700,403,673,403,672,403,673,405,671,403,672,406,670,377,699,376,699,404,672,377,699,433,1719,404,672,403,673,375,700,404,672,404,672,406,670,402,673,405,671,405,671,403,672,433,643,430,647,402,673,406,669,406,671,404,671,406,670,406,670,404,671,379,698,433,642,403,673,402,674,377,698,378,698,404,672,403,1748,406,1746,403,673,406,1745,377,700,377,1774,406,670,377,698,405}, //24C + {5069,2103,406,1746,406,669,407,669,407,669,380,1772,407,668,381,696,380,695,380,696,380,1771,406,670,381,1771,406,1745,380,696,385,1767,380,1771,381,1771,406,1745,381,1771,407,669,406,1745,380,696,406,670,380,696,406,670,406,670,381,694,407,1745,400,676,405,671,405,1746,380,696,380,695,407,670,379,1772,407,668,381,696,379,696,407,670,406,669,380,696,380,696,406,672,402,671,384,692,407,669,382,694,405,670,406,669,407,1745,406,1746,380,1772,405,670,406,670,380,1772,380,695,380,29383,5043,2130,407,1744,406,671,379,696,407,668,381,1772,380,696,379,697,406,669,380,696,380,1772,405,670,406,1746,405,1747,379,697,404,1746,406,1746,380,1772,380,1771,380,1772,380,696,380,1771,406,671,405,671,379,695,380,697,379,697,405,670,380,1772,379,696,380,697,404,1747,380,695,380,696,406,670,380,696,405,671,407,669,405,670,380,695,380,696,380,1772,405,1747,405,671,406,669,380,1772,406,1750,375,1772,406,670,405,670,380,696,406,670,380,696,380,695,380,697,379,696,380,696,406,1746,405,670,407,670,379,696,406,669,380,1772,380,696,406,671,404,670,380,696,380,696,380,696,386,690,379,696,407,670,405,670,380,695,406,670,380,696,396,680,380,696,380,696,405,671,405,670,380,696,380,696,405,670,380,696,380,696,380,1771,380,696,380,696,405,1747,379,1772,380,1771,407,1745,380,696,380,696,380,696,407,668,407,669,380,696,406,670,405,670,380,696,380,696,380,696,406,673,402,670,380,696,405,671,406,670,380,695,380,1772,406,670,405,671,380,695,380,696,380,696,405,671,379,697,407,668,380,696,393,683,380,695,380,697,379,696,380,696,380,696,379,697,379,696,380,696,380,695,380,697,379,696,380,696,380,696,379,697,379,696,380,696,380,1772,380,695,406,1746,380,1771,380,697,379,1772,380,696,379,697,379}, //2C5C + {5043,2131,380,1772,379,696,380,696,379,698,378,1772,380,696,380,696,379,697,379,696,380,1772,379,697,379,1773,379,1772,380,696,379,1772,388,1763,381,1771,380,1772,379,1773,379,697,379,1772,379,697,405,670,380,696,380,696,405,671,380,696,383,1768,380,696,380,696,379,1772,380,696,379,697,379,697,379,1772,407,669,380,696,379,696,380,696,407,670,378,697,379,697,380,695,379,697,379,697,379,697,405,671,379,697,379,696,379,1773,379,1772,379,1773,379,696,380,697,379,1772,379,697,379,29383,5043,2130,380,1771,380,696,379,697,379,697,379,1772,380,696,379,697,380,696,379,697,379,1772,379,696,380,1772,380,1772,379,697,379,1772,379,1773,380,1771,380,1772,380,1771,381,695,379,1772,406,670,380,696,380,695,380,697,379,697,379,697,403,1748,379,697,380,696,406,1745,378,698,380,696,379,696,380,697,404,670,381,696,379,697,379,696,380,696,379,1772,380,1772,380,696,379,697,379,1772,407,1745,380,1771,380,696,406,669,407,669,381,695,380,695,381,696,405,671,379,696,380,696,406,1746,380,695,406,671,379,695,381,695,381,1771,381,695,380,695,380,697,380,695,380,696,380,696,380,695,381,695,380,696,380,696,406,670,380,695,407,669,381,695,402,674,380,696,406,669,381,696,405,670,380,1771,406,669,382,695,406,670,380,1771,381,695,380,695,407,1745,380,1771,407,1745,406,1746,380,695,381,695,406,670,406,669,381,696,406,669,380,696,407,669,406,669,407,669,406,670,407,669,405,670,381,695,406,670,407,669,406,670,406,1745,406,670,379,697,380,695,381,695,406,670,380,696,393,682,380,696,380,696,380,696,380,696,404,671,380,696,382,694,379,697,379,696,380,696,405,671,379,697,379,696,380,696,379,697,378,698,377,699,378,698,377,699,376,1775,350,1802,350,1801,350,1801,350,726,349,1803,349,727,374,702,372}, //26C + {5039,2132,379,1772,379,697,379,696,379,697,379,1772,379,697,379,697,379,696,380,696,379,1773,379,697,379,1772,379,1772,380,697,379,1772,379,1773,379,1772,379,1773,379,1772,380,696,380,1772,379,696,380,696,380,696,380,696,380,696,379,696,380,1772,379,697,379,697,379,1772,380,696,379,697,379,697,379,1772,380,696,379,696,380,696,379,697,380,695,380,696,380,696,379,696,380,696,380,696,380,695,381,696,379,696,380,696,379,1772,380,1771,380,1772,380,696,379,697,379,1772,379,697,379,29381,5042,2131,379,1773,378,697,433,643,432,644,378,1773,432,644,433,642,434,643,431,644,379,1772,435,641,433,1719,432,1719,433,643,434,1717,433,1719,433,1718,379,1773,433,1718,378,698,378,1773,379,698,432,644,431,644,432,644,433,643,433,642,433,1718,432,644,432,644,432,1719,433,643,433,643,432,644,434,642,433,642,432,644,434,642,431,645,433,643,401,1749,434,1718,432,644,430,646,432,1719,378,1773,432,1720,433,642,432,644,433,643,433,643,432,644,433,643,431,644,378,698,432,644,432,1719,432,643,462,614,379,697,433,643,433,1718,434,642,378,698,433,643,432,643,433,643,433,643,432,644,431,644,433,643,433,643,378,698,431,645,433,642,378,698,432,644,432,643,432,645,432,643,433,642,404,673,432,1719,433,643,432,643,432,1719,434,643,432,644,432,1719,378,1773,379,1773,378,1773,379,697,433,643,434,642,431,644,432,644,433,643,433,642,430,646,379,697,432,644,432,643,434,642,433,643,432,644,432,643,434,642,431,644,433,1719,433,643,378,699,431,644,432,643,433,644,429,645,434,642,432,644,433,643,433,643,431,645,434,641,432,644,431,645,378,698,432,643,433,642,434,642,433,643,379,697,433,642,434,643,432,643,432,644,431,645,431,645,431,1720,432,643,433,643,433,643,431,1720,379,1773,433,643,431,645,430}, //27C + {5043,2130,405,1746,381,695,380,696,380,696,380,1771,380,697,379,696,380,696,380,695,380,1772,380,696,405,1747,379,1772,380,695,381,1771,406,1745,381,1772,379,1772,380,1771,380,697,379,1772,380,695,381,696,379,696,409,668,379,696,380,695,407,1745,405,672,379,696,380,1771,380,696,380,696,380,695,381,1771,380,697,404,671,380,696,380,695,380,696,380,695,381,696,380,696,379,696,380,696,380,695,381,695,380,697,379,696,380,1771,381,1771,380,1772,379,697,379,696,380,1771,381,696,405,29356,5044,2130,380,1771,381,695,380,695,381,696,380,1772,405,670,380,695,381,696,379,696,380,1771,435,642,380,1771,380,1772,380,696,379,1772,380,1771,381,1772,404,1746,381,1772,380,696,379,1772,380,696,380,696,379,696,380,695,381,696,380,695,381,1771,380,696,380,695,406,1745,381,696,380,695,381,696,379,696,380,696,380,696,380,696,379,697,379,695,381,1772,380,1771,380,696,380,696,380,1772,379,1772,380,1771,380,697,379,696,380,695,381,695,406,670,407,669,380,696,380,696,380,695,380,1772,380,695,381,696,379,697,379,696,380,1772,380,696,380,695,380,696,380,697,379,695,380,697,379,696,380,695,408,669,380,696,379,696,380,696,380,696,379,697,379,696,380,696,380,696,380,696,379,696,380,1771,381,1771,380,697,379,696,380,1771,380,696,406,670,380,1771,380,1772,380,1772,380,1771,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,695,380,696,380,696,380,696,380,695,381,696,379,696,380,696,380,696,380,695,380,1771,381,696,406,669,380,697,379,696,380,696,380,695,381,696,379,696,380,696,407,669,380,696,380,695,380,696,405,671,380,696,435,640,380,695,381,696,380,695,380,696,380,696,380,696,406,669,381,695,380,697,379,696,380,1771,380,1772,380,696,432,644,380,1770,381,1771,381,694,381,696,380}, //28C + {5070,2104,407,1745,379,696,379,697,379,697,378,1774,378,698,378,696,407,671,377,697,434,1719,378,697,379,1773,379,1772,378,698,379,1773,378,1773,379,1772,379,1773,379,1772,379,698,378,1773,379,697,379,697,378,698,378,697,379,697,379,697,378,1773,380,696,378,699,378,1772,379,697,379,697,379,697,379,1772,379,697,379,697,378,697,379,698,378,697,378,698,378,697,379,697,379,697,379,697,379,696,380,697,379,697,378,696,380,1772,380,1772,405,1746,406,670,380,696,380,1772,406,669,380,29383,5042,2131,379,1772,380,696,405,671,380,695,381,1771,380,696,380,696,379,696,406,670,380,1772,405,670,381,1771,406,1746,380,695,380,1772,380,1772,405,1746,380,1771,380,1772,380,695,381,1771,380,697,378,697,380,696,379,696,381,696,379,696,380,1771,381,696,379,696,380,1772,379,697,379,696,380,696,406,670,380,696,379,696,380,696,380,696,379,697,406,1745,380,1771,380,697,379,700,376,1772,380,1771,380,1772,406,670,380,696,379,696,380,696,380,696,406,669,381,696,379,696,407,669,380,1771,381,695,380,696,379,697,380,696,379,1772,380,696,380,696,380,696,379,696,380,696,380,696,380,696,380,695,380,696,380,696,380,695,380,697,379,696,380,696,380,696,380,696,379,696,380,696,380,696,380,696,380,696,379,1772,380,695,380,1772,380,696,380,696,379,1772,380,1772,380,1772,379,1772,380,696,405,671,405,670,406,670,380,696,380,696,379,699,404,669,380,695,380,697,380,695,381,695,407,670,379,696,379,696,380,696,380,696,380,1772,379,697,379,696,380,696,380,696,380,695,407,670,379,697,379,696,380,696,380,696,379,696,380,696,380,696,379,696,380,697,379,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,381,695,380,696,380,696,379,1772,380,696,380,1771,380,697,379,1772,380,1771,380,697,379,696,380}, //29C + {5042,2131,384,1768,405,670,380,695,381,696,380,1771,380,696,406,669,380,697,405,670,406,1745,406,671,379,1771,381,1772,380,696,380,1770,407,1745,407,1745,406,1746,380,1771,407,669,380,1772,380,696,405,670,383,693,380,696,405,670,406,670,406,1746,380,696,405,671,379,1771,407,670,407,669,405,670,380,1771,381,696,380,695,380,696,380,695,381,696,406,670,379,696,380,695,381,696,380,696,405,670,405,672,379,696,380,696,405,1746,380,1772,379,1773,379,697,379,696,406,1746,405,671,406,29355,5044,2129,381,1771,406,670,405,671,380,695,380,1771,381,695,381,695,380,697,388,687,380,1771,381,696,379,1771,381,1771,380,696,380,1772,380,1771,380,1772,380,1771,406,1746,407,669,380,1772,380,696,379,697,379,696,380,696,379,696,407,669,380,1772,403,672,380,696,380,1771,380,695,407,670,380,696,380,696,405,670,381,696,379,696,382,694,405,671,406,1745,380,1772,405,670,381,695,407,1745,406,1746,405,1745,381,696,380,696,379,697,380,695,406,670,380,695,406,670,380,696,380,696,380,1772,379,697,379,696,407,669,380,696,379,1772,380,696,380,696,380,695,406,670,380,695,381,695,381,696,379,697,406,669,380,696,407,669,379,696,380,696,380,696,380,695,406,671,379,697,383,691,381,696,380,1771,380,697,379,1772,384,692,406,1744,381,695,408,668,380,1772,405,1746,381,1771,380,1772,379,697,379,697,379,697,379,696,380,696,379,696,380,696,380,696,380,695,407,669,380,697,406,670,379,696,405,671,379,696,380,696,380,697,379,1772,405,671,406,669,380,696,380,695,381,695,380,696,380,696,380,696,380,695,380,696,380,696,380,696,379,696,380,697,379,696,380,696,380,696,379,695,381,696,380,696,380,696,407,669,379,696,380,696,380,696,380,696,407,1744,380,1772,380,1772,379,696,405,1746,380,1772,405,672,379,700,375}, //30C + {5043,2131,379,1772,380,696,379,697,406,670,379,1773,379,696,379,696,380,696,380,696,380,1771,380,697,379,1771,381,1771,380,696,380,1772,405,1746,380,1771,407,1746,381,1770,406,670,379,1772,406,670,380,696,380,696,379,697,379,696,380,697,405,1746,379,697,379,697,404,1747,379,697,379,697,379,696,380,1772,379,697,379,697,405,669,381,696,379,697,379,697,379,696,380,696,380,695,380,697,379,697,405,670,380,696,379,697,379,1772,380,1772,379,1772,380,696,379,698,378,1773,379,697,378,29383,5042,2131,380,1771,380,697,379,696,380,696,380,1772,379,696,380,696,403,674,378,697,379,1772,380,696,380,1772,379,1773,379,696,380,1772,379,1773,379,1772,379,1772,380,1773,378,696,380,1772,380,697,378,696,406,671,379,696,380,696,380,695,380,1772,380,696,380,696,380,1771,405,671,380,696,380,696,405,671,379,696,405,671,380,696,379,697,379,697,379,1773,379,1772,381,695,379,696,406,1746,379,1772,380,1772,379,697,379,696,380,697,378,697,379,696,380,696,380,696,379,696,407,669,405,1747,380,696,380,696,379,696,380,697,379,1772,407,668,404,672,380,696,380,696,380,696,379,697,379,697,379,697,379,696,379,696,380,697,379,697,379,697,378,697,379,697,379,696,405,672,378,697,379,697,406,670,379,1771,380,1773,405,671,379,1772,379,697,379,696,380,1773,378,1773,379,1772,379,1773,379,696,380,696,380,696,379,697,380,695,380,696,395,681,379,697,379,698,378,697,379,696,379,697,380,696,379,696,380,696,406,670,379,697,379,1772,406,670,379,697,379,697,379,696,379,697,380,695,380,697,379,696,380,695,381,696,405,671,379,696,380,696,380,695,380,697,379,696,380,696,380,696,380,696,379,696,380,696,379,697,380,696,379,696,380,696,380,696,380,1772,379,696,380,696,380,1772,379,1773,405,1746,379,696,380,696,380}, //31C + {5043,2131,379,1772,380,696,405,671,405,670,380,1772,380,696,379,697,405,670,380,696,407,1744,380,697,379,1772,406,1746,406,669,405,1747,405,1746,407,1745,380,1771,407,1744,381,696,380,1772,379,697,379,695,408,669,406,669,380,696,380,696,380,1772,380,695,380,696,380,1772,405,670,380,696,380,696,380,1771,406,671,405,670,406,670,380,696,405,670,406,670,407,669,380,696,405,671,379,697,405,670,380,696,380,696,404,672,379,1772,406,1745,406,1746,406,671,404,671,406,1745,407,669,405,29356,5044,2130,380,1771,407,670,405,670,380,696,380,1772,380,696,379,696,407,670,379,695,381,1772,380,695,406,1746,406,1745,380,696,380,1771,407,1745,380,1772,380,1771,406,1746,405,671,380,1771,406,670,409,667,380,695,380,696,380,697,379,696,380,1771,380,697,379,696,380,1772,380,696,379,697,379,697,379,696,380,695,406,670,406,670,380,696,406,669,381,1771,380,1772,379,697,405,670,407,1745,380,1771,406,1746,380,696,379,696,407,670,379,695,381,695,380,697,379,697,379,696,380,696,405,1747,406,669,380,696,380,696,405,670,380,1771,381,696,380,696,405,670,380,697,379,697,379,696,388,688,379,696,380,696,380,695,381,696,379,696,405,672,406,668,407,670,379,696,380,696,408,667,381,696,405,1746,406,1745,406,1747,379,696,380,1772,379,697,405,670,380,1772,405,1746,380,1771,381,1771,406,671,379,696,380,696,379,696,380,696,380,696,405,671,379,697,379,697,379,696,380,696,380,696,379,696,380,696,380,697,379,696,379,697,406,1745,380,696,380,696,380,695,380,697,379,696,380,696,405,670,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,696,379,697,379,696,380,695,381,695,380,697,405,669,381,696,380,696,379,696,380,696,380,696,380,1772,379,1773,379,695,389,1764,405,1746,406,1745,407,670,379,696,380} //32C + }, + // Fan Speed High + { + {5043,2130,380,1772,380,696,404,671,406,670,380,1771,380,696,406,670,379,696,406,670,380,1771,407,670,379,1772,405,1746,406,670,406,1746,386,1765,406,1745,380,1772,380,1771,380,697,406,1745,379,697,380,694,407,670,406,670,405,670,405,672,379,1771,381,696,379,696,379,1773,379,696,380,695,381,695,380,1771,407,670,380,695,380,696,380,696,380,695,381,695,380,696,380,696,380,696,379,696,407,669,380,696,380,695,406,670,380,1772,380,1771,380,1772,380,695,380,696,380,1771,381,695,380,29381,5043,2130,380,1772,380,695,381,695,380,696,406,1745,380,697,379,696,406,670,379,696,380,1772,380,696,379,1771,381,1771,381,694,407,1746,405,1746,384,1768,379,1772,407,1744,381,695,380,1771,381,696,380,696,379,696,380,696,406,669,380,696,380,1772,406,669,380,696,380,1772,380,696,379,696,406,670,379,697,405,671,379,696,406,670,407,669,383,693,379,1772,380,1770,408,669,380,696,379,1772,380,1772,405,1746,405,671,379,697,379,696,380,695,381,696,380,695,406,670,407,669,406,670,380,1771,380,696,382,693,380,697,379,696,380,1770,381,696,380,696,380,696,406,670,379,696,380,696,405,671,379,697,379,696,380,696,380,695,406,671,379,696,406,669,406,671,379,696,380,696,407,669,380,696,405,1746,380,1772,405,1745,381,695,406,670,380,696,380,696,379,1772,380,1772,405,1746,380,1771,381,1771,406,669,406,1746,380,696,380,695,381,696,379,696,380,696,380,695,406,671,405,670,380,696,409,667,379,697,379,696,406,670,379,696,406,1745,381,696,380,696,379,696,406,670,405,671,405,670,380,696,406,670,380,695,407,670,404,671,407,669,380,696,379,696,406,670,380,695,380,696,380,696,380,696,380,695,407,669,407,669,380,696,380,696,406,670,405,670,406,1745,380,1772,380,696,379,1772,380,695,381,1770,408,1746,379,696,379}, //16C + {5043,2130,405,1746,380,697,379,696,380,696,405,1746,405,671,379,696,407,669,406,670,406,1745,380,696,380,1771,381,1771,380,696,380,1771,380,1772,380,1771,380,1772,405,1746,380,696,380,1772,380,696,379,697,379,696,405,671,379,696,380,696,379,1773,379,697,379,696,380,1772,406,669,406,669,381,696,379,1772,380,696,380,696,405,670,380,696,380,696,380,696,379,696,380,696,380,696,379,697,379,696,380,695,380,697,379,696,407,1743,409,1744,380,1771,380,696,380,696,405,1747,406,669,380,29357,5067,2130,380,1771,380,697,379,696,380,696,379,1772,380,696,380,695,405,672,379,696,380,1771,406,670,407,1744,380,1772,380,696,380,1771,380,1772,380,1772,406,1744,407,1745,380,696,380,1772,379,697,405,670,380,696,379,696,380,696,380,696,380,1771,380,696,406,671,378,1771,407,671,379,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,1772,379,1771,381,695,380,697,379,1771,381,1771,380,1771,380,696,380,696,380,696,379,697,379,696,380,696,380,696,379,696,380,696,380,1771,381,695,382,694,380,695,381,695,381,1771,380,696,380,696,379,696,380,696,380,695,381,696,433,642,406,670,380,695,407,669,380,696,380,696,380,695,380,695,381,696,380,696,405,671,406,669,406,670,380,695,380,696,380,696,380,1771,380,696,380,696,380,695,406,1746,380,1773,405,1745,380,1771,380,1773,379,697,405,1746,379,696,380,696,379,696,406,670,380,695,381,696,406,670,379,696,380,696,380,695,406,670,380,695,381,696,380,696,379,1772,380,695,380,696,380,696,380,696,379,696,406,670,380,697,379,696,379,697,379,697,379,696,380,696,379,696,380,696,381,695,379,697,379,697,379,696,380,696,380,696,379,697,379,696,380,695,381,695,380,697,379,696,380,1771,380,695,381,1771,380,1771,381,695,407,1745,405,1747,379,696,380}, //17C + {5044,2129,381,1772,379,696,406,670,405,671,380,1771,380,696,406,668,382,696,379,696,380,1771,380,696,380,1771,381,1771,380,695,381,1771,380,1772,380,1771,381,1772,379,1771,381,695,380,1772,406,670,379,696,380,696,379,697,380,695,381,695,380,1772,380,695,380,696,380,1771,380,696,380,696,380,696,380,1771,380,696,380,695,381,695,380,696,380,695,381,695,380,696,380,696,380,696,379,696,381,695,380,696,380,695,381,696,379,1772,380,1771,380,1772,380,696,379,696,380,1772,380,695,380,29381,5043,2130,380,1771,381,695,380,696,380,696,380,1771,380,695,381,696,380,696,379,696,380,1771,406,671,379,1771,381,1770,381,696,380,1771,380,1772,380,1771,406,1745,381,1771,380,696,380,1771,407,669,380,697,379,696,380,696,379,697,379,696,380,1771,380,696,380,696,380,1771,406,670,380,696,380,695,380,697,379,696,380,695,381,696,380,695,380,696,380,1770,381,1772,380,696,404,672,379,1772,380,1771,380,1772,380,695,380,697,379,697,379,696,380,696,379,696,380,696,380,695,380,696,380,1771,381,696,379,696,405,671,380,696,380,1771,380,696,380,696,380,696,379,696,380,696,380,695,381,696,379,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,696,380,695,406,670,380,696,380,1771,381,695,380,696,380,1771,380,696,380,696,380,696,380,1771,380,1772,379,1772,380,1772,379,1772,379,697,405,1746,380,695,381,696,379,696,380,696,405,671,379,696,407,669,380,696,379,696,405,672,379,696,379,696,407,669,380,696,380,1772,379,696,405,671,380,696,379,696,406,670,380,695,381,696,405,670,406,670,406,669,380,696,380,696,405,671,379,696,406,670,405,672,405,669,381,695,407,669,380,696,405,671,379,696,380,695,407,670,379,696,407,669,406,1745,407,1744,408,1744,407,1745,405,671,406,1745,406,1745,406,670,406}, //18C + {5044,2130,380,1771,379,697,380,696,380,696,379,1772,380,696,380,696,380,695,380,695,381,1772,379,697,379,1772,380,1771,380,695,381,1772,379,1771,381,1772,379,1773,379,1771,380,695,381,1771,381,696,379,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,696,380,1771,380,696,380,696,379,697,379,1773,379,695,381,695,380,697,379,695,381,696,380,696,379,696,380,695,381,696,380,695,380,696,380,696,379,696,380,696,380,1771,381,1770,381,1771,381,695,380,696,380,1772,379,696,380,29380,5044,2130,380,1771,380,695,381,696,380,696,379,1772,405,671,380,696,379,696,380,695,381,1772,379,695,381,1771,380,1772,380,696,380,1771,380,1771,381,1771,406,1745,381,1770,381,696,380,1771,405,672,379,696,380,696,380,695,380,696,380,695,381,1772,405,670,405,670,381,1771,380,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,696,380,1771,380,1772,405,671,380,695,380,1772,380,1771,380,1771,380,698,378,696,380,695,381,695,381,694,381,696,380,696,380,696,379,696,380,1772,380,694,381,696,380,696,380,694,381,1772,380,695,381,695,380,696,380,695,381,695,380,696,380,696,380,696,380,696,379,696,380,695,381,695,381,695,380,697,379,695,381,696,380,695,380,696,380,696,380,695,381,1771,380,696,380,1770,381,696,380,695,381,696,387,1763,381,1772,379,1771,381,1771,380,1771,381,696,379,1771,381,695,380,695,381,696,380,695,383,693,380,696,380,696,380,695,380,700,376,696,380,696,379,696,380,697,379,696,380,1771,407,670,379,696,379,696,380,696,380,696,380,696,380,695,380,697,379,695,380,696,380,697,379,696,379,697,379,695,407,670,380,696,379,697,379,696,380,696,380,696,406,669,380,696,406,670,379,696,380,696,380,696,380,1771,380,696,380,696,379,697,406,1745,406,1745,406,1745,407,669,406}, //19C + {5069,2104,406,1745,380,696,380,700,376,696,380,1771,380,696,380,696,379,696,380,697,379,1772,406,669,407,1744,407,1745,380,697,379,1771,381,1770,407,1745,406,1746,380,1772,406,669,405,1746,381,695,380,696,406,670,406,670,379,697,379,696,406,1746,379,696,380,696,380,1772,379,696,406,670,405,670,381,1770,381,696,380,695,380,696,406,670,380,696,380,696,406,669,380,696,380,696,380,696,379,696,382,694,380,696,380,696,379,1772,384,1767,380,1772,406,675,374,696,380,1771,381,695,407,29354,5043,2130,380,1771,407,670,405,671,379,696,380,1772,380,695,380,696,380,696,380,695,381,1770,381,696,406,1745,406,1745,381,696,379,1771,381,1772,405,1745,407,1745,380,1772,379,697,379,1772,380,696,406,670,379,696,380,696,379,697,379,695,381,1771,381,696,379,696,380,1772,380,695,380,697,379,696,380,696,379,697,379,696,380,696,380,695,381,695,380,1771,381,1771,380,695,381,695,380,1772,380,1772,406,1745,380,695,381,695,380,697,379,696,407,669,405,671,379,696,380,696,380,696,380,1771,380,696,380,696,379,696,380,696,380,1772,379,696,380,696,407,669,379,696,380,696,380,696,405,670,406,671,379,696,380,695,381,696,379,696,380,696,380,696,379,696,380,696,380,696,380,694,381,696,380,1771,380,1771,381,696,379,1772,380,697,379,695,406,671,379,1772,380,1771,380,1772,380,1771,380,1772,380,695,380,1772,380,695,381,696,379,696,380,696,380,695,381,696,379,696,380,696,380,695,381,695,380,695,381,696,380,696,379,696,380,1771,381,696,379,696,380,696,405,670,405,671,407,669,380,695,380,697,406,670,379,695,381,695,381,695,380,696,380,696,380,696,380,696,379,696,380,695,381,696,379,696,380,696,380,695,380,697,405,670,380,696,405,671,379,1772,406,1746,379,696,406,670,380,1770,381,1771,381,1771,380,696,406}, //20C + {5065,2131,379,1773,379,696,379,696,380,697,379,1771,407,669,380,696,380,696,380,695,380,1772,380,696,380,1771,380,1772,380,696,379,1772,406,1746,410,1740,381,1771,380,1772,380,695,380,1772,380,696,405,671,381,694,380,696,380,696,380,696,379,1772,380,696,380,695,380,1771,381,695,381,696,405,671,379,1771,381,696,404,671,380,696,380,695,380,696,380,696,380,695,381,695,380,696,380,696,380,696,406,670,404,671,380,696,381,1770,380,1772,396,1754,381,695,381,696,405,1746,380,696,380,29380,5070,2103,407,1745,380,696,406,669,407,670,405,1746,380,695,380,696,405,671,380,696,380,1770,381,696,380,1770,381,1772,381,694,381,1770,407,1745,380,1772,380,1771,407,1744,381,695,380,1772,380,695,407,670,379,697,404,671,380,695,406,670,406,1745,381,695,380,697,379,1771,407,669,381,696,379,696,380,695,407,670,379,696,380,696,380,696,404,671,380,1772,380,1771,407,669,380,696,379,1772,380,1771,381,1771,380,696,406,670,380,695,406,670,407,668,407,669,381,695,380,696,380,696,379,1772,380,696,380,696,379,696,380,696,380,1771,381,695,380,696,380,696,405,671,379,696,380,696,380,696,406,669,380,697,379,696,380,696,405,670,380,696,380,695,407,669,380,696,380,695,381,696,406,670,379,696,380,696,380,1771,380,1771,407,669,380,696,407,669,380,1771,380,1772,380,1770,381,1771,381,1771,381,695,380,1772,380,695,380,697,406,669,379,696,380,697,379,696,406,669,381,695,380,696,380,696,380,695,381,695,380,696,380,695,380,1772,406,670,380,696,380,695,380,696,406,670,380,695,407,669,405,671,380,696,387,688,380,696,380,696,380,696,380,696,405,670,380,696,406,669,380,697,405,669,381,695,407,669,406,671,379,696,380,695,397,678,381,696,380,1771,381,696,379,1772,379,696,380,1771,406,1746,381,1770,407,670,404}, //21C + {5069,2103,381,1771,380,696,405,670,380,696,406,1745,381,695,381,696,405,670,380,696,380,1770,381,696,380,1771,406,1745,407,670,379,1772,380,1771,380,1772,380,1772,379,1772,405,671,405,1746,380,696,405,671,380,696,389,687,379,696,380,695,407,1745,380,696,407,667,408,1745,406,670,380,696,406,669,380,1772,405,671,379,696,406,670,380,696,379,696,405,671,380,696,406,670,406,670,379,696,405,670,407,670,379,696,380,696,380,1771,380,1772,380,1771,406,670,380,696,380,1771,380,696,406,29355,5043,2130,380,1771,380,696,380,695,406,671,379,1772,380,696,380,695,380,697,379,696,380,1771,380,696,380,1771,381,1771,380,695,381,1771,380,1772,380,1770,381,1772,380,1771,380,696,404,1747,381,694,381,696,380,696,379,696,380,697,379,696,380,1772,379,696,380,696,380,1772,379,697,379,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,1771,380,1772,380,695,380,696,380,1772,380,1771,380,1771,380,696,380,696,405,671,380,696,379,696,380,696,380,696,379,697,379,696,380,1771,406,670,380,695,381,696,379,697,406,1745,380,696,380,695,380,695,406,671,380,695,381,695,380,696,380,696,380,695,380,696,380,696,380,695,381,696,380,695,380,696,380,696,379,696,380,696,380,695,381,1771,380,696,380,1771,380,1772,380,696,405,671,379,696,380,1771,380,1772,380,1771,380,1771,381,1772,380,695,380,1771,381,696,380,695,380,696,379,697,379,696,380,696,380,696,380,695,380,696,380,696,406,669,406,671,380,695,380,696,380,1771,380,696,380,695,380,697,379,696,380,696,380,696,379,696,380,696,380,695,381,696,380,695,380,696,380,695,380,697,379,696,380,696,406,670,380,695,380,696,405,671,380,696,380,696,379,697,379,695,381,695,380,696,380,1771,381,1770,381,1771,381,695,380,1772,380,1771,407,1744,381,695,380}, //22C + {5042,2131,379,1772,380,696,406,670,379,696,380,1772,379,697,404,671,380,696,379,697,379,1773,379,696,379,1772,380,1772,379,697,379,1772,380,1771,380,1772,380,1771,380,1772,379,696,381,1771,380,696,379,696,380,696,380,696,379,697,379,697,379,1772,380,696,379,696,380,1772,379,696,380,696,379,697,379,1773,379,695,381,696,379,696,380,697,379,696,380,696,379,697,379,696,380,697,379,696,382,693,380,697,379,696,405,671,379,1772,380,1772,379,1772,405,671,379,696,380,1772,380,695,380,29382,5042,2130,380,1771,381,696,379,697,406,669,380,1771,380,696,380,696,380,696,380,696,379,1772,380,696,380,1771,380,1772,380,696,379,1772,380,1772,379,1772,379,1773,379,1772,380,695,380,1773,379,696,380,695,380,696,380,696,380,696,380,696,405,1746,380,695,408,669,379,1772,380,696,379,697,379,696,380,696,380,696,379,696,380,696,379,697,380,695,380,1772,379,1773,379,696,380,696,380,1771,380,1772,379,1771,407,670,406,670,380,696,379,696,379,698,379,696,380,695,380,696,380,696,379,1772,380,696,379,697,379,697,379,696,380,1772,379,697,405,670,380,696,380,696,405,671,379,696,380,696,380,695,380,696,406,670,380,696,406,669,407,669,380,695,408,669,380,698,377,697,378,697,380,696,380,695,380,1772,379,1772,406,1746,405,671,405,670,380,696,379,1772,380,1772,380,1771,380,1772,406,1745,380,696,380,1771,380,696,380,695,381,696,379,696,380,696,380,696,379,696,407,670,379,696,379,697,379,697,379,696,407,668,381,696,379,1772,380,696,379,697,405,670,380,696,380,696,379,697,379,696,380,696,379,697,379,697,404,671,380,696,380,695,380,696,380,697,379,695,406,670,381,695,380,696,406,670,379,697,379,696,380,696,405,675,376,695,407,669,406,1745,380,695,381,696,406,1746,379,1771,407,1745,406,1745,408,668,380}, //23C + {5043,2130,381,1771,380,696,380,696,380,695,381,1770,381,696,380,695,380,696,380,696,379,1772,380,697,379,1771,380,1772,380,696,380,1771,380,1772,380,1771,380,1772,379,1772,380,696,380,1771,406,671,379,696,405,670,380,695,408,669,380,695,407,1745,380,696,380,696,380,1771,380,696,380,695,381,696,379,1772,380,696,379,696,380,696,380,695,405,672,379,696,380,695,380,696,381,695,380,697,379,696,405,670,380,697,379,695,381,1772,404,1746,381,1772,379,696,380,696,380,1771,407,668,381,29380,5044,2130,380,1770,381,696,380,695,381,696,379,1772,380,696,405,671,379,697,379,696,379,1773,384,691,407,1744,381,1771,405,672,406,1745,404,1746,380,1772,380,1772,405,1745,381,696,380,1772,379,697,379,695,381,695,380,697,379,695,381,696,380,1772,379,696,380,695,380,1773,379,696,380,696,379,696,433,643,380,696,379,697,379,696,380,696,380,696,380,1771,380,1771,380,697,379,696,380,1772,379,1772,406,1745,406,670,380,695,381,695,380,696,380,697,379,696,380,696,379,696,380,695,381,1772,380,695,380,696,380,696,380,695,380,1772,380,696,380,695,380,697,379,696,380,695,380,697,405,670,405,671,380,696,379,696,380,696,380,696,379,697,379,696,380,697,403,672,380,695,380,696,380,696,380,1771,380,1771,407,1745,406,1745,381,696,379,696,380,697,379,1771,380,1772,380,1771,406,1746,406,1745,380,697,379,1772,379,697,379,696,380,696,379,697,379,697,379,695,381,696,406,669,380,697,379,696,380,696,379,697,379,695,381,696,379,1771,407,670,380,696,380,695,380,696,380,696,380,696,379,696,405,671,380,696,380,695,406,670,380,696,380,696,379,697,379,696,380,696,380,696,380,696,379,696,380,696,405,671,379,697,405,670,380,696,379,697,379,696,380,1772,379,1771,381,696,380,1770,381,1771,380,1773,379,1772,379,696,406}, //24C + {5043,2130,381,1772,379,696,380,695,380,696,380,1772,380,695,380,697,404,670,381,696,379,1772,406,670,380,1771,380,1772,406,669,406,1746,380,1772,379,1772,380,1771,380,1772,380,696,379,1772,380,696,380,696,379,697,379,697,379,696,379,697,384,1766,381,696,380,696,379,1772,380,697,404,670,380,696,380,1772,380,696,379,696,380,696,380,695,405,671,380,696,380,695,381,696,379,696,380,697,379,696,380,696,379,696,380,696,380,1772,379,1771,381,1772,379,696,406,670,380,1771,380,696,380,29381,5043,2130,380,1770,381,697,379,696,380,695,380,1771,381,696,379,696,380,697,379,696,380,1772,405,670,405,1747,379,1772,380,696,379,1772,380,1772,380,1771,380,1772,380,1772,379,696,380,1771,404,672,380,696,380,695,380,696,406,669,381,695,380,1772,380,696,379,696,380,1772,380,696,380,696,379,696,380,696,405,670,381,696,379,696,380,696,380,696,379,1772,380,1772,379,697,379,696,380,1771,380,1772,380,1771,380,696,380,696,380,696,379,697,379,697,379,696,379,696,407,670,379,696,380,1772,379,696,407,668,381,697,378,697,405,1746,380,695,380,697,379,695,381,696,380,695,380,696,380,696,380,696,407,669,379,696,380,696,380,696,379,697,379,695,381,697,379,696,380,696,379,696,380,697,379,696,379,697,379,696,393,684,378,1772,380,697,379,696,380,1770,381,1771,382,1770,406,1746,379,1773,379,696,380,1771,380,696,409,667,380,695,381,696,379,696,380,695,381,695,435,641,380,696,380,695,406,671,379,696,380,695,380,696,380,1772,380,695,380,697,379,696,380,696,406,670,379,697,379,696,380,696,380,695,406,670,406,670,380,695,380,696,380,696,380,696,379,697,379,695,381,696,380,696,379,696,380,696,380,696,380,696,380,695,380,696,380,696,380,1771,406,670,406,1745,380,1772,380,1772,379,1772,386,1765,380,696,380}, //25C + {5044,2129,408,1743,407,670,406,670,379,696,380,1772,406,669,407,669,407,669,383,692,408,1744,380,697,379,1771,406,1746,405,671,380,1771,380,1772,380,1771,380,1771,381,1772,405,669,407,1745,406,670,380,696,405,670,406,671,379,696,406,670,406,1746,405,670,406,670,405,1746,380,696,406,670,380,695,381,1771,406,670,380,695,406,670,380,696,405,671,406,669,380,696,380,696,380,695,380,696,380,696,380,695,406,670,407,669,380,1771,381,1771,380,1771,408,669,379,696,380,1771,380,696,406,29355,5043,2130,380,1772,380,696,406,669,407,670,379,1771,407,669,406,670,406,669,406,670,380,1772,380,695,380,1772,380,1772,380,696,406,1745,405,1746,407,1745,406,1745,380,1772,380,696,380,1771,380,695,381,695,380,696,380,696,380,696,380,694,381,1772,379,696,407,669,380,1772,379,696,406,670,407,669,380,695,381,695,380,696,380,696,380,696,379,697,379,1772,379,1772,406,670,380,695,380,1772,380,1771,381,1771,380,695,381,696,380,696,379,696,380,696,380,696,379,697,380,696,406,669,405,1746,380,696,406,670,379,697,379,695,381,1772,379,696,407,670,379,696,379,696,380,696,407,669,405,670,380,696,380,696,406,670,380,696,379,696,406,669,408,669,405,670,407,670,379,696,380,696,405,671,379,1772,379,696,406,671,379,696,380,1772,379,696,380,696,380,1772,406,1745,380,1771,380,1772,405,1746,406,670,380,1771,406,670,407,669,380,695,380,696,407,669,406,670,405,670,381,695,380,696,380,696,380,696,379,696,380,696,406,670,405,1746,404,672,405,670,380,697,405,669,381,695,381,696,379,697,404,671,380,696,405,670,380,696,380,697,378,697,380,695,380,696,380,695,380,697,404,672,379,696,380,696,380,696,406,669,380,696,380,696,379,697,379,695,407,1745,407,1745,380,1771,380,1772,406,1745,380,1771,381,1771,380,696,407}, //26C + {5043,2130,406,1746,379,696,380,697,405,670,380,1772,379,696,380,696,380,695,408,668,380,1772,405,671,405,1746,406,1745,381,696,405,1746,379,1772,380,1770,381,1772,407,1745,379,696,380,1772,380,695,386,691,404,670,381,696,380,696,379,697,379,1772,379,697,379,696,380,1772,380,695,406,670,407,669,380,1771,405,671,380,696,406,670,379,696,380,696,380,696,405,671,379,697,383,693,378,697,380,695,380,697,404,670,381,696,379,1771,381,1771,380,1772,406,670,379,696,406,1746,380,696,379,29381,5043,2130,406,1746,380,696,379,697,379,695,381,1772,379,695,381,697,379,696,379,697,379,1771,381,696,379,1773,379,1772,407,669,405,1746,379,1773,379,1772,380,1771,380,1772,379,697,405,1745,381,696,379,696,380,696,380,695,381,696,379,696,380,1772,405,671,379,697,379,1772,379,696,407,670,404,671,380,696,380,696,379,696,380,696,380,696,379,697,379,1771,380,1772,380,697,379,695,380,1771,381,1771,381,1772,379,696,405,671,405,670,380,697,379,696,379,697,379,697,405,671,379,696,379,1772,380,695,406,671,379,697,379,695,381,1771,380,696,380,696,380,696,379,696,406,671,405,669,380,697,379,697,405,670,380,696,379,697,379,696,380,696,406,670,379,697,379,696,405,671,379,697,379,697,383,693,379,1771,380,696,380,695,381,1772,379,696,380,696,380,1772,379,1772,379,1772,380,1771,406,1746,380,696,379,1772,380,697,381,694,379,697,379,696,380,697,405,670,379,696,380,697,379,696,406,670,379,697,379,696,380,695,406,670,406,1747,405,670,405,671,379,696,380,696,380,696,379,697,379,697,378,697,380,696,379,696,380,696,380,696,379,697,379,697,379,696,379,697,379,696,380,696,380,696,406,670,379,696,380,696,380,696,379,696,380,697,379,696,380,1771,407,668,381,696,380,696,379,697,379,697,379,696,379,1772,380}, //27C + {5044,2130,379,1773,379,696,380,695,381,696,405,1746,380,696,380,695,380,696,380,696,380,1771,380,697,379,1772,379,1771,407,670,380,1771,380,1772,380,1771,380,1772,380,1771,380,695,407,1745,380,696,380,696,380,696,379,697,379,696,380,696,380,1771,380,696,391,685,406,1745,380,696,405,670,405,672,379,1772,380,696,380,699,376,696,380,695,380,697,379,696,380,697,379,695,380,697,405,670,380,696,405,670,380,697,379,696,380,1771,380,1771,381,1771,380,696,380,696,380,1771,380,695,381,29380,5044,2129,381,1770,381,696,380,695,381,696,379,1772,406,670,380,696,379,696,380,696,380,1772,379,696,380,1772,379,1772,405,671,380,1772,379,1772,379,1772,406,1746,379,1771,381,696,380,1771,380,697,379,695,407,670,380,695,380,696,380,695,381,1771,380,695,407,670,405,1746,380,696,406,670,379,696,380,696,380,695,381,695,380,696,405,671,380,695,380,1772,380,1772,379,697,379,696,380,1771,408,1744,380,1771,380,696,380,695,391,686,380,695,407,669,380,695,381,696,380,696,379,696,380,1771,380,696,380,696,405,670,380,696,407,1744,381,696,407,669,379,696,380,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,696,405,671,379,696,380,696,404,672,379,696,380,697,379,696,380,1770,382,1771,379,697,379,697,379,1771,380,697,379,696,380,1772,379,1772,380,1771,380,1772,380,1771,380,696,380,1772,379,696,380,696,380,696,380,695,381,695,380,696,405,671,407,669,379,696,380,696,380,696,379,696,380,697,379,697,379,1771,380,696,380,696,406,669,380,697,379,695,381,696,379,696,406,671,379,696,380,695,380,697,379,697,405,670,380,695,380,697,379,696,407,669,380,696,404,671,380,696,380,696,379,696,380,696,380,696,379,697,433,642,380,1771,406,1746,380,696,380,696,379,696,380,696,380,697,378,1772,380}, //28C + {5043,2129,381,1772,380,696,380,696,379,697,382,1769,406,671,378,695,407,674,375,696,380,1773,406,669,379,1772,380,1772,379,697,379,1772,380,1771,380,1772,380,1772,379,1772,380,696,380,1772,379,696,380,696,379,697,379,696,380,696,379,697,379,1772,407,669,379,697,380,1771,407,669,379,697,380,696,379,1772,379,697,379,697,379,696,379,696,406,671,379,696,406,669,381,695,380,697,406,669,380,696,379,697,379,696,380,696,379,1772,406,1745,381,1772,379,696,380,697,383,1766,406,671,380,29381,5068,2105,379,1772,380,697,379,696,380,696,380,1770,381,696,379,696,380,697,379,696,380,1771,380,697,379,1772,379,1772,380,696,380,1771,380,1772,379,1773,379,1772,380,1771,380,696,380,1771,380,696,380,696,380,696,379,697,379,697,379,695,381,1771,380,696,380,696,379,1772,406,670,380,696,379,697,379,696,405,671,380,696,379,696,406,671,379,696,379,1772,407,1745,380,695,380,697,405,1745,407,1745,380,1771,406,670,380,696,406,670,379,697,379,697,379,696,380,695,407,669,380,696,380,1771,380,696,380,697,379,696,379,697,379,1772,380,696,379,696,406,671,379,696,405,671,380,696,406,669,405,671,379,697,379,697,379,696,406,670,406,670,379,696,406,670,380,695,401,676,405,671,379,696,380,697,378,696,380,1771,381,695,380,1771,381,696,379,696,380,1771,381,1772,405,1746,380,1771,380,1772,379,696,380,1772,380,695,408,669,405,671,379,695,380,697,405,670,405,671,380,696,406,670,379,696,380,695,381,696,379,697,405,671,379,1771,380,696,380,697,379,695,381,695,406,671,379,696,380,696,380,696,379,696,379,697,379,696,380,696,380,696,380,696,380,696,405,670,380,696,380,696,406,669,406,670,380,696,380,695,381,696,379,695,381,695,381,696,404,1747,380,696,380,1772,379,696,380,696,380,695,380,696,406,1745,406}, //29C + {5043,2130,380,1771,407,669,406,670,380,695,406,1746,434,642,380,695,407,669,380,696,406,1746,379,696,380,1772,379,1773,405,670,380,1772,379,1773,405,1745,380,1772,380,1771,380,696,380,1772,379,697,405,670,379,697,379,696,407,669,380,696,380,1772,379,695,407,670,380,1771,380,697,379,696,405,671,379,1771,381,696,405,670,380,696,380,696,379,696,380,697,379,697,379,695,406,670,407,669,407,669,380,695,380,696,407,669,405,1747,379,1772,405,1747,406,669,406,669,407,1745,406,670,380,29381,5043,2130,380,1771,406,670,380,696,380,695,381,1771,380,696,379,697,379,696,380,696,380,1771,380,696,406,1746,379,1772,405,671,406,1745,380,1772,406,1746,379,1771,381,1771,380,696,405,1746,380,696,379,697,406,670,380,695,380,696,380,696,406,1745,380,695,381,695,380,1772,380,696,405,670,381,695,406,671,379,697,378,696,380,696,380,697,379,695,381,1771,380,1771,405,671,380,696,406,1745,382,1769,381,1771,380,696,380,696,380,696,379,695,381,696,380,697,379,696,379,696,404,672,380,1770,381,696,380,696,380,696,405,670,380,1772,405,671,379,696,380,697,379,696,405,671,379,695,381,697,379,696,379,696,406,670,405,671,380,696,405,670,380,696,380,696,380,695,381,695,380,695,381,695,380,1771,408,669,406,1745,380,696,380,1772,405,671,406,668,381,1771,380,1771,381,1772,379,1771,381,1771,380,696,380,1772,379,696,380,696,380,696,405,671,379,696,380,696,380,695,407,668,407,671,379,696,380,695,380,697,379,696,406,669,381,1771,380,697,379,696,405,670,380,696,380,696,380,695,406,670,407,668,407,669,407,670,380,695,406,670,380,696,380,696,379,697,379,696,380,695,399,677,380,696,380,695,406,669,381,696,380,695,381,696,379,696,380,696,380,1771,405,1747,380,1771,405,672,379,696,380,695,381,696,379,1771,407}, //30C + {5043,2129,383,1769,380,700,375,696,380,696,405,1746,380,696,406,670,380,696,380,696,379,1772,380,696,380,1772,379,1772,406,669,380,1772,380,1772,379,1772,380,1771,407,1745,404,672,379,1771,381,696,379,696,380,696,380,697,379,696,380,696,379,1773,379,696,405,671,379,1772,405,671,407,669,379,696,380,1771,381,695,380,696,380,696,405,670,380,696,380,696,406,670,379,696,406,670,380,696,380,696,405,671,379,697,379,696,406,1745,380,1771,380,1772,406,670,380,696,405,1746,380,696,380,29380,5043,2130,380,1772,406,669,380,697,379,696,380,1772,379,697,407,668,380,696,406,670,379,1772,399,677,379,1772,380,1772,379,697,379,1772,379,1772,380,1772,405,1746,380,1772,380,696,405,1746,380,695,407,670,379,697,379,696,379,697,379,696,380,1772,379,697,379,696,380,1772,379,697,379,696,380,696,379,697,405,671,379,697,379,696,380,696,379,697,379,1771,381,1771,380,696,380,696,379,1772,380,1772,405,1746,380,696,380,695,380,697,379,696,380,696,379,697,379,696,380,697,379,696,379,1772,380,695,406,671,379,697,379,695,381,1772,380,696,379,696,379,697,405,670,380,696,380,696,380,695,380,696,380,697,404,671,406,670,405,671,379,696,380,695,380,697,379,696,380,696,379,696,405,671,380,697,379,1771,380,1772,405,671,379,1772,380,696,380,695,407,1745,406,1745,380,1772,380,1772,379,1772,380,696,380,1771,405,671,379,696,380,696,380,696,405,671,379,697,379,696,406,670,380,696,379,697,379,696,380,696,406,670,379,697,379,1772,379,697,379,696,380,696,380,696,379,696,380,696,407,670,406,668,406,670,380,696,380,696,379,697,379,696,380,696,379,697,406,669,380,696,380,696,379,696,380,697,379,697,378,697,379,697,405,670,380,695,380,697,379,1773,379,696,407,668,381,1771,380,696,379,696,406,671,379,1772,379}, //31C + {5070,2104,379,1772,380,696,407,669,379,697,379,1772,379,696,380,696,380,696,380,695,380,1771,381,696,380,1771,380,1771,380,696,405,1747,391,1760,380,1771,381,1771,407,1745,380,695,380,1772,380,696,405,671,379,696,380,696,379,697,379,696,380,1772,380,696,379,696,380,1772,379,697,379,696,380,695,406,1746,380,696,380,696,380,696,379,697,379,696,380,696,391,685,379,696,383,693,380,696,380,696,379,696,382,694,380,696,379,1772,380,1771,380,1772,380,696,380,695,380,1771,381,696,380,29380,5043,2131,379,1772,380,696,380,696,398,677,380,1772,405,671,379,696,380,696,380,696,405,1746,406,669,380,1772,380,1772,379,696,380,1772,379,1772,380,1772,379,1772,380,1772,406,670,405,1746,380,695,380,696,405,671,380,696,380,696,379,696,380,1771,380,697,379,696,406,1746,380,695,380,696,380,696,380,695,406,670,380,697,379,695,406,671,405,671,379,1772,406,1745,380,695,380,697,379,1773,379,1771,381,1771,380,696,380,696,379,696,380,697,379,696,380,696,379,697,379,696,405,670,381,1771,380,696,379,696,406,670,380,696,405,1746,406,671,379,696,380,696,379,697,379,696,380,696,380,695,380,696,406,670,380,695,381,696,404,671,381,695,380,695,381,696,379,696,380,696,379,696,380,697,379,1771,381,1771,380,1772,379,696,380,1771,381,695,381,695,380,1772,380,1771,380,1772,380,1772,379,1772,379,697,379,1771,381,696,379,696,380,696,380,696,379,696,406,671,379,696,406,670,380,695,380,696,380,696,380,696,404,671,380,695,381,1771,380,696,380,696,379,697,380,696,379,696,380,696,397,678,380,697,379,696,380,696,379,697,403,673,379,695,380,697,379,697,406,669,380,696,380,696,379,697,379,696,380,696,405,671,379,697,379,697,379,696,379,697,379,1772,380,1771,380,696,380,1772,379,696,380,696,407,668,380,1771,381} //32C + }, + // Fan Speed Med + { + {5066,2130,406,1745,407,669,407,669,405,670,381,1771,380,696,380,696,404,671,380,696,406,1745,406,670,379,1772,380,1772,380,696,379,1772,380,1771,380,1772,405,1746,380,1771,380,697,405,1746,379,696,380,696,380,696,405,670,380,696,407,669,380,1772,379,695,406,671,406,1745,381,695,380,695,407,669,380,1772,380,696,379,696,380,696,407,669,380,695,380,696,380,696,380,696,405,669,381,696,380,695,406,670,380,696,380,696,380,1771,380,1771,381,1771,380,696,405,670,407,1745,379,697,379,29381,5042,2130,380,1772,380,696,379,697,406,669,380,1770,407,670,380,696,380,696,379,696,380,1772,379,697,379,1772,380,1771,380,696,380,1771,380,1772,406,1744,381,1772,405,1746,380,696,380,1772,405,670,406,670,379,696,380,697,379,696,394,681,380,1772,380,695,380,696,380,1772,405,671,379,697,405,670,405,670,380,696,380,696,380,696,380,696,379,697,379,1771,380,1772,380,696,379,696,380,1772,406,1745,380,1771,407,670,379,696,380,696,407,668,380,696,407,668,381,696,380,695,380,696,380,1772,379,696,380,696,380,695,380,697,379,1772,379,696,406,670,380,696,380,695,380,696,380,696,380,696,379,697,379,696,380,696,379,697,380,696,379,696,379,697,379,697,379,695,407,670,380,696,406,669,382,1769,380,1772,406,1745,407,669,379,697,379,696,380,697,405,1746,379,1772,380,1772,405,1746,406,1745,380,1772,380,696,379,696,380,696,380,696,406,669,405,671,405,671,379,696,380,695,381,696,380,696,379,696,380,696,405,671,380,695,380,1772,379,696,380,697,379,696,380,696,406,669,380,696,380,695,380,697,379,696,380,696,379,697,379,696,380,696,379,697,379,697,379,695,406,671,389,687,379,696,380,696,380,696,406,669,380,696,380,695,407,669,408,668,380,1771,380,1772,380,696,379,1772,380,695,380,697,379,1772,379,696,381}, //16 + {5041,2131,379,1773,379,696,380,696,379,697,379,1772,379,697,379,697,379,696,379,697,379,1772,380,696,379,1773,379,1772,379,697,379,1772,383,1768,380,1771,380,1773,379,1772,385,691,379,1772,379,697,379,696,380,696,379,697,379,697,379,696,379,1773,379,696,380,696,379,1772,380,696,379,697,379,696,406,1746,379,697,379,696,380,696,405,671,379,697,379,696,380,695,380,697,379,696,380,696,380,696,379,697,379,696,380,696,379,1772,379,1773,379,1772,380,696,380,696,379,1772,380,697,378,29381,5043,2130,379,1772,380,696,380,695,380,696,380,1772,379,697,379,696,406,670,379,696,381,1771,380,696,379,1772,379,1773,379,696,380,1772,380,1771,380,1771,380,1772,380,1771,380,696,380,1772,379,697,379,696,379,697,379,697,379,695,381,696,380,1771,379,697,380,695,380,1772,379,697,380,696,379,697,402,673,380,696,379,696,380,697,379,696,380,695,380,1771,381,1771,406,670,380,696,380,1770,381,1772,379,1772,380,696,379,697,379,696,380,696,391,685,379,696,380,697,379,695,380,697,380,1770,380,697,379,697,379,696,380,696,380,1771,380,696,379,696,381,697,378,696,380,696,379,696,380,696,405,670,407,670,379,696,380,696,379,697,379,696,380,696,380,696,380,695,380,696,380,696,379,697,379,696,406,670,380,696,379,1772,406,670,379,697,379,696,406,1746,379,1772,406,1745,380,1772,379,1773,379,1772,379,697,379,697,379,696,380,696,405,670,406,671,378,697,379,697,406,669,380,695,381,696,379,696,380,696,379,696,380,697,379,1771,381,696,406,670,379,696,379,697,379,696,379,697,380,696,379,697,383,691,381,696,406,670,379,697,379,701,374,697,405,671,379,696,406,670,380,696,379,696,380,696,380,695,407,669,406,670,380,696,379,697,379,696,380,1771,380,696,380,1772,405,1746,380,696,406,669,380,1772,405,671,379}, //17C + {5041,2132,379,1772,379,696,379,698,378,697,379,1773,378,698,379,697,378,697,378,698,378,1773,378,697,380,1772,379,1772,379,698,378,1774,377,1773,379,1772,379,1773,379,1772,379,697,379,1773,378,697,379,697,378,698,378,697,379,697,378,697,379,1773,379,697,379,696,380,1772,378,698,379,697,378,698,378,1773,378,698,379,696,379,697,378,697,379,697,379,697,378,698,378,698,378,698,378,697,379,697,405,670,379,697,379,696,379,1773,379,1772,379,1772,380,697,378,697,379,1773,378,698,378,29382,5041,2131,379,1773,378,698,378,698,378,697,378,1774,378,698,378,697,379,697,378,697,379,1773,378,698,378,1773,379,1772,379,697,379,1773,379,1771,380,1772,379,1773,378,1775,377,696,380,1772,379,698,378,697,378,697,379,698,378,697,379,697,379,1772,379,697,379,697,378,1772,380,696,380,697,378,697,378,698,378,697,379,697,379,697,379,698,378,696,379,1772,380,1773,378,697,378,698,378,1773,379,1773,378,1773,379,697,378,697,379,697,379,696,379,698,378,697,379,696,380,697,378,698,378,1773,379,697,379,696,379,697,379,697,378,1772,379,698,378,697,379,697,379,697,378,697,379,697,379,697,379,697,383,692,379,698,378,697,378,697,379,702,374,697,379,696,379,697,379,697,378,697,379,697,379,1773,379,697,378,697,378,1774,379,696,379,697,378,697,379,1773,379,1773,378,1773,379,1773,378,1773,379,1773,405,671,378,697,379,696,379,698,378,697,379,697,379,697,379,696,379,696,380,696,380,696,379,697,379,696,380,697,378,697,379,1772,380,696,405,670,381,696,379,696,379,696,393,683,406,670,380,696,379,697,379,696,380,696,380,695,380,696,380,696,380,695,381,695,380,696,405,671,379,697,380,695,380,696,380,696,379,696,407,668,381,696,406,670,405,1745,381,1771,407,1744,381,1771,380,695,381,696,403,1748,380,696,380}, //18C + {5044,2129,381,1770,381,695,381,695,381,696,379,1772,379,696,380,696,380,696,380,696,379,1772,380,696,380,1771,380,1771,380,696,380,1771,381,1771,380,1771,381,1771,380,1772,380,696,379,1771,381,696,379,697,379,696,380,695,381,696,379,696,380,1772,380,696,379,696,380,1772,379,696,380,695,381,696,379,1771,381,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,1771,380,1772,380,1771,380,696,380,696,380,1771,380,696,380,29358,5065,2129,381,1771,381,695,380,696,380,696,380,1771,379,697,380,696,380,695,380,697,379,1771,381,696,379,1772,380,1771,380,695,381,1772,379,1772,380,1772,379,1771,381,1771,380,697,379,1770,381,697,379,696,380,695,381,696,379,695,381,696,380,1771,380,695,381,696,380,1771,380,695,381,695,380,696,380,695,381,695,381,696,379,696,380,696,379,696,380,1772,380,1772,379,696,380,696,380,1770,381,1772,380,1770,381,696,380,696,380,696,379,696,380,696,380,696,379,696,380,696,380,696,379,1772,380,695,381,695,380,697,379,696,380,1772,379,697,379,696,380,695,381,695,380,696,380,696,380,695,380,696,380,695,381,695,380,696,380,697,379,697,378,697,379,696,407,669,380,696,380,695,380,695,381,696,379,1772,380,696,380,1770,381,696,380,696,379,696,380,1772,407,1744,380,1772,380,1770,381,1771,380,1772,380,696,380,696,380,695,380,696,380,695,381,695,380,697,379,695,381,696,380,695,380,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,696,380,696,379,696,380,696,380,695,380,696,380,697,379,696,379,696,406,669,381,696,379,697,379,697,379,695,381,696,379,696,380,695,381,696,379,697,379,696,380,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,695,381,696,379,1771,381,696,379,1771,381,695,381}, //19C + {5044,2129,379,1772,380,696,379,696,380,696,380,1772,379,697,379,696,380,696,380,695,406,1746,380,695,380,1772,380,1771,380,696,380,1772,380,1771,380,1772,380,1771,380,1772,405,671,379,1772,379,697,379,697,379,696,380,697,378,696,380,697,379,1771,406,671,379,696,380,1771,380,696,405,671,379,697,380,1772,405,670,380,696,379,697,379,696,380,696,380,696,379,697,379,696,380,696,405,671,379,697,379,696,383,693,379,697,404,1746,380,1772,380,1771,380,695,381,696,380,1771,380,696,380,29380,5043,2131,379,1772,380,696,380,696,379,697,379,1771,380,698,405,669,380,696,380,695,380,1773,379,696,380,1772,379,1772,380,695,380,1772,380,1771,380,1772,380,1772,379,1771,380,697,379,1772,380,695,381,695,380,697,404,670,381,695,380,696,380,1772,380,696,379,696,407,1747,377,697,379,696,380,696,405,670,381,695,380,695,381,696,379,696,380,697,379,1770,381,1772,380,696,380,696,379,1772,380,1772,379,1772,380,696,379,696,380,696,380,696,405,671,379,697,379,696,380,696,379,696,380,1771,381,695,380,697,405,670,380,696,379,1772,380,696,380,696,380,696,379,696,380,696,379,697,379,697,405,670,380,695,407,670,379,697,379,696,380,696,379,697,379,695,381,696,380,695,380,697,379,695,381,1771,380,1771,384,693,379,1772,405,670,381,700,375,696,380,1772,379,1772,380,1772,405,1746,380,1771,380,1771,381,695,407,670,379,696,380,695,380,696,380,696,380,696,404,671,380,697,379,696,380,695,380,696,406,670,380,696,380,695,407,1745,380,696,406,670,379,696,380,696,380,696,380,695,406,670,380,695,381,695,380,696,380,696,380,696,380,695,380,696,380,696,380,695,381,695,380,697,379,695,407,669,380,696,380,696,406,669,380,696,405,671,380,696,379,1772,380,1771,380,696,380,695,381,1771,380,697,379,1772,379,696,380}, //20C + {5042,2131,378,1773,379,698,378,697,378,698,378,1773,379,697,379,696,379,697,379,697,379,1772,379,697,379,1772,379,1773,379,696,379,1773,379,1772,380,1772,379,1772,380,1771,380,696,380,1772,379,696,380,697,379,697,378,696,406,671,378,696,380,1773,379,697,379,697,378,1772,405,671,379,698,378,697,379,1771,380,697,379,697,379,696,379,698,378,697,379,697,405,671,378,698,378,696,379,697,379,698,378,697,379,697,379,696,379,1771,381,1772,379,1773,379,697,378,697,405,1747,379,696,380,29359,5063,2132,379,1773,378,697,379,696,380,696,382,1769,380,696,379,697,379,697,379,697,379,1772,379,698,378,1772,379,1773,379,696,380,1772,380,1771,380,1772,379,1772,380,1772,379,697,378,1773,379,697,379,696,380,697,378,697,379,697,379,697,379,1772,379,697,379,696,380,1772,379,696,406,670,379,697,404,671,406,670,380,696,380,695,380,697,404,672,378,1772,380,1771,380,696,380,696,406,1745,380,1772,380,1771,380,696,406,670,380,696,379,696,380,697,379,696,380,696,379,696,406,670,380,1772,379,697,379,695,381,696,405,671,397,1754,379,696,380,696,406,670,380,696,379,697,379,696,380,695,380,697,379,696,380,696,406,670,405,670,407,669,406,670,405,670,407,669,380,696,405,670,381,695,406,670,405,670,407,1745,406,1746,379,696,406,670,407,669,405,1745,408,1744,406,1746,380,1771,406,1745,407,1745,406,670,380,695,408,668,380,695,407,670,379,696,380,696,407,669,405,669,406,671,407,669,406,669,380,696,379,697,407,668,407,1745,379,697,405,670,379,697,407,669,379,697,378,698,378,697,378,697,379,698,377,699,377,698,377,698,377,699,377,699,350,726,350,725,350,726,350,726,349,726,349,727,349,728,347,728,372,703,373,703,373,703,347,729,372,1778,374,702,373,1779,373,703,373,1778,374,701,374,1778,373,703,373}, //21C + {5043,2130,380,1773,378,697,379,697,379,696,379,1772,380,696,379,697,379,697,378,698,379,1773,378,697,379,1772,380,1771,380,697,379,1772,379,1773,379,1772,379,1773,379,1771,380,697,378,1774,378,697,379,697,379,697,379,696,379,697,378,698,378,1773,379,697,379,696,380,1772,378,698,379,695,380,698,378,1772,405,672,378,697,379,697,378,698,379,696,379,696,380,696,379,697,379,696,380,696,380,696,379,697,379,697,378,697,379,1773,379,1772,380,1772,379,696,379,698,378,1772,380,696,379,29382,5042,2131,379,1772,380,696,380,696,379,696,380,1771,380,696,380,696,380,696,379,697,379,1773,379,696,379,1772,380,1772,380,696,379,1772,406,1745,405,1747,380,1771,380,1772,379,696,380,1772,379,697,406,669,380,696,379,697,379,696,380,696,380,1771,380,696,380,696,380,1771,406,671,405,670,380,696,379,696,380,696,405,671,406,669,406,670,406,670,407,1744,407,1744,406,671,379,696,380,1771,380,1771,406,1746,380,696,399,677,380,696,406,669,406,670,380,696,405,670,380,696,406,669,407,1745,406,669,381,695,380,696,380,695,406,1746,406,669,407,670,406,669,406,670,380,696,406,669,407,669,407,669,380,696,405,670,380,696,380,696,406,669,406,670,406,670,379,696,406,671,405,670,380,696,379,1772,406,670,404,1748,378,1773,378,698,377,698,378,698,377,1773,377,1775,351,1801,350,1801,349,1803,348,1803,348,728,373,703,373,703,373,703,373,702,373,703,373,703,373,702,373,703,373,702,374,702,374,702,373,703,373,703,373,702,373,1779,372,703,374,703,372,703,372,704,372,703,371,705,371,706,370,704,371,705,370,706,346,729,347,729,346,730,346,729,347,729,347,729,346,730,346,729,347,729,347,729,347,729,347,729,347,728,348,728,347,728,373,703,373,1778,375,1776,376,1777,374,700,377,1775,376,700,377,1773,378,698,378}, //22C + {5043,2130,405,1746,380,696,380,695,381,696,406,1744,381,696,406,670,379,697,379,696,380,1772,379,695,406,1746,380,1772,380,696,380,1771,405,1746,383,1769,380,1771,380,1772,380,696,405,1746,406,670,380,696,379,696,380,696,393,682,381,696,406,1745,380,695,407,669,407,1745,380,696,406,669,406,670,406,1745,405,671,380,696,380,696,407,668,407,669,406,670,380,696,406,670,405,670,380,696,380,695,380,696,380,696,380,696,405,1746,380,1772,379,1772,407,669,405,671,379,1772,380,696,380,29380,5043,2130,380,1771,380,696,380,696,405,671,406,1745,380,695,381,696,406,670,379,697,405,1746,405,670,405,1747,380,1771,406,670,380,1772,379,1772,406,1745,407,1745,380,1771,380,696,380,1771,407,669,407,668,381,695,407,670,379,696,380,696,379,1772,407,669,380,696,407,1744,405,671,380,696,379,695,381,696,380,696,404,671,407,669,380,695,407,670,379,1772,407,1744,407,669,407,669,380,1771,406,1745,407,1746,406,669,405,671,379,697,381,694,386,690,405,671,405,671,405,670,380,696,406,1744,381,695,408,668,406,670,380,696,380,1771,406,670,407,669,406,670,379,697,405,670,406,670,380,695,380,697,379,696,380,695,408,669,379,697,405,670,380,696,379,696,380,696,379,696,381,696,406,669,380,696,407,1744,380,1772,380,1771,406,670,380,696,406,670,379,1772,380,1771,406,1746,380,1771,407,1745,405,1746,380,696,380,696,380,696,405,670,406,669,381,696,379,696,405,671,407,669,379,696,380,696,407,668,381,696,379,697,405,670,406,1744,381,696,380,696,380,696,380,696,405,670,380,696,405,670,407,669,405,671,380,696,405,671,405,671,404,671,406,670,379,696,380,696,406,670,405,671,405,670,405,671,380,696,379,697,404,671,380,696,380,696,379,696,380,1771,381,695,380,696,381,1770,380,1772,380,696,379,1772,406,670,379}, //23C + {5042,2130,380,1772,379,697,379,697,379,697,378,1772,380,697,379,696,379,697,379,696,382,1770,379,697,379,1775,376,1773,379,696,380,1772,379,1773,379,1771,380,1772,380,1771,380,697,379,1772,379,697,379,696,380,697,378,696,380,697,379,696,380,1772,379,696,380,697,378,1772,380,697,378,697,379,697,405,1747,378,697,379,697,379,697,379,696,379,698,378,696,380,696,379,697,379,698,378,697,378,698,378,698,378,697,379,697,379,1772,379,1773,378,1772,380,697,379,697,379,1772,378,697,379,29382,5042,2131,379,1773,379,697,378,697,379,696,380,1771,380,697,379,696,380,695,407,670,379,1772,379,697,379,1773,379,1772,379,697,379,1772,379,1773,379,1772,380,1772,379,1772,379,697,379,1773,378,698,378,696,405,672,378,698,378,697,379,697,379,1772,379,697,379,696,380,1771,380,696,380,697,378,697,379,697,379,696,379,697,379,698,378,696,380,697,379,1773,378,1772,379,697,380,696,379,1772,380,1771,380,1771,380,698,378,697,379,697,379,695,380,697,379,697,379,697,378,697,379,697,379,1772,380,696,379,697,379,696,379,697,379,1773,379,696,379,698,378,697,379,697,379,697,378,697,379,696,380,697,378,697,379,698,378,697,379,696,379,697,379,696,380,697,379,696,379,697,379,698,378,697,378,1773,379,1772,406,1746,379,1772,379,697,379,697,379,697,378,1773,379,1772,379,1772,380,1772,379,1772,381,1771,379,697,379,697,378,698,378,698,378,697,405,671,379,697,401,674,404,671,380,696,380,696,379,697,379,697,379,697,378,697,379,1772,380,696,379,697,379,696,380,697,378,697,405,671,379,696,380,697,378,697,405,670,380,697,378,697,379,697,379,696,379,698,378,697,379,696,380,696,380,696,379,697,380,695,380,697,378,697,379,697,379,697,406,670,378,1772,380,1772,379,697,406,1746,379,1772,379,696,406,1746,380,696,379}, //24C + {5069,2104,406,1745,380,696,406,670,380,696,405,1746,406,670,380,696,380,696,379,696,406,1745,381,696,405,1746,405,1746,380,696,380,1770,381,1772,380,1771,380,1771,380,1772,380,697,379,1772,406,669,407,669,380,695,381,696,406,669,380,695,381,1772,379,697,379,696,406,1745,406,670,406,670,406,670,405,1746,406,669,382,693,407,670,380,696,405,671,406,672,404,669,379,696,380,696,380,696,380,696,380,695,386,690,406,670,405,1746,406,1746,380,1771,405,671,406,670,380,1771,406,670,380,29358,5066,2129,381,1771,380,696,406,670,379,696,380,1771,380,696,407,669,380,696,380,696,379,1772,380,696,380,1771,380,1771,381,696,379,1772,380,1771,407,1746,379,1771,380,1772,405,670,380,1772,380,696,380,695,406,670,380,696,405,671,379,696,406,1746,380,696,379,696,380,1771,381,695,380,697,379,696,380,696,405,670,380,696,380,696,380,696,380,695,380,1772,406,1746,379,696,380,696,405,1745,381,1772,379,1772,380,696,405,671,379,696,407,670,404,671,405,670,407,669,380,696,406,670,379,1772,380,696,380,696,379,696,380,696,380,1771,380,696,406,670,405,671,379,696,380,696,380,696,380,695,380,696,380,695,381,696,405,670,380,697,379,696,380,696,379,697,399,676,380,696,406,670,379,696,407,669,400,676,379,696,407,668,380,1772,406,670,380,696,380,1771,380,1772,380,1771,406,1747,378,1773,379,1772,405,671,407,668,406,671,403,672,406,670,406,669,406,670,379,697,379,696,406,670,379,697,406,669,406,671,379,696,380,696,379,1771,407,670,406,670,405,671,379,696,407,669,379,696,380,696,380,696,380,696,379,697,406,669,380,696,380,696,379,696,380,696,379,696,381,696,406,669,379,697,380,695,406,670,380,696,380,696,379,697,404,671,406,670,380,1771,406,670,406,1745,380,1771,381,1772,405,670,380,1771,380,696,405}, //25C + {5041,2131,379,1773,379,697,378,697,379,697,379,1772,406,670,379,698,378,696,380,697,378,1772,380,697,379,1772,379,1773,404,672,378,1772,380,1773,378,1773,379,1772,379,1772,380,696,379,1773,379,697,379,696,380,696,379,697,379,696,380,696,380,1772,378,698,378,697,379,1773,379,696,380,697,378,697,379,1772,405,671,379,697,379,697,379,697,379,696,379,697,379,697,379,696,379,697,379,696,380,696,379,698,379,696,379,696,380,1771,383,1770,379,1772,379,697,379,697,379,1771,380,696,380,29380,5070,2103,407,1745,380,697,379,696,380,696,379,1772,380,696,405,670,380,696,406,670,380,1771,380,696,380,1772,380,1771,380,696,380,1771,406,1746,379,1772,380,1771,407,1745,380,696,406,1745,380,696,380,696,380,696,379,696,380,696,380,695,408,1744,380,696,405,671,379,1772,380,696,380,695,380,696,407,668,407,669,380,696,380,696,406,669,407,670,384,1766,407,1744,407,668,407,670,407,1745,407,1745,380,1770,381,695,407,669,380,696,380,696,407,668,380,696,406,670,406,669,407,669,406,1746,380,695,407,669,405,670,380,696,380,1772,407,669,406,669,407,669,407,669,379,696,406,670,406,670,405,671,405,671,405,670,404,672,379,697,379,696,379,697,377,699,377,699,377,698,376,700,376,700,350,1801,350,726,349,727,349,726,349,1802,349,728,348,728,347,1803,373,1778,374,1778,373,1779,373,1778,374,1778,373,703,373,702,373,703,372,704,373,703,372,702,374,703,372,704,371,704,373,703,371,706,371,704,371,704,347,729,370,706,351,1800,347,729,346,729,347,729,346,731,346,729,347,730,345,729,347,729,347,728,348,728,347,729,348,728,347,728,373,703,374,702,372,703,375,702,374,701,375,700,376,700,376,700,376,699,377,699,377,698,378,698,377,699,403,1748,378,1773,378,1774,378,1773,404,1748,378,697,404,1747,405,671,404}, //26C + {5042,2131,379,1773,379,696,378,697,379,697,380,1772,379,696,380,697,378,697,379,697,379,1772,379,697,379,1773,378,1773,379,697,378,1773,379,1773,379,1772,379,1772,380,1772,406,669,380,1772,379,697,379,697,378,697,379,697,379,698,378,697,379,1771,406,670,379,698,378,1773,379,697,378,697,379,697,379,1773,405,670,379,697,379,697,379,697,379,696,379,697,379,697,379,696,379,697,379,697,378,697,380,696,379,697,379,696,380,1772,379,1773,379,1772,405,672,378,696,380,1772,379,697,378,29361,5063,2131,379,1773,379,696,380,696,379,697,379,1773,379,696,379,697,379,697,379,696,379,1773,379,696,379,1773,379,1772,380,697,378,1773,378,1773,379,1773,378,1773,379,1772,379,697,379,1773,379,697,378,698,379,696,379,697,379,697,378,697,379,1772,380,696,379,697,379,1773,378,698,378,697,379,697,378,697,380,696,379,696,379,698,378,697,379,697,379,1773,378,1773,406,670,379,697,379,1772,379,1772,379,1773,379,697,379,697,378,697,379,697,378,698,379,697,379,696,379,696,380,697,379,1773,378,697,379,696,379,697,379,697,378,1773,379,698,378,697,379,696,379,697,379,697,379,696,379,698,378,697,379,697,379,697,378,697,379,697,379,696,380,697,379,696,379,697,379,697,379,696,379,697,379,696,380,1772,404,671,380,696,380,1772,379,696,381,695,380,1771,380,1773,379,1772,379,1772,379,1773,379,1772,380,695,380,696,380,696,381,695,406,670,379,697,379,696,380,695,381,695,406,670,380,696,406,670,379,696,407,669,406,670,382,1769,407,669,406,669,381,699,402,670,380,696,380,695,381,696,379,696,406,670,406,669,380,696,380,696,407,669,406,669,406,670,380,695,381,695,407,669,380,696,405,670,381,695,407,668,407,670,380,695,381,695,405,671,407,1743,408,669,388,688,405,670,380,696,406,1745,406,1746,380,696,380}, //27C + {5044,2130,380,1771,380,696,380,696,380,696,379,1772,380,696,406,670,379,696,380,696,380,1771,380,696,380,1771,380,1772,380,696,380,1770,381,1772,379,1772,380,1771,380,1771,381,696,380,1771,380,696,380,696,384,691,380,696,380,695,381,696,380,1772,379,696,406,669,380,1772,380,695,380,696,380,695,381,1771,380,696,380,695,381,695,381,695,381,695,380,695,381,695,381,695,380,696,380,695,381,696,380,695,380,696,380,696,380,1771,380,1771,381,1771,380,696,380,696,380,1771,380,695,381,29380,5043,2130,380,1771,381,695,381,696,379,696,380,1771,380,696,380,695,381,696,380,695,380,1771,381,696,379,1771,381,1771,380,696,380,1772,379,1772,407,1744,381,1771,380,1772,379,696,380,1771,381,695,381,695,380,696,380,695,381,696,379,695,381,1772,379,696,380,696,380,1771,381,695,380,696,380,695,381,695,380,695,381,695,381,696,380,695,380,696,380,1771,380,1771,381,695,381,695,380,1772,380,1771,380,1771,380,697,380,695,380,696,380,696,380,696,379,696,380,697,379,696,379,697,380,1769,382,695,381,695,406,670,406,670,380,1770,381,696,380,696,380,696,379,696,380,695,380,697,379,697,379,695,381,696,380,696,379,695,381,696,380,696,379,696,380,695,381,696,380,695,380,696,380,696,380,1771,380,1771,381,696,379,696,380,1771,380,697,380,695,380,1772,380,1771,380,1772,379,1772,380,1771,380,1772,380,696,379,697,379,696,380,696,380,696,380,695,380,696,380,695,381,695,380,695,381,696,380,696,380,695,380,696,380,695,381,1771,380,696,380,696,380,696,379,696,380,696,380,696,379,696,380,695,381,696,380,695,380,697,404,670,407,670,380,695,406,670,380,696,380,696,379,696,380,696,434,641,381,695,380,696,380,696,380,698,377,696,380,696,380,1771,380,1771,381,695,380,696,380,696,407,1745,379,1772,380,695,381}, //28C + {5071,2102,381,1771,406,670,380,696,407,669,406,1745,380,695,380,697,406,669,380,696,407,1744,380,696,406,1745,380,1772,406,670,406,1745,407,1744,405,1747,380,1771,407,1745,406,670,405,1746,405,671,380,696,406,669,407,669,406,670,380,696,380,1771,380,696,406,670,379,1771,381,695,381,696,381,695,379,1771,407,669,407,669,380,696,406,670,380,695,380,696,380,696,383,693,380,695,380,696,380,696,405,675,375,697,379,696,380,1771,380,1772,380,1771,406,670,407,669,405,1746,380,696,406,29355,5043,2130,407,1744,381,695,407,668,381,696,379,1772,380,696,380,695,380,696,380,695,381,1772,379,697,379,1772,380,1771,380,695,381,1771,380,1770,382,1771,406,1746,380,1771,380,696,380,1772,405,670,404,672,380,695,380,696,380,695,381,696,380,1771,380,696,380,695,406,1746,380,696,406,670,379,696,381,695,380,695,381,696,379,696,380,696,380,695,381,1771,380,1772,379,697,379,696,380,1772,379,1772,400,1752,379,696,380,696,380,696,379,697,379,696,380,696,405,671,405,670,406,670,380,1771,407,669,380,696,380,696,379,697,379,1771,381,696,379,696,380,696,380,695,381,695,406,670,406,670,380,696,379,696,380,697,379,696,380,696,407,668,407,669,380,696,405,670,380,696,380,697,379,695,407,669,380,696,380,1772,379,697,379,1772,380,695,380,696,406,1745,380,1772,404,1748,379,1772,380,1771,380,1771,381,696,380,696,405,670,380,696,398,678,405,670,380,696,380,696,380,696,406,669,380,696,407,669,380,695,380,696,380,696,380,1772,379,696,380,696,408,668,380,695,382,694,406,669,380,696,406,670,406,669,381,696,379,696,406,670,405,671,407,669,379,696,405,671,380,696,406,669,380,697,406,669,406,669,381,695,380,696,407,668,381,696,379,696,380,1771,380,696,407,1745,380,696,380,696,379,1772,406,1745,380,696,380}, //29C + {5043,2131,379,1771,381,695,406,670,380,695,406,1747,406,670,379,696,380,696,406,670,404,1746,381,696,380,1771,380,1772,380,695,380,1771,381,1772,380,1771,380,1771,380,1772,380,696,406,1745,380,696,406,670,380,696,406,670,379,696,380,696,380,1772,405,670,407,669,380,1771,380,696,407,670,381,694,380,1771,380,696,380,696,380,695,380,697,379,696,380,695,407,670,379,696,407,670,379,696,380,696,380,696,405,670,380,696,380,1771,380,1772,380,1771,380,697,379,696,380,1772,379,697,379,29382,5043,2130,380,1772,380,696,379,696,380,696,380,1772,380,695,380,696,380,696,380,696,379,1772,380,696,380,1771,380,1772,406,669,380,1772,380,1772,380,1771,385,1766,381,1771,380,696,380,1772,380,695,380,696,380,696,380,696,380,696,379,695,381,1772,379,697,379,696,380,1771,381,695,380,697,406,669,384,692,380,696,379,696,380,696,380,695,381,696,406,1744,381,1771,380,697,379,696,380,1771,380,1772,380,1771,380,697,379,695,381,696,380,696,380,695,380,696,380,696,380,695,380,696,380,1772,380,696,379,696,380,696,380,696,380,1770,381,696,380,695,381,696,379,696,380,696,380,696,380,696,379,697,379,696,380,696,380,696,380,695,380,696,380,695,381,696,379,697,380,695,380,696,380,696,380,1771,380,696,380,1771,380,696,380,1772,380,695,381,695,380,1771,385,1768,379,1772,380,1771,380,1771,381,1772,379,696,380,696,380,696,380,696,379,697,379,696,380,695,381,695,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,696,380,695,380,696,405,671,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,697,379,696,380,695,380,696,380,696,380,696,380,695,380,696,380,696,380,696,380,1771,380,1772,380,1771,380,696,380,696,380,1771,380,1771,381,696,384}, //30C + {5043,2130,382,1769,380,696,380,695,380,696,380,1772,380,696,406,669,380,697,379,697,379,1771,405,672,379,1771,380,1772,380,696,384,1767,380,1771,380,1773,405,1745,380,1772,380,695,381,1771,380,696,406,670,379,696,380,696,380,696,403,673,379,1772,380,697,379,696,379,1773,379,696,379,697,379,696,406,1746,379,696,380,696,380,696,379,696,380,697,379,697,379,695,381,696,379,697,379,696,380,696,405,671,379,696,380,695,406,1746,380,1772,379,1772,380,697,379,695,380,1773,379,696,380,29380,5044,2129,380,1772,406,670,380,696,379,697,379,1772,380,696,405,670,380,696,405,671,406,1745,380,696,380,1772,379,1772,380,696,379,1773,379,1772,406,1746,379,1771,406,1746,380,695,380,1772,380,696,380,696,379,696,407,669,380,696,380,696,404,1747,380,695,406,670,380,1772,380,696,379,697,379,696,406,670,380,696,379,696,380,697,379,695,381,696,379,1771,381,1771,380,697,405,670,406,1745,406,1746,379,1773,379,697,379,696,379,697,405,670,380,696,380,696,379,697,406,670,379,696,380,1772,379,696,380,696,406,669,380,697,379,1772,406,670,379,696,380,696,380,699,376,697,379,696,406,670,405,670,380,696,380,696,380,696,379,696,380,696,380,695,380,697,379,696,380,696,380,697,379,696,379,696,380,1771,380,1772,380,696,380,1772,379,696,380,696,379,1772,406,1745,381,1771,380,1772,379,1773,379,1772,380,695,403,673,380,696,405,670,380,696,380,697,379,696,379,696,380,697,404,671,379,696,381,696,379,697,379,696,380,696,379,1772,380,696,380,696,379,696,380,696,380,696,379,696,380,696,384,692,406,670,379,697,379,696,380,701,374,696,380,696,380,696,380,695,380,696,380,696,380,695,406,671,379,696,380,696,406,669,380,697,379,697,379,697,404,1747,379,696,380,695,407,1744,381,696,406,1745,380,1772,380,695,380}, //31C + {5043,2130,381,1771,380,696,379,696,380,696,380,1771,380,696,380,696,380,696,380,695,381,1770,406,671,379,1772,380,1771,380,695,381,1772,380,1771,380,1772,380,1771,407,1745,380,696,379,1772,380,695,405,672,379,696,380,696,380,696,379,697,379,1772,380,696,380,695,380,1771,407,669,380,695,381,696,380,1772,379,696,380,696,380,695,380,697,379,696,380,696,380,695,380,697,379,696,406,670,380,696,379,696,380,696,380,695,380,1773,379,1771,381,1771,380,696,406,670,379,1772,380,696,405,29355,5070,2103,380,1772,406,670,380,695,380,697,379,1771,380,697,379,696,380,696,380,696,380,1771,380,696,380,1771,380,1772,380,695,380,1771,381,1771,380,1772,380,1771,380,1772,380,696,379,1772,380,695,381,696,379,696,380,696,380,696,380,695,380,1771,381,696,379,696,380,1771,381,696,379,697,404,671,380,695,380,697,379,696,380,696,380,696,380,694,381,1771,381,1772,406,669,406,670,379,1771,381,1771,381,1771,380,696,406,669,380,696,380,696,380,695,380,697,379,696,406,670,380,694,382,1770,381,696,405,671,379,696,380,696,380,1771,380,697,405,670,380,695,406,671,380,695,406,670,380,695,381,695,380,696,380,696,380,695,380,696,407,669,380,696,380,695,380,696,380,696,380,695,381,695,380,1772,405,1746,380,1771,381,695,380,1771,381,696,379,696,380,1771,381,1771,380,1771,381,1771,380,1772,380,1772,379,695,381,696,379,696,380,696,380,695,381,695,380,696,380,696,380,696,379,696,380,695,381,696,380,695,380,696,380,696,381,1770,380,696,380,696,380,698,377,696,380,697,379,696,380,696,379,696,380,696,380,695,380,696,381,695,380,696,380,696,379,697,379,696,380,696,380,695,380,695,381,696,380,695,380,696,380,697,379,696,380,696,379,696,380,1772,379,1772,380,696,380,1771,380,696,380,1771,380,1772,380,695,380} //32C + }, + // Fan Speed Low + { + {5070,2104,380,1771,380,695,407,670,380,696,380,1772,406,668,381,696,380,696,380,695,380,1772,405,670,381,1772,379,1772,407,669,406,1745,380,1772,380,1771,380,1772,380,1771,406,671,406,1745,380,695,407,670,379,696,380,696,406,670,380,695,407,1745,405,671,380,695,407,1744,381,696,380,696,406,670,380,1771,380,696,405,671,405,671,405,670,380,696,380,696,380,696,406,670,405,670,405,671,405,671,379,696,380,696,380,696,380,1771,407,1745,407,1745,405,670,407,669,380,1771,408,668,381,29359,5066,2130,380,1771,380,697,378,696,381,696,380,1771,380,696,379,696,381,696,379,696,380,1772,405,671,379,1772,406,1746,380,696,407,1744,380,1772,379,1772,380,1772,379,1772,380,696,380,1772,379,697,379,696,379,697,380,696,379,697,405,670,380,1771,380,697,379,696,380,1772,380,696,379,696,380,696,379,697,406,670,379,697,405,670,380,696,380,697,379,1772,379,1773,379,696,379,697,379,1772,406,1746,405,1746,380,695,381,696,406,669,380,696,380,695,384,692,381,696,379,696,405,671,406,1746,379,696,380,696,406,670,380,697,405,1746,379,695,381,696,379,697,379,696,380,696,380,696,379,697,405,670,380,697,379,696,380,696,379,697,379,696,406,670,380,696,380,696,379,696,405,671,405,671,379,1772,406,1746,380,1771,406,670,380,696,406,670,379,696,380,1771,381,1772,406,1745,406,1746,406,1745,380,696,380,697,379,696,379,697,379,697,379,696,380,697,379,695,380,697,406,670,379,696,379,697,379,695,381,696,405,671,379,697,379,1773,379,697,379,696,380,695,407,669,380,697,379,696,380,696,379,696,380,697,379,696,380,695,381,696,379,696,380,696,380,696,380,696,379,696,380,696,380,696,405,671,380,695,380,696,380,696,379,696,380,695,381,696,380,1772,379,1772,380,696,407,1745,379,697,386,1765,380,696,379,696,380}, //16C + {5043,2131,379,1773,379,696,380,695,381,696,379,1771,381,696,380,696,379,696,380,696,380,1772,380,696,379,1772,380,1772,379,697,379,1772,380,1772,379,1772,380,1771,380,1772,405,671,380,1771,406,670,380,697,379,696,380,696,379,697,379,697,379,1773,379,696,379,696,380,1772,379,697,379,697,405,670,379,1773,379,697,378,698,379,696,380,695,380,697,379,696,380,696,380,696,380,696,379,696,380,696,380,696,379,697,379,696,380,1772,379,1772,380,1772,380,696,380,696,379,1772,406,671,378,29383,5043,2130,380,1772,379,697,379,696,380,697,379,1771,380,696,380,697,379,696,379,697,379,1772,380,695,381,1772,379,1773,379,697,378,1772,380,1772,380,1771,380,1772,379,1772,380,696,380,1772,405,671,380,696,379,697,379,696,404,672,380,694,381,1772,380,696,380,695,381,1771,380,696,380,697,378,696,380,697,379,696,380,696,379,696,380,697,379,696,406,1745,380,1772,380,696,380,696,379,1772,380,1772,380,1771,380,695,381,696,380,696,379,697,379,697,379,696,380,695,381,696,379,697,379,1771,380,696,405,671,380,696,380,696,380,1771,406,671,379,695,381,696,379,696,380,696,380,696,380,696,380,696,379,696,380,696,380,696,379,698,378,697,379,696,380,696,380,696,405,670,380,696,380,696,380,696,379,697,379,697,405,1746,380,695,380,697,379,697,379,1771,380,1772,380,1772,379,1773,386,1765,405,671,379,697,379,696,380,696,380,696,379,697,379,696,380,696,380,696,379,697,405,671,379,696,380,696,379,697,379,696,406,670,379,1773,379,697,379,697,379,697,379,696,380,696,379,697,379,696,405,672,378,697,406,670,379,695,381,696,380,696,380,695,380,697,406,669,380,696,380,695,380,697,379,697,378,696,381,695,406,670,380,696,380,696,380,696,380,1771,406,670,405,1746,380,1772,380,696,382,1769,380,696,406,670,380}, //17C + {5043,2131,379,1773,379,697,379,696,405,672,378,1773,405,671,379,696,380,696,379,696,380,1772,380,697,379,1771,380,1773,379,696,379,1772,380,1772,380,1772,379,1772,380,1771,380,697,379,1772,380,696,379,697,379,697,379,696,379,697,379,697,379,1772,379,696,380,696,380,1773,378,697,379,696,380,697,379,1772,380,695,380,697,379,697,379,696,380,696,379,697,379,697,379,697,378,697,379,696,380,697,379,696,380,697,379,696,379,1772,405,1748,380,1771,379,697,378,697,380,1771,380,697,379,29382,5043,2130,380,1773,378,697,379,697,404,670,380,1773,379,696,406,671,378,697,379,697,379,1772,380,696,379,1773,379,1773,379,696,380,1771,380,1773,378,1773,379,1772,405,1746,380,696,379,1774,379,695,380,696,380,696,380,696,379,698,378,696,380,1773,379,697,378,696,406,1746,380,696,380,696,379,697,379,697,379,697,379,696,379,697,379,696,380,696,379,1773,379,1774,378,696,379,697,379,1772,379,1774,378,1773,379,697,379,696,379,697,379,696,380,697,379,696,379,697,379,697,378,697,380,1772,379,697,379,696,380,696,379,698,378,1773,406,670,378,697,379,697,379,697,378,697,380,696,379,697,405,670,380,696,379,697,380,696,379,696,380,697,379,697,378,697,379,697,379,697,379,695,380,698,378,1773,379,696,380,696,379,1773,379,697,379,696,380,697,378,1772,380,1772,379,1772,379,1773,380,1772,378,698,379,696,380,696,379,697,379,696,380,697,379,696,379,697,379,697,379,696,406,670,379,696,380,697,405,671,378,697,379,696,380,1772,379,697,384,692,379,697,379,696,380,697,378,702,374,697,379,697,379,696,379,698,378,696,380,697,379,696,379,697,380,695,379,698,379,697,379,696,380,695,380,697,379,697,378,698,378,697,379,697,379,697,378,697,379,1773,379,1772,379,1773,379,1772,379,697,380,1771,380,697,379,697,378}, //18C + {5068,2105,381,1770,381,695,406,670,410,666,380,1771,407,669,380,696,407,669,404,672,380,1771,380,696,379,1772,406,1745,408,669,380,1771,380,1771,381,1771,406,1746,407,1744,405,672,379,1772,405,670,407,670,379,696,407,669,380,696,380,695,406,1746,406,670,380,695,381,1771,405,670,381,695,407,669,380,1772,380,696,380,696,407,668,406,670,380,696,405,670,380,697,406,669,380,696,406,670,380,695,405,671,407,669,380,696,401,1750,380,1771,407,1745,380,696,380,696,380,1771,380,696,380,29382,5043,2131,405,1745,408,669,380,695,380,696,380,1772,380,695,380,696,406,670,380,695,381,1772,405,670,380,1771,380,1772,380,695,381,1771,407,1745,380,1771,407,1745,380,1771,380,696,381,1771,379,697,380,695,380,696,380,696,380,696,379,696,381,1771,380,696,379,696,406,1746,406,670,379,697,380,696,379,696,407,669,406,670,382,693,405,671,380,696,380,1775,376,1772,407,669,406,669,381,1771,380,1772,405,1746,380,696,406,670,380,696,380,695,380,696,405,671,380,696,406,669,380,696,407,1744,380,696,380,696,380,695,409,668,380,1771,406,670,406,670,380,696,380,695,407,669,380,695,381,695,406,670,406,670,405,671,407,669,405,671,379,696,380,696,380,696,379,697,406,669,380,696,380,696,380,696,406,1744,407,670,380,1771,406,671,379,696,406,670,406,1745,380,1771,406,1746,407,1745,380,1771,381,698,377,696,380,695,380,696,381,696,379,696,380,696,380,696,406,669,380,696,380,696,380,696,380,696,379,696,407,668,381,696,380,1771,380,695,380,697,405,670,380,697,379,696,380,696,380,696,379,697,379,695,381,696,380,695,408,668,380,696,380,696,380,695,406,670,380,696,380,696,380,695,380,696,407,669,407,669,380,695,407,669,380,696,406,670,380,1771,406,670,380,695,407,670,380,1771,406,1745,381,695,381,695,380}, //19C + {5069,2104,380,1772,380,695,405,671,380,696,380,1771,380,696,380,696,406,670,380,695,406,1746,380,696,406,1745,407,1744,406,671,405,1746,406,1745,407,1745,405,1747,405,1747,379,696,407,1744,404,673,379,696,406,670,380,696,405,671,379,696,380,1772,380,695,407,669,398,1754,380,696,379,696,380,696,406,1745,406,670,407,670,379,696,380,695,381,696,379,696,407,669,406,670,405,671,379,696,380,696,380,696,380,695,381,696,406,1745,380,1771,380,1773,379,696,406,669,380,1772,381,695,380,29382,5043,2131,406,1745,405,670,380,696,380,696,407,1744,380,696,406,670,380,696,379,697,379,1772,380,696,380,1771,380,1773,379,695,381,1771,405,1746,406,1746,380,1772,380,1772,379,697,379,1772,380,696,379,697,379,696,380,696,406,671,378,696,380,1772,380,696,380,695,406,1746,379,696,381,696,379,696,380,696,406,670,405,670,407,670,405,670,406,669,407,1744,381,1772,380,696,410,665,380,1772,380,1771,380,1772,380,696,405,670,380,696,380,696,380,696,379,697,406,669,380,696,406,670,405,1746,380,696,407,669,380,696,379,696,380,1772,380,696,405,671,379,696,380,696,380,696,380,696,379,696,406,671,379,696,380,696,380,696,405,670,380,696,380,696,380,695,380,696,380,696,380,696,380,696,379,1773,379,1771,408,668,380,1771,381,696,406,670,379,696,380,1772,379,1772,406,1746,379,1772,406,1746,380,696,380,695,380,697,379,696,405,671,380,696,379,696,380,696,405,671,380,695,380,696,380,696,406,670,380,696,379,696,406,670,380,1771,405,672,379,696,380,696,380,696,380,696,379,697,379,696,406,670,380,696,379,697,379,696,380,697,404,670,380,697,379,696,380,696,379,697,405,670,380,696,380,696,406,670,380,696,379,696,380,696,380,695,406,670,380,1772,380,1772,379,697,379,696,380,1771,380,1772,406,670,406,670,406}, //20C + {5044,2129,380,1772,405,671,380,695,406,669,407,1745,408,669,379,696,406,669,381,695,408,1744,381,695,407,1744,381,1771,380,696,380,1771,381,1771,380,1772,379,1772,406,1745,407,669,381,1771,406,669,381,696,407,668,380,696,407,668,407,670,380,1771,380,696,380,695,407,1745,380,696,380,696,379,697,407,1744,380,696,380,695,381,695,380,696,406,670,380,695,407,669,381,695,407,669,406,670,380,695,381,695,407,669,381,695,380,1771,381,1771,408,1744,379,696,407,669,380,1771,407,669,381,29381,5044,2129,380,1772,380,696,380,696,379,697,379,1772,380,696,404,671,381,695,380,696,380,1771,381,695,405,1747,380,1772,379,696,380,1772,406,1745,380,1772,380,1772,380,1771,380,696,406,1745,406,669,381,696,379,696,380,696,380,696,380,695,381,1771,406,670,380,696,380,1771,407,669,406,670,380,696,380,696,380,695,407,669,380,696,380,696,406,670,407,1744,407,1744,382,694,380,696,405,1746,380,1772,406,1746,380,695,380,696,380,696,380,696,380,695,380,696,404,672,380,696,380,696,406,1745,380,695,381,696,406,670,379,696,380,1771,380,697,379,696,380,696,380,695,381,695,406,671,379,695,381,696,380,695,405,671,380,696,406,670,380,695,380,697,379,696,380,696,406,669,380,696,380,696,406,670,406,669,380,1772,380,1771,381,695,380,697,379,696,379,1772,381,1770,408,1744,381,1771,380,1771,380,696,380,696,380,696,406,670,380,695,380,696,380,696,406,669,380,697,379,696,380,696,380,696,379,697,405,670,380,696,380,696,380,1771,380,696,407,669,406,670,405,671,407,668,380,696,380,696,380,695,380,696,380,696,406,670,380,695,380,696,380,696,405,671,406,669,380,696,380,696,380,696,380,695,380,697,405,670,406,670,379,696,381,695,407,670,379,1771,381,695,381,1771,406,670,380,1772,379,1772,380,695,407,669,380}, //21C + {5092,2104,380,1771,380,696,380,696,380,696,404,1747,380,696,405,671,379,696,381,695,407,1744,381,696,379,1772,407,1744,381,695,406,1746,380,1771,381,1771,380,1771,407,1745,380,696,380,1771,381,695,407,669,406,670,380,696,404,671,380,696,380,1771,381,696,379,696,380,1772,380,695,382,694,380,696,406,1746,380,698,377,696,407,669,406,669,381,696,380,696,379,696,380,696,380,696,379,696,407,670,406,669,380,696,380,695,380,1772,380,1771,381,1771,380,696,380,696,411,1740,380,696,380,29382,5043,2130,380,1771,380,696,380,696,379,696,407,1745,406,669,381,695,381,695,407,669,380,1772,379,697,379,1772,406,1746,379,696,380,1772,380,1771,380,1772,380,1771,381,1771,380,696,405,1746,380,696,380,696,406,670,406,669,406,670,381,695,380,1772,380,696,379,696,380,1772,379,697,406,669,407,669,406,670,406,670,379,697,379,696,406,670,380,696,379,1772,380,1772,406,670,380,695,406,1746,380,1771,406,1745,381,696,379,696,380,696,380,696,380,695,381,695,380,696,405,671,380,696,379,1772,406,670,380,696,380,695,381,695,380,1772,407,669,380,695,380,696,380,696,380,696,406,669,380,696,380,696,380,695,381,695,380,696,406,670,380,695,408,668,380,696,380,696,380,696,380,696,380,696,379,1771,381,696,379,1772,405,1747,380,696,380,695,407,669,380,1771,380,1772,380,1771,385,1767,407,1745,379,696,380,697,404,671,380,695,381,695,380,696,380,696,380,696,380,696,379,696,380,696,380,696,380,695,407,670,379,696,406,670,380,1772,379,696,380,696,380,695,380,696,380,696,395,680,381,696,379,696,380,696,380,696,406,670,379,697,379,696,380,696,380,695,380,697,379,697,379,696,380,696,379,697,379,696,380,696,380,696,380,696,380,695,380,696,380,1772,379,1772,380,1772,407,668,408,1744,380,1772,404,671,380,696,380}, //22C + {5042,2131,379,1772,406,671,379,696,405,671,380,1772,405,670,406,671,379,696,379,697,405,1746,380,696,379,1772,380,1772,379,697,379,1772,380,1772,379,1773,379,1772,379,1772,380,696,380,1772,406,670,379,697,379,696,405,671,379,697,379,697,379,1772,379,696,406,671,379,1772,380,695,380,698,378,697,379,1772,379,697,379,696,379,698,378,697,379,698,378,697,379,696,380,696,379,697,379,696,380,696,380,697,379,695,380,696,380,1772,379,1773,379,1772,379,697,379,697,379,1772,379,697,379,29359,5067,2130,406,1745,380,696,380,697,379,696,379,1773,379,696,380,697,378,697,379,696,380,1772,379,696,380,1772,379,1772,380,696,380,1772,379,1773,379,1772,379,1773,379,1771,381,695,380,1772,380,697,378,697,379,697,379,696,406,670,380,696,379,1773,379,696,380,696,380,1772,405,671,379,696,380,696,379,696,380,697,379,696,380,697,378,697,379,697,378,1773,380,1772,379,696,380,697,378,1772,380,1771,380,1773,379,696,380,697,379,697,378,697,379,696,379,696,381,696,379,697,379,697,379,1772,379,696,381,696,379,696,380,696,379,1772,380,696,380,695,380,697,379,697,405,671,379,696,405,671,379,697,379,696,380,696,379,697,379,697,379,697,379,696,380,696,379,697,379,697,379,696,380,696,379,697,406,1746,378,1772,380,1772,379,697,379,697,379,697,379,1772,379,1772,380,1772,379,1773,405,1747,379,696,379,697,379,697,379,697,379,697,378,696,380,697,379,696,379,697,379,697,406,669,406,671,379,696,379,697,379,697,379,696,380,1772,379,697,379,697,379,697,379,696,379,697,379,697,379,697,379,696,379,697,405,671,379,696,379,697,379,697,379,696,380,696,405,671,380,696,379,697,379,696,380,696,380,696,379,697,379,696,380,696,380,696,380,695,380,1772,380,696,380,696,379,1772,380,1772,379,1772,380,696,380,696,379}, //23C + {5068,2104,381,1771,407,669,380,696,406,670,379,1772,380,696,406,670,380,694,382,696,405,1745,406,671,380,1771,380,1772,405,671,405,1746,380,1771,380,1772,380,1772,380,1771,380,697,379,1770,381,696,380,696,407,669,380,696,379,697,379,696,380,1772,379,696,380,696,380,1772,379,696,380,696,407,669,405,1746,380,696,380,696,380,695,380,696,380,696,382,694,379,696,407,669,406,670,405,671,380,696,379,697,379,697,379,696,406,1746,379,1772,380,1772,406,669,380,696,385,1766,380,696,380,29381,5044,2130,380,1771,380,696,380,696,406,669,380,1771,406,670,381,696,380,695,380,697,406,1745,380,696,379,1772,380,1772,379,696,407,1745,380,1771,380,1773,404,1746,405,1747,380,696,405,1746,407,669,380,696,379,696,380,696,407,669,380,696,380,1771,406,669,381,696,379,1772,380,696,406,670,380,695,380,696,380,696,380,696,380,696,380,695,380,696,406,1744,381,1771,381,696,379,697,379,1772,405,1747,379,1771,381,696,406,670,380,695,380,696,380,696,380,696,379,697,385,690,380,695,406,1746,405,672,379,696,405,671,405,670,380,1772,380,696,379,696,381,695,380,696,380,696,380,695,380,696,380,695,381,696,379,697,379,696,380,696,406,669,381,696,379,697,404,671,405,671,379,697,379,697,379,1771,380,1772,380,1771,380,1772,380,696,380,695,381,696,379,1772,380,1772,379,1772,380,1772,379,1772,380,696,380,696,379,697,379,696,406,670,405,671,404,672,404,671,380,696,380,696,406,670,379,697,379,696,380,695,381,696,379,696,380,1771,380,697,379,697,379,695,381,696,379,697,379,696,407,669,380,696,405,670,380,696,380,696,380,696,379,696,380,696,380,695,407,670,379,696,380,696,380,696,380,695,406,670,380,696,380,696,380,696,380,696,379,696,407,1745,379,1772,380,696,380,1771,407,1745,380,1771,380,695,381,696,406}, //24C + {5043,2130,380,1772,379,697,379,697,379,697,405,1747,379,695,380,697,379,697,379,696,380,1772,379,695,381,1771,406,1745,381,696,380,1771,380,1772,379,1772,405,1747,380,1772,379,696,407,1744,380,697,379,697,379,696,406,670,380,696,379,697,404,1746,381,696,405,671,379,1771,381,697,378,696,407,669,380,1772,379,697,379,697,379,697,379,695,380,698,403,672,379,696,380,696,379,696,380,696,380,696,380,696,380,696,379,697,379,1772,379,1772,405,1747,379,696,380,696,380,1772,405,671,405,29355,5044,2130,380,1772,379,697,379,696,380,695,381,1771,406,671,405,670,380,695,380,696,380,1772,380,696,406,1744,381,1772,379,696,380,1772,380,1771,380,1772,380,1772,379,1772,380,696,380,1771,380,695,381,696,405,671,379,696,380,697,379,697,378,1773,405,670,380,696,380,1772,405,671,379,696,380,696,379,696,406,675,401,670,380,696,405,671,379,696,380,1771,381,1771,384,692,379,697,379,1772,380,1772,380,1771,380,696,379,697,379,697,379,697,379,696,380,696,406,670,379,696,380,696,380,1771,407,670,379,697,404,670,381,696,405,1747,379,696,379,696,380,696,380,696,380,696,379,697,379,696,380,696,380,696,379,697,379,696,380,696,380,696,380,696,379,696,405,671,380,696,379,697,379,696,380,696,380,696,380,696,379,697,379,1772,379,696,380,697,379,1772,379,1772,380,1777,375,1771,380,1772,406,671,404,671,379,696,380,695,407,670,405,671,405,670,380,696,379,697,406,670,379,696,406,670,379,696,380,697,379,697,379,696,406,1745,380,696,380,696,380,696,379,696,380,696,379,696,380,696,380,697,379,696,380,696,379,696,380,696,380,696,380,696,380,696,405,671,379,697,404,671,379,696,380,696,380,696,405,671,379,697,379,697,379,696,406,670,379,1773,405,670,380,1771,406,1746,380,1771,408,1744,406,670,379,696,385}, //25C + {5042,2131,380,1772,406,670,379,696,380,696,380,1771,380,696,379,697,406,670,379,696,380,1772,379,697,379,1772,379,1773,379,697,379,1772,379,1772,380,1772,380,1771,380,1772,382,694,379,1772,380,696,379,700,376,697,404,671,380,696,379,696,380,1772,380,696,379,697,379,1772,406,671,379,696,379,697,379,1772,380,696,379,696,380,697,404,672,379,696,380,696,379,697,379,696,380,696,379,697,379,696,380,696,380,696,380,696,379,1772,380,1772,379,1773,379,696,379,696,380,1772,404,672,379,29382,5043,2130,380,1772,379,697,379,696,380,696,380,1772,379,696,380,696,380,696,406,670,379,1772,380,696,379,1772,380,1772,380,695,406,1747,379,1772,405,1747,379,1771,406,1747,379,696,380,1772,379,697,405,671,379,696,379,697,379,696,406,670,380,1772,406,669,380,696,380,1771,380,696,380,697,379,696,405,671,405,670,380,696,380,695,380,696,380,697,379,1771,407,1745,380,696,380,695,406,1746,380,1771,380,1772,380,697,405,670,379,697,379,696,380,696,380,695,380,697,379,697,379,697,379,1772,406,670,404,671,380,696,379,697,380,1771,405,671,379,697,379,697,381,695,380,695,380,696,379,696,380,696,380,696,380,695,380,697,379,696,380,696,406,671,378,697,405,670,379,697,380,696,379,697,379,1772,380,696,379,697,379,696,380,1772,379,697,379,696,406,1746,405,1746,380,1772,379,1772,380,1771,380,696,380,696,380,696,380,696,379,697,379,696,380,696,380,695,380,697,379,697,379,696,379,696,380,697,379,697,379,697,379,696,379,1772,380,696,380,695,380,696,382,695,379,696,380,696,379,697,379,697,379,696,407,669,379,697,379,696,379,696,380,697,406,669,380,696,406,670,380,696,406,669,380,696,380,696,380,696,379,696,406,671,379,696,405,671,379,1772,406,1746,379,1772,380,1771,380,1772,380,1772,379,697,379,698,378}, //26C + {5043,2130,380,1771,380,696,406,670,380,696,407,1744,380,695,407,670,380,695,381,695,381,1771,406,669,406,1746,380,1772,380,695,406,1746,380,1772,405,1746,407,1744,381,1771,380,696,380,1771,380,696,380,696,407,669,380,695,407,669,380,696,380,1771,380,696,380,696,380,1771,406,670,380,696,380,695,381,1771,405,671,380,696,405,670,406,670,407,669,406,670,407,668,406,670,380,696,380,695,406,671,404,671,380,696,380,695,407,1750,375,1772,406,1745,380,696,380,696,407,1744,406,670,380,29382,5042,2130,380,1772,380,695,381,696,380,696,379,1772,406,670,380,695,380,696,380,696,380,1771,380,696,380,1772,405,1747,404,670,407,1746,379,1772,380,1771,381,1771,406,1746,379,696,380,1771,381,696,381,694,380,696,380,696,380,696,406,669,380,1772,380,696,379,697,379,1772,380,695,380,697,379,696,380,696,380,696,379,696,380,696,381,694,381,696,406,1745,380,1771,381,695,407,669,380,1772,380,1771,406,1745,380,696,406,670,380,696,405,670,381,696,379,696,406,670,380,695,381,696,379,1772,380,696,399,676,381,695,380,695,406,1747,406,669,380,696,380,696,405,671,380,695,406,670,380,696,406,670,406,669,380,696,407,669,405,671,407,668,406,670,380,696,406,669,380,697,405,670,380,696,405,671,393,1758,381,695,380,696,380,1771,404,672,406,669,408,1744,380,1771,380,1772,406,1745,380,1772,380,696,406,670,379,697,379,696,380,695,381,696,405,670,380,696,380,696,380,695,381,695,380,695,381,696,406,670,379,697,405,670,380,1771,380,696,380,696,406,670,380,695,380,696,380,696,380,696,380,695,380,696,406,670,406,669,381,696,380,695,406,670,406,670,380,696,379,696,380,696,380,696,380,695,381,695,380,696,380,695,381,696,379,696,380,696,380,1771,381,695,380,696,380,696,380,695,380,696,380,1772,406,669,380}, //27C + {5042,2130,407,1745,380,696,380,695,408,668,380,1771,407,669,380,696,380,696,380,696,380,1771,380,696,380,1772,379,1772,380,696,400,1751,407,1745,406,1745,380,1772,406,1745,380,696,380,1771,406,671,405,670,406,670,380,696,406,669,406,670,380,1772,379,696,380,696,380,1771,381,695,380,697,405,670,380,1771,380,696,380,696,405,671,406,670,406,669,380,696,380,695,381,696,379,696,406,670,406,670,406,669,380,696,380,696,380,1771,381,1771,380,1771,381,695,405,671,380,1771,408,668,380,29382,5043,2130,380,1771,380,696,380,696,379,697,379,1773,379,696,406,670,379,696,380,696,380,1772,379,697,379,1772,380,1772,379,696,380,1773,378,1773,379,1772,379,1772,380,1772,379,697,379,1772,406,670,379,698,405,669,380,696,380,696,379,697,379,1772,380,696,379,697,379,1772,380,696,379,697,379,697,379,696,379,697,380,696,379,697,379,696,379,697,406,1745,380,1772,380,696,379,697,379,1771,380,1773,379,1772,380,696,379,696,380,696,380,697,405,670,379,696,380,697,378,697,380,696,379,1772,406,670,380,696,379,697,379,696,380,1772,379,697,379,697,379,696,379,697,379,696,380,697,379,696,380,696,379,696,380,696,380,696,379,696,380,697,405,669,381,696,380,695,380,697,404,671,405,671,380,1771,380,1771,407,670,379,696,380,1773,405,670,379,697,379,1772,402,1749,380,1772,380,1771,380,1772,380,696,380,695,380,696,380,696,380,696,380,695,380,696,380,696,379,697,379,696,380,696,380,696,380,696,379,696,380,696,380,696,406,1745,380,696,380,696,379,697,379,697,379,696,380,696,379,697,379,697,406,670,405,670,379,697,379,695,381,696,406,670,380,696,379,697,379,696,406,670,379,696,380,696,380,697,379,696,380,696,379,697,379,696,380,696,380,1771,380,1772,380,696,379,697,379,696,380,696,380,1772,379,697,379}, //28C + {5043,2130,407,1744,381,695,380,696,407,669,406,1745,407,669,406,670,380,696,380,696,406,1745,406,669,406,1747,384,1766,407,669,381,1771,407,1744,384,1768,407,1744,407,1745,407,669,401,1751,380,695,407,669,380,695,407,669,381,695,380,696,380,1771,380,696,405,671,406,1745,406,670,380,696,380,696,380,1771,380,696,406,669,407,669,408,668,380,696,407,669,405,670,407,670,406,668,406,671,406,669,406,670,406,670,406,670,380,1771,407,1745,407,1744,380,695,381,696,380,1772,406,669,406,29355,5070,2104,406,1745,380,696,380,696,380,696,379,1772,406,670,380,696,379,696,380,696,380,1772,385,690,407,1744,408,1744,380,696,405,1747,406,1745,406,1746,380,1771,405,1746,381,695,380,1772,406,670,380,695,407,669,405,671,380,696,406,670,405,1746,407,669,380,695,380,1772,380,695,407,669,380,697,405,670,380,696,407,668,406,670,405,671,406,670,406,1745,380,1772,406,669,407,669,380,1771,380,1772,380,1772,380,696,379,696,380,696,406,670,380,696,380,695,380,696,380,696,380,695,380,1772,389,687,380,696,405,670,380,696,406,1745,381,695,380,696,380,696,406,669,381,695,407,669,405,671,379,696,381,695,405,671,406,670,380,696,406,669,380,695,381,696,406,669,380,696,406,670,405,670,381,695,406,671,379,1771,380,697,379,1771,381,696,406,669,380,1771,407,1746,380,1771,380,1771,380,1772,406,670,380,695,406,670,406,670,406,669,381,695,407,669,407,668,406,669,382,695,380,696,380,696,403,673,380,696,380,695,406,670,405,1746,406,670,380,696,380,695,406,670,380,697,379,696,380,696,380,695,380,696,406,670,380,696,380,695,380,696,380,696,380,695,381,695,407,669,406,670,380,695,380,696,380,696,407,669,406,669,380,697,379,696,380,696,406,1745,381,695,380,1772,380,695,384,692,380,695,407,1745,381,696,379}, //29C + {5043,2130,380,1772,404,671,406,670,406,670,380,1771,380,696,380,696,406,670,379,696,387,1765,380,696,380,1771,380,1772,405,670,381,1771,380,1772,405,1746,380,1771,381,1771,405,671,380,1771,380,696,380,695,407,670,380,695,406,670,380,696,406,1745,381,695,406,670,407,1744,406,670,406,670,380,695,381,1771,380,696,406,670,406,669,407,669,406,670,380,695,381,696,405,670,380,696,380,695,381,695,407,669,380,696,405,670,381,1771,406,1745,381,1771,380,696,406,669,381,1771,380,696,380,29381,5044,2129,406,1746,406,670,379,696,381,695,380,1772,380,695,381,696,379,696,380,696,380,1770,381,696,407,1744,380,1772,407,669,380,1772,405,1745,407,1745,406,1746,407,1744,380,696,380,1771,381,695,380,696,406,670,380,695,381,695,380,696,380,1771,381,695,380,696,410,1741,381,695,406,670,380,695,381,695,381,695,407,669,406,669,380,696,407,669,380,1771,381,1771,380,696,380,696,406,1745,380,1772,406,1745,380,696,380,695,381,696,405,670,407,669,380,696,380,696,380,695,380,696,407,1745,380,695,407,669,406,669,381,695,407,1745,408,668,406,669,381,695,406,670,380,697,379,695,381,696,380,695,406,669,408,669,380,695,405,671,380,696,380,695,406,670,380,696,380,696,380,695,381,695,380,1772,380,695,381,1771,380,696,380,1771,380,696,380,696,380,1771,381,1771,380,1771,380,1771,381,1771,407,669,407,669,381,694,407,669,407,669,380,696,380,696,406,669,381,695,380,696,380,696,405,670,381,695,380,695,381,696,379,696,381,1771,380,695,407,669,391,685,406,670,380,695,381,695,407,669,381,695,406,670,405,670,380,696,380,696,380,695,380,698,405,669,406,670,380,695,408,668,405,671,407,669,406,670,380,695,380,696,380,696,406,669,381,695,406,1746,380,1772,380,1771,406,670,406,669,380,696,380,1772,406,669,380}, //30C + {5043,2129,380,1773,379,696,379,697,380,696,380,1772,404,672,379,697,378,697,379,697,379,1771,380,697,379,1772,406,1746,379,696,380,1772,405,1747,379,1772,380,1771,380,1773,378,697,379,1772,380,697,379,696,379,697,380,695,380,696,379,697,380,1771,380,696,380,696,379,1772,380,696,380,696,380,696,379,1772,379,698,379,695,380,697,379,697,405,670,379,697,405,670,380,696,380,696,407,669,379,696,380,697,379,696,379,696,380,1772,380,1772,379,1772,379,698,378,697,379,1772,407,669,380,29382,5068,2105,379,1772,379,697,379,696,380,697,379,1772,379,698,378,696,406,671,379,696,380,1771,380,697,379,1772,379,1772,380,696,379,1772,380,1772,406,1746,379,1773,378,1773,405,671,379,1772,379,697,406,668,381,696,379,697,379,697,379,697,379,1771,380,696,380,695,381,1772,380,695,380,697,379,697,379,696,380,696,380,696,405,670,380,696,379,696,407,1746,379,1772,379,696,380,697,379,1771,380,1772,380,1771,380,697,379,696,380,696,406,670,405,670,380,697,378,696,380,697,379,696,380,1772,379,697,379,697,379,696,380,696,379,1772,380,697,379,696,379,697,379,697,378,698,379,696,380,696,379,697,379,696,380,695,381,696,379,696,380,697,378,698,379,697,378,697,406,670,379,696,379,696,380,697,379,1772,380,1771,380,697,405,1746,405,671,379,696,380,1772,380,1772,379,1772,379,1772,380,1772,379,697,379,697,379,696,379,697,379,696,380,696,380,696,380,696,379,696,380,697,379,695,380,697,379,697,379,697,379,696,380,696,379,1773,379,696,380,695,380,696,380,697,379,696,379,697,379,697,379,697,378,698,378,698,378,696,380,696,380,696,380,696,379,696,380,696,391,685,380,696,380,696,379,697,405,670,380,696,380,696,379,696,406,670,407,669,379,1772,380,696,380,696,405,1747,405,670,380,696,380,1771,380,696,380}, //31C + {5043,2130,407,1744,380,696,380,696,405,670,406,1746,406,670,405,670,380,697,379,696,380,1772,405,670,381,1771,380,1771,380,695,381,1772,379,1772,380,1772,380,1771,380,1772,380,695,407,1745,380,696,379,697,379,696,407,669,380,696,406,669,380,1772,380,696,379,697,405,1746,380,696,379,696,380,697,379,1772,385,690,380,696,380,696,380,696,380,696,380,695,380,696,380,696,380,695,407,669,380,696,405,671,380,696,379,696,380,1771,406,1746,407,1745,380,696,379,696,435,1716,406,671,379,29382,5069,2104,380,1772,405,670,380,696,380,697,379,1771,380,696,382,694,379,696,406,670,405,1747,380,696,379,1772,406,1745,381,695,380,1771,381,1771,380,1772,406,1745,380,1772,406,670,379,1772,380,696,380,696,379,696,380,697,379,696,407,669,380,1771,380,696,380,696,406,1745,380,696,380,696,380,696,379,697,379,696,394,682,380,695,407,670,404,672,379,1771,380,1772,380,696,405,670,380,1772,380,1771,380,1772,380,696,379,697,405,670,380,696,380,696,406,670,379,697,379,696,380,695,381,1771,380,696,380,696,380,696,406,669,380,1772,380,695,406,670,380,696,379,697,405,671,405,670,406,670,380,696,379,696,406,671,379,696,380,695,380,696,380,696,380,696,380,696,405,670,380,696,406,669,381,1772,380,1771,380,1771,380,696,405,1747,380,695,380,696,380,1772,379,1772,406,1747,379,1771,380,1772,379,697,379,696,380,695,381,696,379,696,380,696,380,696,405,671,407,669,379,696,380,696,406,670,379,696,380,697,379,696,405,670,380,1772,380,696,380,696,379,696,380,696,406,669,381,696,405,671,379,697,379,696,380,695,380,696,380,696,380,696,380,696,379,697,379,697,379,696,380,696,379,696,407,669,380,696,380,696,379,696,380,696,406,670,380,696,405,1746,380,1772,405,671,379,1772,380,696,380,695,380,1772,380,696,379} //32C + + }}; + +const uint16_t ir_code_fan_daikin[4][407] = { + {5069,2104,406,1746,407,668,408,669,405,670,407,1745,407,668,381,695,381,695,406,670,380,1772,379,696,406,1745,381,1771,380,696,380,1772,379,1772,381,1770,406,1746,407,1745,380,696,406,1745,381,695,380,696,380,696,406,669,407,669,380,696,406,1746,402,673,380,696,406,1746,380,695,407,669,380,696,406,1745,406,670,407,670,379,696,406,670,380,695,407,669,406,669,408,669,406,670,380,695,380,696,407,669,380,695,405,671,407,1745,406,1746,379,1772,380,696,406,670,379,1772,380,696,380,29383,5068,2105,380,1771,407,669,380,696,406,669,380,1772,380,696,380,696,380,695,381,695,380,1771,381,696,380,1771,406,1745,381,695,381,1771,405,1747,379,1772,405,1747,380,1771,395,681,406,1745,381,695,407,669,407,669,380,696,379,696,407,669,380,1771,407,669,406,670,380,1772,406,669,381,695,406,670,380,695,381,695,407,669,407,669,380,696,406,670,380,1771,406,1746,405,670,381,696,405,670,405,1747,380,1771,406,669,408,669,407,668,407,669,380,696,380,696,380,695,380,696,381,695,380,1771,407,669,381,696,406,669,406,670,380,695,381,695,407,669,406,669,381,696,405,670,381,695,380,696,380,696,407,669,405,670,407,669,383,693,407,669,379,696,380,696,406,670,406,669,407,669,381,695,407,669,405,670,380,696,381,696,404,670,381,696,380,695,381,1771,406,1745,381,1770,408,1745,380,695,381,695,380,696,380,696,407,669,406,670,380,695,380,696,380,696,405,671,380,695,407,669,380,695,381,695,381,695,380,696,380,696,406,1745,407,669,380,696,380,696,406,669,381,695,380,696,380,695,406,670,406,670,406,670,380,696,405,670,381,695,380,696,380,696,407,669,380,695,406,670,407,669,407,669,380,695,381,696,406,669,407,669,380,696,380,695,406,1746,406,670,406,1745,406,1745,407,1745,381,695,381,1771,380,1771,407}, //AUTO + {5043,2130,380,1772,380,696,380,696,379,697,379,1771,381,695,381,696,379,696,406,670,380,1771,381,696,379,1771,381,1771,380,696,380,1771,381,1771,380,1772,380,1772,380,1771,380,696,380,1771,381,694,381,696,380,696,380,695,381,695,380,696,380,1772,380,695,380,697,379,1772,380,695,381,695,381,695,380,1772,380,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,695,381,696,380,696,380,696,379,695,381,695,381,1771,380,1771,381,1771,380,697,379,696,380,1771,381,694,381,29382,5044,2130,380,1771,380,697,379,696,380,696,380,1770,381,696,436,640,380,696,380,696,380,1770,381,695,407,1746,379,1771,381,696,380,1771,380,1772,380,1770,381,1772,380,1772,380,696,380,1771,380,696,380,696,380,696,380,697,378,695,381,696,380,1772,379,697,379,696,380,1772,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,695,381,695,380,1771,381,1772,380,695,380,696,380,696,380,1772,379,1772,380,696,380,696,380,696,379,696,380,696,380,696,380,696,379,696,381,695,380,1771,381,695,380,696,380,696,380,695,381,695,381,695,380,696,380,696,380,695,381,695,380,695,381,696,380,696,380,695,381,696,379,697,379,696,380,696,380,695,380,696,380,697,379,696,380,695,380,696,380,697,379,696,380,696,380,695,381,696,379,695,381,696,380,1771,380,1772,380,1772,379,1772,380,1772,380,696,379,1772,380,696,380,696,380,696,379,696,409,667,380,695,381,695,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,696,406,669,381,695,380,696,380,695,381,696,380,696,379,696,380,696,380,696,379,696,406,671,379,696,405,671,380,696,380,695,380,696,380,697,379,696,380,695,380,696,380,696,380,696,380,696,379,697,407,1743,407,669,380,1772,407,1744,409,668,405,1746,406,670,380,695,380}, //HIGH + {5069,2105,405,1746,381,695,380,695,381,696,407,1745,379,696,380,696,380,696,380,696,380,1771,380,697,379,1771,406,1745,407,669,381,1771,380,1772,405,1746,380,1772,380,1772,379,696,380,1772,379,696,407,669,380,695,381,696,380,696,379,696,380,1771,381,696,380,695,380,1772,380,696,380,695,405,672,379,1771,381,695,380,695,407,670,380,696,404,670,381,696,380,696,380,697,404,670,406,670,380,696,406,669,381,696,380,695,380,1771,381,1772,379,1771,381,695,381,695,407,1744,381,695,381,29381,5069,2104,380,1772,380,696,406,670,380,696,379,1772,380,695,406,670,380,696,380,696,380,1772,406,668,406,1746,381,1771,380,696,380,1772,379,1772,380,1771,381,1771,406,1746,406,670,379,1772,380,695,407,669,380,696,380,696,380,696,405,671,379,1772,380,696,380,696,406,1745,380,696,405,671,404,671,380,696,380,696,405,671,380,695,407,669,380,696,380,1771,380,1772,380,695,381,694,407,670,380,1771,381,1771,380,696,406,669,407,669,406,670,380,696,380,696,380,695,406,671,406,669,380,1771,380,696,380,696,380,696,406,670,405,671,379,697,379,697,379,695,406,670,407,669,380,696,380,696,379,696,380,696,380,695,381,695,407,670,379,696,380,696,406,669,406,670,380,696,380,696,380,696,380,695,406,671,405,670,406,669,381,696,379,697,405,670,405,1747,379,1772,405,1746,406,1746,380,1771,395,1757,380,696,380,697,379,695,407,669,380,696,405,671,380,695,380,696,380,696,406,670,406,670,405,670,380,696,408,668,404,671,381,1771,380,697,394,680,380,696,406,670,380,696,380,696,407,668,407,669,380,696,380,695,380,696,380,696,405,671,380,695,381,696,406,669,380,697,379,696,379,696,380,696,380,697,379,696,406,669,408,668,380,695,381,695,380,1772,380,696,380,1772,379,1772,406,670,405,670,381,695,380,696,380}, //MID + {5039,2131,406,1745,380,696,379,697,378,698,378,1772,380,697,379,697,379,696,379,697,404,1748,378,698,379,1771,380,1772,379,698,378,1772,380,1772,379,1773,379,1772,383,1768,380,697,379,1772,379,697,379,696,380,697,379,696,406,671,378,696,380,1773,378,697,379,698,378,1772,379,698,379,696,379,697,379,1772,380,696,379,697,379,697,406,669,380,696,379,697,379,696,380,696,380,696,379,697,379,697,379,696,379,697,380,696,379,1773,379,1772,379,1772,406,670,405,671,379,1772,380,696,380,29382,5043,2130,379,1773,405,670,380,695,381,696,379,1772,379,697,380,696,379,697,379,697,379,1772,405,671,379,1772,380,1771,380,697,379,1772,380,1772,379,1773,379,1772,379,1773,379,696,405,1746,382,694,380,696,379,696,380,696,380,696,380,695,381,1772,379,696,380,696,379,1773,379,696,380,696,380,696,405,671,379,696,380,696,380,696,406,671,378,697,379,1772,380,1772,379,696,380,696,380,696,405,1746,380,1772,379,697,379,697,379,697,379,696,380,696,379,697,379,697,379,696,380,696,379,1773,379,696,379,698,378,696,406,671,379,696,380,696,379,697,379,697,405,670,380,696,379,697,379,697,379,697,406,670,404,671,379,697,378,697,380,696,379,697,379,697,379,696,380,697,379,696,380,696,379,697,379,695,380,697,405,671,379,696,380,696,379,697,379,1773,379,1772,379,1772,380,1772,379,1773,379,696,380,696,379,697,379,697,379,696,380,696,405,671,379,697,379,696,380,696,379,697,379,697,404,672,379,696,379,698,379,696,379,1772,380,696,380,696,379,698,404,670,380,696,379,696,380,697,379,696,379,697,379,697,380,696,379,696,380,697,405,670,405,671,379,697,379,696,380,696,379,696,380,697,378,698,379,697,378,697,379,697,379,696,405,671,379,1772,380,697,379,1772,379,1772,380,696,380,1771,380,1772,379,1773,379} //LOW +}; +const uint16_t ir_code_off_daikin[407] = {5044,2129,408,1744,406,670,380,697,404,671,405,1746,380,696,405,671,406,670,405,671,405,1746,406,670,405,1747,406,1745,406,670,405,1746,405,1746,407,1745,405,1746,406,1746,380,696,380,1771,380,696,405,671,380,695,406,670,407,670,379,696,407,1744,380,696,380,695,407,1746,405,670,406,670,405,671,406,1744,381,696,406,669,405,671,380,696,405,671,406,670,405,670,380,696,407,669,405,670,407,668,381,696,406,670,405,670,406,1746,407,1744,406,1745,381,696,405,670,407,1745,406,669,407,29355,5069,2104,406,1745,380,696,380,696,380,696,380,1771,406,670,379,697,406,669,405,671,406,1745,381,695,380,1772,405,1746,407,669,380,1771,407,1745,406,1745,434,1718,406,1745,381,695,380,1771,381,695,406,670,406,670,406,670,405,671,379,696,403,1749,406,670,406,669,407,1745,405,671,410,664,406,671,407,669,405,670,380,696,406,670,406,670,406,669,407,1745,380,1772,405,670,380,696,380,1771,380,1772,380,1772,405,670,407,669,406,670,380,695,380,696,405,671,406,670,379,696,407,669,406,671,405,669,380,696,380,696,406,669,408,1744,381,695,406,670,406,669,381,695,381,695,380,696,380,696,405,671,405,672,378,696,406,670,380,696,379,696,406,670,406,669,389,687,380,696,380,696,380,695,406,1746,407,669,380,1771,406,670,380,1772,405,670,407,669,406,1745,407,1745,380,1771,380,1771,381,1771,381,1771,380,696,406,669,407,669,405,671,380,695,406,670,380,696,405,670,381,696,380,696,379,696,405,671,380,695,381,695,381,695,380,1772,379,697,379,696,406,670,380,695,406,671,405,670,382,693,408,668,406,670,380,696,406,670,380,695,382,695,404,671,406,670,406,669,380,699,377,696,380,695,407,669,380,696,380,696,380,696,406,670,380,695,380,696,380,696,406,1744,381,1771,407,669,380,696,380,1771,381,1771,381,694,406}; + +size_t getInfraredCode_daikin(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr) { + switch (mode) { + case 0: // Off + *codePtr = &(ir_code_off_daikin[0]); + return 407; + case 1: // Fan Only + *codePtr = &(ir_code_fan_daikin[fan_speed][0]); + return 407; + case 2: // Cool + *codePtr = &(ir_code_cool_daikin[fan_speed][temperature_index][0]); + return 407; + default: // Invalid mode + return 0; + } +} \ No newline at end of file diff --git a/src/ir_codes_daikin.hpp b/src/ir_codes_daikin.hpp new file mode 100644 index 0000000..8b59bbd --- /dev/null +++ b/src/ir_codes_daikin.hpp @@ -0,0 +1,11 @@ +#pragma once +#include +#include + +// IR codes for the remote control +extern const uint16_t ir_code_cool_daikin[4][17][407]; +extern const uint16_t ir_code_fan_daikin[4][407]; +extern const uint16_t ir_code_off_daikin[407]; + +// Function to retrieve the IR code for the given mode, fan speed and temperature +size_t getInfraredCode_daikin(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr); \ No newline at end of file diff --git a/src/ir_codes_york.cpp b/src/ir_codes_york.cpp new file mode 100644 index 0000000..c2706fd --- /dev/null +++ b/src/ir_codes_york.cpp @@ -0,0 +1,147 @@ +#include + +const uint16_t ir_code_cool_york[4][17][91] = { + // Fan Speed Auto + { + // 18 + {8983, 4472, 569, 630, 569, 627, 570, 1671, 569, 629, 568, 1670, 570, 628, 569, 628, 569, 628, 569, 631, 568, 1669, 569, 630, 570, 627, 569, 628, 569, 631, 569, 1668, 569, 1671, 569, 628, 569, 629, 569, 630, 569, 627, 569, 629, 568, 630, 570, 627, 569, 628, 570, 630, 569, 628, 569, 628, 569, 629, 569, 628, 569, 627, 570, 630, 569, 628, 569, 628, 569, 628, 568, 631, 568, 629, 569, 628, 568, 631, 568, 1669, 569, 631, 568, 1669, 569, 1671, 569, 627, 569, 629, 568}, + // 19 + {8978, 4472, 568, 631, 568, 630, 567, 1672, 567, 629, 592, 1648, 568, 629, 567, 629, 567, 631, 566, 631, 568, 1669, 568, 631, 568, 630, 566, 630, 567, 1676, 563, 630, 567, 628, 569, 631, 567, 630, 567, 629, 568, 630, 568, 630, 567, 630, 567, 631, 568, 629, 567, 629, 593, 606, 568, 629, 567, 630, 592, 606, 567, 630, 567, 630, 567, 631, 593, 604, 595, 602, 567, 631, 568, 629, 593, 603, 594, 605, 591, 1646, 594, 603, 593, 1647, 594, 602, 593, 1647, 593, 1645, 593}, + // 20 + {9005, 4470, 571, 629, 569, 626, 571, 1670, 570, 627, 569, 1670, 571, 626, 570, 627, 570, 627, 570, 628, 570, 1668, 570, 629, 569, 627, 570, 626, 570, 1670, 569, 627, 570, 1670, 570, 627, 569, 627, 570, 629, 570, 627, 569, 627, 569, 630, 569, 627, 570, 627, 570, 629, 569, 628, 568, 629, 569, 629, 569, 628, 569, 627, 570, 629, 569, 628, 569, 627, 569, 628, 569, 630, 569, 627, 570, 627, 569, 629, 570, 1667, 570, 629, 570, 1668, 569, 627, 569, 1671, 568, 627, 570}, + // 21 + {8981, 4473, 569, 630, 569, 627, 570, 1670, 570, 627, 570, 1669, 570, 627, 570, 627, 570, 628, 569, 630, 569, 1668, 569, 631, 569, 628, 568, 628, 569, 1671, 570, 1668, 568, 631, 569, 627, 569, 628, 569, 630, 569, 627, 570, 628, 569, 629, 569, 628, 569, 628, 569, 630, 569, 628, 568, 628, 570, 629, 569, 628, 570, 626, 570, 630, 568, 628, 570, 627, 570, 627, 569, 630, 569, 628, 569, 627, 570, 630, 568, 1668, 570, 629, 569, 1669, 569, 628, 569, 630, 569, 1669, 569}, + // 22 + {9008, 4445, 596, 603, 597, 600, 621, 1616, 624, 575, 595, 1643, 595, 605, 621, 575, 595, 602, 596, 603, 622, 1616, 596, 601, 622, 577, 595, 602, 623, 1617, 622, 1616, 596, 1644, 625, 572, 623, 573, 597, 604, 594, 602, 597, 599, 595, 606, 593, 603, 594, 602, 595, 604, 595, 602, 596, 600, 596, 604, 596, 601, 622, 575, 622, 576, 596, 601, 595, 602, 596, 601, 594, 605, 596, 601, 595, 602, 595, 603, 597, 1641, 596, 604, 600, 1637, 596, 601, 594, 604, 596, 601, 596}, + // 23 + {9040, 4413, 599, 601, 598, 598, 625, 1614, 599, 598, 599, 1641, 625, 572, 624, 572, 599, 598, 625, 574, 626, 1611, 625, 574, 599, 598, 626, 1613, 627, 570, 653, 544, 598, 599, 598, 601, 626, 570, 599, 598, 626, 573, 625, 573, 598, 598, 599, 599, 599, 599, 598, 598, 653, 546, 626, 571, 625, 571, 625, 574, 599, 598, 624, 572, 599, 600, 624, 573, 626, 570, 599, 601, 624, 572, 626, 571, 598, 601, 625, 1612, 626, 571, 624, 575, 598, 1639, 599, 1640, 600, 1639, 598}, + // 24 + {9010, 4443, 598, 599, 598, 601, 598, 1639, 598, 601, 599, 1638, 599, 601, 598, 598, 598, 599, 598, 599, 598, 1641, 599, 598, 598, 600, 599, 1639, 598, 601, 598, 598, 599, 1638, 599, 601, 598, 598, 598, 599, 598, 601, 598, 598, 599, 598, 598, 601, 598, 599, 598, 599, 598, 600, 598, 598, 599, 598, 599, 600, 598, 598, 599, 598, 599, 597, 599, 601, 598, 599, 597, 599, 598, 601, 597, 599, 598, 599, 597, 601, 598, 599, 598, 1642, 598, 599, 597, 600, 597, 602, 597}, + // 25 + {9006, 4445, 595, 605, 594, 602, 594, 1646, 595, 602, 594, 1645, 622, 576, 594, 602, 593, 604, 596, 603, 594, 1643, 595, 605, 594, 602, 595, 1645, 594, 603, 594, 1643, 595, 604, 595, 602, 594, 603, 594, 604, 595, 602, 595, 602, 594, 604, 594, 603, 594, 603, 594, 604, 595, 602, 594, 603, 594, 604, 596, 601, 595, 602, 595, 604, 594, 603, 594, 602, 594, 604, 593, 605, 594, 603, 594, 602, 595, 605, 593, 1644, 594, 605, 595, 602, 594, 1643, 594, 605, 594, 1643, 594}, + // 26 + {8981, 4471, 570, 632, 567, 628, 569, 1671, 569, 628, 569, 1671, 569, 627, 569, 628, 568, 629, 569, 630, 569, 1668, 569, 630, 569, 628, 569, 1670, 569, 629, 568, 1668, 569, 1672, 568, 628, 569, 630, 569, 628, 568, 632, 565, 631, 568, 628, 568, 629, 568, 629, 568, 631, 568, 628, 568, 629, 568, 631, 568, 628, 569, 629, 568, 630, 568, 629, 568, 628, 593, 606, 568, 629, 568, 629, 568, 631, 593, 604, 568, 1671, 569, 628, 568, 628, 568, 1672, 568, 628, 569, 628, 568}, + // 27 + {8981, 4472, 569, 631, 568, 629, 594, 1645, 593, 604, 568, 1672, 575, 622, 593, 604, 593, 604, 593, 606, 592, 1645, 593, 606, 593, 605, 567, 1673, 568, 1669, 568, 629, 568, 631, 594, 603, 568, 629, 567, 632, 592, 605, 592, 604, 594, 605, 567, 629, 568, 630, 593, 605, 569, 628, 568, 629, 594, 604, 569, 629, 593, 604, 568, 631, 593, 604, 594, 603, 593, 603, 593, 606, 568, 628, 593, 605, 567, 632, 567, 1670, 594, 605, 568, 630, 592, 604, 593, 1646, 568, 1670, 567}, + // 28 + {8980, 4473, 568, 631, 568, 629, 568, 1671, 567, 630, 567, 1672, 568, 629, 567, 630, 567, 630, 568, 632, 566, 1671, 567, 631, 568, 629, 567, 1673, 567, 1670, 592, 605, 567, 1672, 568, 629, 568, 631, 568, 629, 567, 629, 594, 605, 568, 629, 567, 629, 593, 604, 567, 632, 567, 630, 567, 629, 568, 631, 588, 608, 568, 629, 568, 631, 568, 629, 568, 629, 568, 630, 568, 629, 568, 629, 568, 631, 568, 629, 568, 1671, 568, 630, 567, 629, 568, 629, 592, 1648, 567, 629, 568}, + // 29 + {8980, 4472, 569, 630, 569, 628, 569, 1671, 568, 628, 568, 1672, 568, 628, 569, 628, 568, 629, 568, 631, 569, 1668, 569, 631, 567, 629, 568, 1671, 568, 1670, 568, 1671, 569, 628, 568, 629, 567, 631, 568, 629, 568, 628, 568, 631, 568, 628, 568, 629, 568, 629, 568, 632, 567, 629, 568, 629, 568, 630, 568, 629, 568, 629, 567, 632, 567, 629, 569, 628, 568, 631, 568, 629, 567, 629, 568, 631, 567, 630, 567, 1672, 567, 629, 568, 630, 567, 629, 568, 631, 568, 1670, 567}, + // 30 + {9004, 4447, 594, 604, 595, 602, 594, 1646, 593, 603, 594, 1646, 595, 602, 593, 603, 594, 603, 594, 604, 594, 1644, 594, 605, 593, 604, 594, 1645, 595, 1642, 595, 1646, 594, 1643, 595, 602, 594, 605, 594, 602, 595, 602, 594, 605, 594, 602, 594, 603, 593, 606, 593, 603, 595, 602, 594, 605, 595, 602, 594, 602, 595, 605, 594, 602, 595, 602, 594, 605, 595, 602, 593, 603, 595, 604, 594, 603, 594, 605, 592, 1645, 593, 603, 595, 603, 594, 605, 594, 602, 594, 603, 593} + }, + // Fan Speed High + { + // 18 + {9010, 4441, 598, 601, 654, 543, 598, 1641, 652, 545, 654, 1585, 598, 599, 652, 544, 654, 543, 598, 600, 652, 1585, 598, 601, 598, 1639, 652, 547, 598, 598, 652, 1585, 598, 1642, 654, 542, 653, 545, 653, 544, 652, 544, 598, 601, 598, 599, 652, 544, 598, 598, 598, 604, 648, 546, 598, 598, 653, 545, 650, 547, 598, 598, 654, 544, 598, 599, 598, 598, 652, 547, 652, 545, 598, 597, 599, 600, 654, 543, 652, 544, 652, 547, 653, 1584, 598, 1642, 654, 542, 650, 1589, 652}, + // 19 + {9008, 4442, 598, 601, 598, 599, 597, 1640, 597, 602, 597, 1640, 597, 602, 597, 604, 593, 599, 597, 601, 598, 1640, 597, 599, 598, 1641, 597, 599, 599, 1641, 597, 599, 598, 599, 597, 601, 597, 600, 597, 599, 598, 601, 598, 599, 597, 599, 598, 601, 597, 600, 597, 599, 597, 602, 597, 599, 598, 599, 597, 601, 598, 599, 597, 599, 597, 601, 598, 599, 597, 599, 598, 601, 597, 599, 598, 599, 597, 602, 597, 599, 598, 599, 597, 1642, 598, 1639, 598, 601, 598, 599, 598}, + // 20 + {9061, 4389, 598, 601, 599, 598, 650, 1587, 598, 601, 650, 1587, 598, 601, 598, 598, 651, 546, 651, 547, 652, 1586, 598, 599, 650, 1589, 650, 546, 598, 1641, 651, 546, 598, 1641, 598, 599, 598, 598, 598, 601, 652, 544, 599, 598, 598, 601, 598, 598, 598, 599, 598, 601, 598, 599, 598, 598, 615, 584, 598, 599, 597, 599, 598, 601, 598, 599, 597, 599, 653, 543, 598, 601, 598, 598, 650, 546, 599, 600, 598, 598, 650, 547, 598, 1641, 599, 597, 598, 1642, 652, 1584, 599}, + // 21 + {9008, 4442, 598, 602, 597, 599, 597, 1640, 598, 601, 598, 1639, 598, 601, 598, 599, 597, 599, 598, 602, 596, 1640, 598, 599, 651, 1589, 598, 599, 598, 1642, 597, 1639, 598, 601, 598, 600, 596, 599, 598, 601, 598, 599, 598, 598, 598, 601, 598, 599, 597, 599, 621, 578, 597, 600, 597, 599, 598, 601, 598, 598, 598, 598, 650, 549, 598, 599, 598, 598, 598, 599, 598, 601, 650, 547, 597, 599, 650, 549, 597, 599, 597, 599, 598, 1641, 598, 599, 598, 1642, 597, 600, 597}, + // 22 + {9064, 4386, 654, 546, 652, 545, 652, 1584, 598, 601, 598, 1639, 652, 547, 652, 545, 680, 516, 654, 545, 598, 1639, 652, 544, 652, 1587, 654, 543, 653, 1586, 653, 1584, 653, 1586, 598, 599, 654, 545, 652, 544, 652, 545, 598, 601, 598, 599, 597, 599, 598, 599, 653, 545, 652, 545, 683, 514, 597, 601, 598, 598, 635, 562, 651, 548, 653, 544, 633, 563, 655, 544, 598, 600, 597, 598, 598, 601, 650, 546, 654, 543, 598, 601, 598, 1639, 653, 544, 680, 519, 597, 1639, 652}, + // 23 + {9010, 4443, 597, 602, 598, 599, 597, 1640, 597, 602, 598, 1640, 597, 602, 597, 599, 598, 599, 598, 601, 598, 1639, 598, 599, 598, 1642, 598, 1642, 597, 600, 598, 599, 597, 600, 597, 601, 598, 599, 598, 599, 597, 602, 597, 600, 597, 599, 598, 601, 598, 599, 598, 599, 597, 602, 597, 600, 597, 599, 598, 601, 598, 599, 597, 599, 598, 602, 597, 599, 598, 599, 597, 602, 597, 599, 598, 599, 597, 602, 597, 599, 598, 599, 597, 1643, 597, 599, 598, 599, 597, 601, 598}, + // 24 + {9009, 4443, 598, 601, 598, 599, 597, 1640, 598, 601, 598, 1639, 598, 601, 598, 599, 597, 600, 597, 602, 597, 1640, 598, 599, 598, 1642, 598, 1642, 597, 599, 598, 600, 597, 1642, 597, 600, 597, 599, 598, 601, 598, 600, 597, 599, 598, 601, 598, 599, 597, 600, 598, 601, 598, 598, 598, 599, 598, 601, 598, 599, 597, 599, 598, 601, 597, 600, 597, 600, 598, 599, 597, 601, 598, 599, 598, 599, 597, 602, 598, 599, 597, 600, 597, 601, 598, 1640, 598, 1642, 598, 1640, 602}, + // 25 + {9063, 4387, 654, 545, 599, 598, 653, 1585, 653, 546, 679, 1557, 653, 547, 653, 543, 598, 599, 598, 600, 652, 1585, 653, 545, 652, 1587, 654, 1586, 598, 599, 597, 1640, 653, 545, 656, 541, 654, 543, 655, 544, 598, 598, 653, 544, 598, 601, 653, 543, 654, 543, 652, 547, 656, 540, 598, 599, 653, 545, 598, 599, 654, 546, 594, 601, 653, 544, 652, 544, 652, 545, 598, 601, 598, 599, 652, 543, 599, 601, 598, 599, 597, 599, 598, 601, 598, 1639, 598, 1642, 653, 544, 653}, + // 26 + {9011, 4442, 598, 602, 597, 599, 598, 1639, 598, 601, 598, 1639, 598, 602, 597, 599, 598, 599, 598, 601, 598, 1639, 598, 599, 597, 1642, 598, 1641, 598, 599, 598, 1639, 598, 1642, 598, 599, 598, 600, 599, 599, 597, 599, 598, 601, 598, 599, 598, 598, 598, 600, 597, 601, 598, 599, 597, 599, 598, 601, 598, 599, 598, 598, 598, 601, 598, 599, 598, 598, 598, 601, 598, 599, 598, 598, 599, 600, 598, 599, 598, 599, 597, 602, 597, 599, 598, 1639, 599, 601, 597, 1640, 598}, + // 27 + {9031, 4442, 599, 600, 599, 597, 600, 1640, 599, 598, 599, 1641, 601, 595, 600, 597, 599, 598, 599, 600, 599, 1638, 599, 600, 599, 1638, 599, 1640, 599, 1638, 599, 601, 598, 598, 599, 597, 599, 600, 599, 598, 599, 597, 599, 600, 599, 598, 598, 597, 600, 598, 598, 600, 599, 598, 599, 598, 599, 600, 599, 597, 599, 598, 599, 599, 600, 598, 599, 597, 599, 600, 599, 597, 600, 597, 599, 600, 599, 598, 598, 598, 599, 600, 599, 598, 599, 1638, 599, 600, 599, 598, 599}, + // 28 + {9011, 4441, 600, 600, 604, 592, 599, 1638, 600, 600, 599, 1639, 598, 600, 599, 598, 599, 598, 599, 600, 598, 1638, 600, 597, 599, 1641, 599, 1641, 598, 1638, 599, 598, 598, 1642, 599, 598, 598, 601, 598, 599, 598, 598, 599, 600, 599, 598, 599, 597, 599, 598, 598, 600, 599, 598, 598, 599, 598, 600, 599, 598, 599, 597, 599, 601, 598, 599, 598, 600, 596, 601, 599, 597, 599, 599, 598, 600, 599, 597, 599, 598, 599, 600, 599, 598, 599, 598, 598, 1641, 599, 1638, 599}, + // 29 + {9011, 4442, 598, 601, 653, 544, 652, 1585, 599, 601, 598, 1639, 597, 602, 598, 599, 598, 598, 653, 546, 599, 1638, 653, 544, 598, 1643, 598, 1641, 598, 1640, 652, 1588, 652, 545, 597, 599, 598, 601, 598, 598, 680, 518, 598, 600, 653, 544, 598, 598, 598, 599, 652, 547, 652, 545, 598, 598, 598, 601, 598, 598, 599, 598, 652, 547, 599, 598, 598, 598, 599, 600, 598, 599, 598, 598, 599, 600, 652, 545, 598, 598, 599, 600, 599, 599, 597, 599, 598, 1641, 598, 599, 651}, + // 30 + {9009, 4442, 598, 601, 598, 598, 598, 1640, 598, 601, 597, 1640, 597, 602, 597, 599, 598, 599, 597, 601, 598, 1640, 598, 599, 597, 1642, 598, 1642, 598, 1639, 598, 1642, 597, 1640, 598, 599, 597, 602, 597, 603, 594, 599, 598, 601, 597, 599, 598, 599, 597, 602, 597, 599, 598, 599, 597, 601, 598, 598, 599, 598, 598, 601, 598, 599, 597, 599, 598, 602, 597, 599, 598, 598, 598, 602, 597, 599, 597, 600, 597, 602, 597, 599, 598, 599, 597, 599, 598, 601, 598, 1639, 597} + }, + // Fan Speed Med + { + // 18 + {9027, 4441, 654, 546, 598, 598, 598, 1640, 598, 600, 652, 1585, 598, 601, 598, 598, 598, 598, 655, 544, 653, 1584, 652, 1587, 652, 545, 598, 599, 597, 601, 652, 1585, 598, 1641, 598, 599, 597, 599, 597, 600, 599, 599, 651, 545, 651, 548, 597, 599, 651, 545, 598, 601, 653, 543, 652, 544, 599, 600, 653, 544, 652, 544, 652, 547, 597, 600, 597, 599, 597, 599, 598, 600, 678, 519, 653, 543, 598, 601, 598, 599, 650, 546, 598, 1641, 598, 1639, 598, 601, 598, 599, 653}, + // 19 + {9093, 4359, 598, 601, 654, 543, 652, 1584, 599, 601, 661, 1576, 681, 518, 652, 544, 650, 547, 653, 546, 652, 1585, 652, 1587, 652, 544, 654, 543, 654, 1586, 652, 545, 598, 598, 653, 546, 598, 599, 680, 516, 653, 545, 654, 543, 652, 545, 654, 544, 654, 544, 652, 544, 654, 545, 652, 544, 598, 599, 653, 546, 680, 516, 652, 544, 598, 602, 654, 542, 653, 544, 654, 545, 654, 542, 598, 599, 682, 516, 654, 543, 652, 545, 598, 1641, 655, 542, 597, 1642, 598, 1639, 599}, + // 20 + {9063, 4387, 598, 601, 598, 599, 652, 1584, 652, 547, 652, 1585, 598, 601, 652, 544, 653, 544, 653, 545, 651, 1586, 651, 1588, 598, 599, 598, 599, 653, 1586, 597, 599, 652, 1587, 654, 543, 652, 545, 651, 547, 652, 545, 653, 543, 598, 601, 653, 543, 598, 599, 597, 602, 652, 544, 598, 598, 598, 602, 651, 544, 598, 599, 598, 600, 652, 545, 653, 543, 650, 546, 654, 546, 597, 599, 653, 543, 651, 547, 652, 545, 598, 599, 598, 1641, 651, 546, 597, 1641, 652, 545, 653}, + // 21 + {9009, 4441, 599, 600, 598, 599, 598, 1639, 598, 601, 598, 1639, 598, 601, 597, 599, 598, 599, 597, 602, 597, 1639, 598, 1642, 598, 599, 598, 599, 597, 1642, 598, 1640, 597, 601, 598, 599, 597, 600, 597, 602, 597, 599, 597, 600, 597, 601, 598, 599, 597, 599, 598, 601, 597, 599, 598, 598, 598, 601, 598, 599, 598, 599, 597, 601, 598, 599, 598, 598, 598, 599, 598, 601, 597, 599, 598, 598, 598, 601, 597, 599, 598, 599, 598, 1642, 597, 599, 597, 602, 597, 1639, 598}, + // 22 + {9009, 4441, 599, 600, 598, 599, 598, 1639, 598, 601, 598, 1639, 598, 601, 597, 599, 598, 599, 597, 602, 597, 1639, 598, 1642, 598, 599, 598, 599, 597, 1642, 598, 1640, 597, 601, 598, 599, 597, 600, 597, 602, 597, 599, 597, 600, 597, 601, 598, 599, 597, 599, 598, 601, 597, 599, 598, 598, 598, 601, 598, 599, 598, 599, 597, 601, 598, 599, 598, 598, 598, 599, 598, 601, 597, 599, 598, 598, 598, 601, 597, 599, 598, 599, 598, 1642, 597, 599, 597, 602, 597, 1639, 598}, + // 23 + {9029, 4441, 598, 601, 597, 599, 650, 1590, 598, 598, 598, 1641, 598, 599, 651, 545, 598, 598, 599, 601, 598, 1639, 598, 1642, 597, 599, 650, 1589, 598, 599, 597, 598, 599, 601, 597, 599, 598, 598, 598, 602, 597, 599, 598, 598, 598, 600, 598, 599, 598, 598, 598, 600, 599, 598, 598, 598, 598, 602, 597, 598, 599, 598, 598, 601, 598, 598, 598, 599, 598, 598, 598, 601, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 598, 601, 598, 1640, 597, 1641, 598, 1639, 598}, + // 24 + {9010, 4441, 598, 601, 597, 599, 598, 1639, 598, 601, 598, 1639, 598, 601, 598, 598, 598, 599, 598, 601, 598, 1639, 598, 1641, 599, 598, 598, 1641, 652, 545, 598, 598, 598, 1642, 598, 599, 598, 599, 597, 601, 598, 599, 598, 599, 597, 601, 598, 599, 597, 600, 597, 602, 597, 599, 598, 599, 598, 601, 651, 545, 598, 599, 597, 601, 652, 545, 598, 599, 597, 599, 598, 601, 599, 597, 598, 599, 598, 600, 599, 598, 598, 599, 598, 601, 598, 1639, 598, 1641, 598, 599, 598}, + // 25 + {9008, 4441, 598, 601, 598, 598, 598, 1639, 651, 548, 599, 1639, 598, 600, 598, 599, 652, 545, 598, 601, 597, 1640, 598, 1640, 653, 544, 598, 1641, 653, 544, 651, 1586, 652, 548, 597, 599, 653, 543, 652, 546, 653, 544, 598, 598, 598, 600, 598, 599, 598, 598, 650, 549, 652, 545, 597, 599, 651, 548, 653, 543, 598, 599, 598, 601, 650, 547, 597, 599, 652, 544, 651, 547, 598, 599, 598, 599, 651, 547, 598, 598, 652, 545, 598, 600, 651, 1586, 651, 548, 598, 1638, 653}, + // 26 + {9009, 4441, 598, 602, 598, 599, 597, 1639, 598, 601, 598, 1639, 598, 601, 598, 598, 598, 599, 650, 549, 598, 1639, 598, 1641, 598, 599, 598, 1641, 598, 599, 651, 1586, 651, 1588, 599, 598, 653, 546, 598, 598, 651, 546, 598, 601, 598, 598, 598, 599, 598, 599, 597, 601, 598, 599, 597, 599, 598, 601, 598, 599, 597, 599, 598, 601, 598, 599, 598, 598, 598, 601, 598, 598, 598, 599, 651, 547, 651, 546, 598, 598, 598, 601, 598, 598, 599, 1639, 598, 600, 598, 599, 598}, + // 27 + {9007, 4441, 598, 601, 597, 599, 598, 1638, 599, 601, 598, 1638, 598, 601, 598, 599, 597, 599, 598, 601, 598, 1639, 598, 1641, 598, 598, 598, 1642, 597, 1640, 597, 599, 598, 601, 598, 599, 598, 598, 598, 600, 599, 598, 598, 599, 598, 600, 598, 598, 598, 598, 599, 601, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 598, 601, 598, 599, 597, 599, 597, 599, 598, 600, 598, 599, 597, 599, 598, 601, 597, 599, 598, 599, 597, 601, 598, 598, 598, 1641, 598, 1639, 598}, + // 28 + {9007, 4441, 598, 601, 597, 599, 598, 1638, 599, 601, 598, 1638, 598, 601, 598, 599, 597, 599, 598, 601, 598, 1639, 598, 1641, 598, 598, 598, 1642, 597, 1640, 597, 599, 598, 601, 598, 599, 598, 598, 598, 600, 599, 598, 598, 599, 598, 600, 598, 598, 598, 598, 599, 601, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 598, 601, 598, 599, 597, 599, 597, 599, 598, 600, 598, 599, 597, 599, 598, 601, 597, 599, 598, 599, 597, 601, 598, 598, 598, 1641, 598, 1639, 598}, + // 29 + {9062, 4386, 599, 601, 598, 599, 653, 1583, 652, 547, 652, 1585, 653, 546, 651, 546, 598, 599, 597, 602, 651, 1585, 650, 1590, 649, 548, 651, 1587, 598, 1640, 652, 1587, 598, 599, 651, 545, 598, 601, 598, 599, 598, 598, 598, 601, 598, 598, 597, 599, 598, 599, 600, 598, 598, 598, 598, 599, 598, 601, 597, 599, 597, 599, 598, 601, 598, 599, 597, 599, 598, 600, 598, 599, 598, 599, 597, 601, 597, 599, 598, 599, 598, 601, 597, 599, 598, 598, 598, 601, 598, 1639, 597}, + // 30 + {9010, 4441, 599, 601, 598, 599, 597, 1640, 598, 601, 598, 1639, 598, 601, 598, 599, 649, 547, 598, 601, 598, 1639, 598, 1641, 598, 599, 598, 1642, 598, 1639, 598, 1641, 598, 1639, 598, 599, 598, 601, 598, 599, 597, 599, 598, 601, 598, 599, 598, 598, 598, 601, 598, 599, 598, 598, 599, 601, 597, 599, 598, 599, 597, 602, 597, 599, 598, 599, 597, 601, 598, 598, 598, 598, 651, 548, 598, 599, 597, 599, 650, 549, 598, 598, 598, 599, 598, 598, 598, 601, 598, 598, 598} + }, + // Fan Speed Low + { + // 18 + {9007, 4439, 600, 600, 598, 597, 600, 1636, 600, 599, 599, 1637, 599, 599, 600, 596, 599, 597, 600, 599, 599, 1637, 599, 597, 600, 599, 599, 596, 600, 597, 599, 1639, 599, 1638, 598, 599, 600, 599, 597, 597, 599, 598, 600, 597, 599, 596, 600, 599, 599, 597, 599, 597, 599, 599, 600, 596, 600, 596, 600, 598, 600, 596, 600, 597, 599, 599, 600, 597, 599, 596, 600, 599, 599, 596, 600, 596, 600, 599, 599, 596, 600, 597, 599, 1639, 600, 1636, 600, 1639, 599, 597, 599}, + // 19 + {9008, 4439, 600, 599, 599, 597, 600, 1637, 599, 599, 600, 1637, 599, 599, 600, 596, 600, 597, 600, 598, 600, 1637, 599, 598, 598, 600, 599, 596, 600, 1640, 599, 596, 601, 596, 599, 599, 600, 597, 599, 596, 600, 598, 600, 597, 599, 597, 600, 599, 599, 597, 599, 597, 599, 597, 599, 599, 600, 596, 600, 596, 600, 599, 599, 597, 599, 597, 600, 599, 599, 596, 599, 596, 600, 599, 600, 596, 600, 597, 599, 599, 599, 597, 599, 1637, 599, 1639, 600, 597, 599, 1638, 600}, + // 20 + {9007, 4440, 599, 600, 654, 543, 654, 1582, 651, 548, 597, 1639, 653, 545, 653, 544, 652, 544, 598, 601, 598, 1638, 654, 542, 653, 545, 599, 598, 654, 1584, 654, 542, 652, 1584, 653, 546, 653, 544, 652, 544, 598, 601, 654, 542, 653, 543, 654, 544, 653, 544, 653, 543, 654, 545, 652, 544, 653, 543, 654, 544, 598, 599, 598, 598, 653, 545, 651, 546, 597, 599, 653, 545, 652, 544, 652, 543, 652, 547, 598, 599, 652, 543, 598, 1641, 653, 1582, 654, 546, 653, 542, 654}, + // 21 + {9006, 4439, 599, 600, 598, 598, 599, 1638, 598, 601, 598, 1638, 599, 600, 598, 598, 598, 598, 599, 600, 598, 1638, 599, 598, 598, 600, 598, 598, 598, 1641, 598, 1638, 599, 598, 598, 600, 598, 598, 599, 597, 599, 600, 598, 598, 598, 598, 598, 600, 599, 598, 598, 598, 598, 600, 599, 597, 599, 597, 599, 599, 599, 598, 598, 597, 599, 600, 598, 598, 598, 598, 598, 600, 598, 598, 598, 598, 598, 600, 598, 598, 599, 597, 599, 1640, 598, 598, 598, 1640, 599, 1638, 599}, + // 22 + {9059, 4389, 597, 601, 653, 544, 651, 1585, 651, 548, 651, 1586, 652, 547, 596, 599, 653, 544, 651, 547, 653, 1584, 651, 545, 651, 548, 597, 600, 651, 1588, 648, 1588, 651, 1588, 653, 544, 652, 544, 650, 548, 652, 544, 653, 543, 598, 601, 598, 598, 652, 545, 597, 602, 651, 544, 651, 546, 650, 548, 597, 599, 652, 545, 652, 546, 653, 543, 597, 599, 652, 545, 652, 546, 601, 595, 653, 543, 598, 601, 651, 545, 652, 545, 597, 1641, 597, 599, 598, 1641, 628, 569, 651}, + // 23 + {9006, 4440, 599, 600, 598, 599, 597, 1639, 598, 600, 598, 1638, 599, 600, 599, 598, 598, 599, 598, 600, 598, 1639, 598, 598, 599, 600, 598, 1639, 598, 601, 598, 598, 598, 599, 598, 600, 598, 598, 599, 598, 598, 600, 598, 598, 599, 598, 598, 601, 598, 599, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 599, 599, 599, 598, 598, 598, 598, 601, 598, 599, 597, 599, 598, 600, 598, 598, 599, 598, 598, 600, 599, 597, 599, 1638, 599, 600, 598, 598, 599, 1640, 598}, + // 24 + {9007, 4440, 598, 601, 597, 599, 598, 1638, 599, 600, 598, 1638, 598, 601, 598, 599, 597, 599, 597, 601, 598, 1638, 598, 599, 598, 600, 598, 1639, 598, 601, 597, 598, 599, 1638, 598, 601, 597, 599, 598, 598, 603, 595, 598, 598, 598, 599, 597, 601, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 597, 602, 597, 599, 597, 599, 598, 600, 598, 599, 598, 598, 598, 601, 597, 599, 598, 598, 598, 1641, 598, 599, 597, 599, 597, 601, 597}, + // 25 + {9060, 4389, 599, 601, 597, 599, 598, 1639, 598, 600, 598, 1639, 598, 601, 597, 599, 598, 599, 597, 601, 598, 1638, 598, 599, 598, 600, 599, 1638, 598, 601, 597, 1639, 598, 599, 598, 601, 597, 599, 598, 598, 598, 600, 599, 598, 597, 599, 597, 601, 598, 599, 597, 599, 597, 600, 599, 598, 598, 598, 598, 601, 598, 599, 598, 598, 598, 601, 598, 598, 598, 599, 597, 601, 598, 598, 598, 599, 598, 600, 598, 599, 598, 598, 598, 599, 598, 1641, 598, 1640, 599, 1639, 598}, + // 26 + {9006, 4440, 598, 601, 598, 599, 597, 1639, 598, 601, 651, 1586, 597, 601, 598, 598, 598, 599, 598, 601, 597, 1639, 598, 598, 598, 601, 598, 1638, 598, 600, 598, 1639, 597, 1641, 598, 598, 598, 598, 598, 601, 597, 599, 597, 599, 598, 601, 649, 546, 599, 598, 598, 601, 597, 599, 597, 598, 598, 601, 598, 598, 598, 598, 598, 601, 597, 599, 598, 598, 598, 599, 597, 601, 598, 598, 598, 599, 597, 601, 598, 598, 598, 598, 598, 600, 598, 1638, 598, 1640, 599, 598, 598}, + // 27 + {9060, 4387, 680, 519, 598, 598, 598, 1639, 598, 600, 598, 1639, 598, 600, 652, 545, 597, 599, 651, 547, 653, 1584, 653, 543, 598, 600, 653, 1584, 652, 1587, 598, 598, 654, 543, 600, 598, 654, 542, 599, 598, 654, 544, 653, 544, 652, 544, 651, 547, 651, 546, 652, 544, 598, 600, 654, 542, 651, 546, 650, 548, 651, 545, 598, 598, 598, 600, 654, 542, 599, 597, 655, 544, 653, 543, 652, 544, 655, 543, 598, 598, 598, 599, 654, 542, 651, 1586, 653, 544, 598, 1640, 652}, + // 28 + {9012, 4440, 600, 599, 600, 597, 599, 1638, 600, 599, 599, 1639, 599, 599, 600, 597, 600, 597, 599, 599, 600, 1638, 599, 597, 600, 599, 600, 1637, 600, 1640, 599, 597, 600, 1640, 599, 597, 600, 597, 599, 600, 600, 596, 600, 597, 600, 600, 598, 597, 600, 597, 600, 599, 600, 597, 599, 597, 600, 599, 600, 596, 600, 597, 600, 599, 599, 597, 600, 597, 600, 597, 599, 599, 600, 597, 599, 598, 599, 599, 600, 596, 600, 598, 599, 599, 600, 1637, 600, 599, 599, 597, 600}, + // 29 + {9063, 4386, 599, 600, 599, 598, 598, 1638, 598, 600, 599, 1638, 599, 600, 598, 598, 599, 598, 598, 601, 597, 1639, 599, 597, 599, 600, 599, 1638, 652, 1587, 599, 1638, 599, 600, 598, 598, 598, 599, 598, 600, 599, 597, 599, 598, 599, 600, 682, 514, 598, 598, 653, 546, 599, 598, 598, 597, 599, 600, 599, 598, 598, 599, 652, 546, 651, 546, 598, 598, 599, 597, 599, 600, 653, 543, 598, 597, 600, 600, 652, 544, 599, 597, 599, 600, 599, 597, 599, 1640, 599, 1637, 600}, + // 30 + {9007, 4442, 597, 602, 597, 600, 596, 1640, 653, 545, 598, 1640, 653, 546, 596, 600, 597, 599, 597, 602, 597, 1640, 597, 600, 596, 602, 597, 1639, 598, 1642, 597, 1640, 597, 1641, 599, 599, 597, 601, 597, 600, 597, 599, 597, 601, 598, 599, 597, 599, 653, 544, 653, 545, 598, 598, 655, 541, 599, 600, 655, 541, 598, 599, 597, 601, 598, 599, 598, 598, 598, 601, 597, 599, 654, 543, 597, 601, 598, 598, 598, 599, 597, 600, 655, 543, 598, 599, 597, 1642, 598, 599, 597} + } +}; + +const uint16_t ir_code_fan_york[4][91] = { + // there is no auto in fan sub mid for auto + {9015, 4439, 599, 599, 625, 573, 599, 1640, 598, 600, 599, 1639, 599, 600, 599, 598, 599, 598, 626, 571, 599, 600, 599, 1639, 598, 601, 627, 1611, 625, 574, 598, 598, 599, 1639, 626, 573, 598, 598, 599, 598, 625, 574, 599, 598, 599, 597, 599, 601, 626, 571, 598, 599, 598, 600, 626, 572, 598, 598, 654, 545, 598, 599, 627, 570, 598, 598, 599, 600, 626, 571, 625, 571, 627, 573, 598, 598, 625, 572, 598, 600, 599, 599, 599, 1641, 628, 569, 598, 1639, 626, 573, 626}, // AUTO + {9038, 4414, 598, 598, 626, 574, 628, 1609, 625, 574, 598, 1639, 599, 600, 598, 599, 626, 572, 598, 599, 625, 573, 627, 569, 599, 1641, 626, 1612, 626, 573, 599, 598, 626, 1612, 598, 601, 626, 571, 598, 598, 626, 574, 597, 599, 653, 543, 599, 601, 597, 599, 598, 599, 625, 574, 624, 572, 625, 572, 598, 601, 624, 572, 627, 570, 598, 599, 626, 573, 625, 572, 627, 569, 626, 574, 599, 597, 598, 599, 598, 601, 598, 599, 598, 1642, 626, 570, 625, 1612, 624, 1617, 598}, // HIGH + {9015, 4439, 599, 599, 625, 573, 599, 1640, 598, 600, 599, 1639, 599, 600, 599, 598, 599, 598, 626, 571, 599, 600, 599, 1639, 598, 601, 627, 1611, 625, 574, 598, 598, 599, 1639, 626, 573, 598, 598, 599, 598, 625, 574, 599, 598, 599, 597, 599, 601, 626, 571, 598, 599, 598, 600, 626, 572, 598, 598, 654, 545, 598, 599, 627, 570, 598, 598, 599, 600, 626, 571, 625, 571, 627, 573, 598, 598, 625, 572, 598, 600, 599, 599, 599, 1641, 628, 569, 598, 1639, 626, 573, 626}, // MID + {9009, 4443, 597, 601, 596, 603, 596, 1642, 596, 603, 623, 1615, 596, 603, 595, 601, 571, 626, 572, 625, 597, 603, 596, 1642, 596, 1644, 596, 1642, 571, 628, 571, 626, 596, 1645, 596, 600, 572, 625, 624, 576, 571, 625, 572, 626, 570, 628, 571, 626, 571, 626, 571, 626, 573, 626, 571, 626, 570, 627, 570, 628, 571, 627, 570, 626, 571, 629, 570, 626, 571, 625, 571, 629, 570, 627, 569, 628, 569, 633, 567, 626, 570, 627, 570, 1670, 570, 627, 569, 628, 569, 1670, 570} // LOW +}; +const uint16_t ir_code_off_york[91] = {9007, 4444, 650, 546, 597, 602, 649, 1588, 597, 602, 596, 601, 596, 600, 597, 603, 596, 601, 596, 600, 596, 603, 596, 1641, 596, 1643, 650, 548, 596, 1644, 677, 519, 597, 1641, 596, 604, 648, 548, 596, 600, 649, 550, 650, 547, 597, 600, 596, 603, 597, 604, 592, 601, 596, 602, 633, 564, 650, 547, 596, 603, 596, 601, 596, 600, 596, 601, 596, 603, 650, 547, 596, 601, 650, 548, 596, 601, 596, 600, 597, 602, 597, 600, 596, 601, 596, 1643, 597, 600, 597, 1643, 649}; + +size_t getInfraredCode_york(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr) +{ + switch (mode) + { + case 0: // Off + *codePtr = &(ir_code_off_york[0]); + return 91; + case 1: // Fan Only + *codePtr = &(ir_code_fan_york[fan_speed][0]); + return 91; + case 2: // Cool + *codePtr = &(ir_code_cool_york[fan_speed][temperature_index][0]); + return 91; + default: // Invalid mode + return 0; + } +} \ No newline at end of file diff --git a/src/ir_codes_york.hpp b/src/ir_codes_york.hpp new file mode 100644 index 0000000..d80d9a7 --- /dev/null +++ b/src/ir_codes_york.hpp @@ -0,0 +1,11 @@ +#pragma once +#include +#include + +// IR codes for the remote control +extern const uint16_t ir_code_cool_york[4][17][91]; +extern const uint16_t ir_code_fan_york[4][91]; +extern const uint16_t ir_code_off_york[91]; + +// Function to retrieve the IR code for the given mode, fan speed and temperature +size_t getInfraredCode_york(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr); \ No newline at end of file diff --git a/src/ise_display.cpp b/src/ise_display.cpp index 70aad6e..097e3c7 100644 --- a/src/ise_display.cpp +++ b/src/ise_display.cpp @@ -1,23 +1,34 @@ #include -ISEDisplay::ISEDisplay(HardwareSerial *adapter) : ESPMegaDisplay(adapter, 115200, 912600, 4, 17) +ISEDisplay::ISEDisplay(HardwareSerial *adapter, const uint8_t *light_array, uint8_t row, uint8_t column) : ESPMegaDisplay(adapter, 115200, 912600, 4, 17) { + this->light_array = light_array; + this->row = row; + this->column = column; } -// Work left -// TODO : Implement -// debug to work -void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCard, ClimateCard *climateCard) +void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCard, ClimateCard *climateCard_daikin, ClimateCard *climateCard_york, RemoteVariable *pm_switch, RemoteVariable *pm_fan_speed, RemoteVariable *ac_lock, RemoteVariable *pm_lock, ESPMegaIoT *iot) { + this->iot = iot; this->inputCard = inputCard; this->outputCard = outputCard; - this->climateCard = climateCard; + this->climateCard_daikin = climateCard_daikin; + this->climateCard_york = climateCard_york; + this->pm_switch = pm_switch; + this->pm_lock = pm_lock; + this->ac_lock = ac_lock; + this->remote_pm_fan_speed = pm_fan_speed; auto bindedHandlePWMChange = std::bind(&ISEDisplay::handlePWMChange, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); auto bindedHandleACChange = std::bind(&ISEDisplay::handleACChange, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); auto bindedHandleTouch = std::bind(&ISEDisplay::handleTouch, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); this->outputCallbackHandle = this->outputCard->registerChangeCallback(bindedHandlePWMChange); - this->climateCallbackHandle = this->climateCard->registerChangeCallback(bindedHandleACChange); - this->user_mode = 1; // initialized to cool by default - this->pm_fan_speed = 10; + this->climateCallbackHandle = this->climateCard_daikin->registerChangeCallback(bindedHandleACChange); + // this->climateCallbackHandle = this->climateCard_york->registerChangeCallback(bindedHandleACChange); + this->user_mode = 2; // initialized to cool by default + this->ac_lock_state = strcmp(ac_lock->getValue(), "on") == 0; // initialized to get value + this->pm_lock_state = strcmp(pm_lock->getValue(), "on") == 0; // initialized to get value + this->pm_fan_speed = 18; + remote_pm_fan_speed->setIntValue(this->pm_fan_speed); + // remote_pm_fan_speed->setValue(pm_fan_speed); this->ac_fan_speed = 0; this->ac_mode = 0; this->ac_temperature = 25; @@ -25,26 +36,28 @@ void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCar this->lightLevelRow2 = 0; this->lightLevelRow3 = 0; this->lightLevelRow4 = 0; + this->time_since_last_ac_change = 0; + this->ac_press_pending = false; + this->time_since_ac_staggered_start_call = 0; + this->ac_staggered_start_call_pending = false; // this->time_since_last_screen_update = 0; this->registerTouchCallback(bindedHandleTouch); this->reset(); delay(1000); - // TODO : Will the light be on or off when the system is started?, You need to jump to its respective page // first jump to main then if no activity jump to standby this->jumpToPage(2); // change this back later to 2 delay(100); this->updateAirPurifierState(); + this->updateSystemtoggle(); + this->updateAllStandbyToggle(); this->updateACState(); this->updateLightGroupStatePageDashboard(); - this->outputCard->setValue(6, pm_fan_speed); - this->outputCard->setValue(5, 0); - this->outputCard->setValue(1, 0); - this->outputCard->setValue(2, 0); - this->outputCard->setValue(3, 0); - this->outputCard->setValue(4, 0); - this->climateCard->setTemperature(ac_temperature); - this->climateCard->setFanSpeed(ac_fan_speed); - this->climateCard->setMode(ac_mode); + + // intialize AC state + if (ac_lock_state == false) + { + setACstate(ac_fan_speed, ac_mode, ac_temperature); // default to off with temp 25 and fan on Auto + } } void ISEDisplay::loop() { @@ -52,54 +65,118 @@ void ISEDisplay::loop() // If there is data, process the data recieveSerialCommand(); - // Update the time since the last screen update using millis() + // Check if the AC state has been changed + if (ac_press_pending && (millis() - time_since_last_ac_change) > 500) + { + ESP_LOGI("ISEDisplay", "Sending AC IR code"); + sendACIRcode(); + ESP_LOGI("ISEDisplay", "AC IR code sent"); + ac_press_pending = false; + ESP_LOGI("ISEDisplay", "AC press pending set to false"); + } + // check for ac staggered start + if (ac_staggered_start_call_pending && (millis() - time_since_ac_staggered_start_call) > 3000) + { + ESP_LOGI("ISEDisplay", "Sending Staggered AC IR code (York)"); + sendACIRcode(); + ESP_LOGI("ISEDisplay", "AC Staggered AC IR code (York) sent"); + ac_staggered_start_call_pending = false; + ESP_LOGI("ISEDisplay", "AC staggered start call pending set to false"); + } - // u_int32_t current_time = millis(); + // Check if the MQTT connection has been lost + static uint32_t last_mqtt_connected_check = 0; + if (last_mqtt_connected_check == 0) + { + last_mqtt_connected_check = millis() + 15000; // Wait 15 seconds before checking + ESP_LOGD("ISE Display", "Waiting 15 seconds before checking MQTT connection"); + } + static bool first_disconnect = true; + // ESP_LOGI("ISEDisplay", "init first disconnect set to true"); + if (millis() - last_mqtt_connected_check > 3000) + { + ESP_LOGD("ISE Display", "Checking MQTT Connection, Connection is %s", this->iot->mqttConnected() ? "true" : "false"); + if (!this->iot->mqttConnected()) + { + ESP_LOGI("ISEDisplay", "MQTT is disconnected"); + if (first_disconnect) + { + // When MQTT is disconnected, enter standalone mode + // A/C lock is lifted + // PM lock are lifted + ESP_LOGI("ISEDisplay", "Entering standalone mode"); + this->ac_lock_state = false; + ESP_LOGI("ISEDisplay", "AC lock state set to false"); + this->pm_lock_state = false; + ESP_LOGI("ISEDisplay", "PM lock state set to false"); + first_disconnect = false; + ESP_LOGI("ISEDisplay", "first disconnect set to false"); + } + } + else + { + if (first_disconnect == false) + { + // When MQTT is connected, exit standalone mode + // A/C lock is set + // PM lock is set - // if (current_time - this->time_since_last_screen_update > 120000) - // { - // // jump to standby page if there is no activity for 2 minutes - // if(this->currentPage != 1){ - // this->jumpToPage(1); - // ESP_LOGI("ISEDisplay", "Jumping to standby page"); - // } - // } + ESP_LOGI("ISEDisplay", "Exiting standalone mode"); + + first_disconnect = true; + ESP_LOGI("ISEDisplay", "first disconnect set to true"); + this->ac_lock_state = strcmp(ac_lock->getValue(), "on") == 0; + ESP_LOGI("ISEDisplay", "AC lock state set to %d", this->ac_lock_state); + this->pm_lock_state = strcmp(pm_lock->getValue(), "on") == 0; + ESP_LOGI("ISEDisplay", "PM lock state set to %d", this->pm_lock_state); + updateACState(); + ESP_LOGI("ISEDisplay", "AC state updated"); + updateAirPurifierState(); + ESP_LOGI("ISEDisplay", "Air purifier state updated"); + } + } + last_mqtt_connected_check = millis(); + ESP_LOGI("ISEDisplay", "last mqtt connected check set to current time"); + } + // ESP_LOGV("ISEDisplay", "this Loop is finish"); } void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type) { ESP_LOGD("ISEDisplay", "Touch detected on page %d, component %d, touch type %d", page, component, touch_type); - // time_since_last_screen_update = millis(); // update time since last activity + char buffer[4]; if (page == PAGE_STANDBY) { switch (component) { - case COMPONENT_STANDBY_OPEN_ALL_TOGGLE: + case COMPONENT_OBJ_STANDBY_LOGO: if (touch_type != TOUCH_TYPE_RELEASE) break; - // TODO : Should you really jump to page 2 here? should't page jumping be handled reactivly? - // EX. if atleast one light is on, then jump to active page, else jump to standby page - // This will allow page to change correctly when the system is started and when controlled remotely which won't call handleTouch - // time_since_last_screen_update = millis(); + //this->jumpToPage(2); + break; + case COMPONENT_OBJ_STANDBY_BTN_OPEN_ALL_TOGGLE: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + //allToggleStandby(); this->jumpToPage(2); // the function of the button is to open the dashboard from standby break; - case COMPONENT_STANDBY_LIGHT_TOGGLE: + case COMPONENT_OBJ_STANDBY_BTN_LIGHT_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; - // TODO : So this does nothing? Shouldn't it turn on the lights? - // should turn it on now toggleLightGroupStateStandby(); break; - case COMPONENT_STANDBY_AC_TOGGLE: - // TODO : What's the expexted behavior of standby? Does it enter standby when the lights are all off and ignore the AC - // or does it only enter standby when ac is also off and purifier is off, or is it a timed thing? + case COMPONENT_OBJ_STANDBY_BTN_AC_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; + if (this->ac_lock_state == true) + { + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; + } toggleAC(); - break; - case COMPONENT_STANDBY_PM_TOGGLE: + case COMPONENT_OBJ_STANDBY_BTN_PM_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; togglePMStandby(); @@ -108,146 +185,245 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type break; } } - else if (page == PAGE_DASHBOARD) { switch (component) { - case COMPONENT_LIGHT_MASTER_BUTTON: - // TODO : this only update the display to match the light, it doesn't toggle the light. - if (touch_type != TOUCH_TYPE_RELEASE) - break; - toggleLightGroupState(); + case COMPONENT_OBJ_DASHBOARD_NUM_AC_TEMP: break; - // TODOlater : can't this be done better with array lookup? - case COMPONENT_LIGHT_MASTER_LEVEL1_TOUCHPOINT: + case COMPONENT_OBJ_DASHBOARD_BTN_AC_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; - for (uint8_t i = 1; i <= 4; i++) + + // if ac_lock is true do nothing + if (this->ac_lock_state == true) { - setLightLevel(i, 1); + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; } + + toggleAC(); break; - case COMPONENT_LIGHT_MASTER_LEVEL2_TOUCHPOINT: + case COMPONENT_OBJ_DASHBOARD_BTN_AC_MODE: if (touch_type != TOUCH_TYPE_RELEASE) break; - for (uint8_t i = 1; i <= 4; i++) + // if ac_lock is true do nothing + if (this->ac_lock_state == true) { - setLightLevel(i, 2); + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; } + changeUserACmode(); break; - case COMPONENT_LIGHT_MASTER_LEVEL3_TOUCHPOINT: + case COMPONENT_OBJ_DASHBOARD_BTN_AC_FAN_SPEED: if (touch_type != TOUCH_TYPE_RELEASE) break; - for (uint8_t i = 1; i <= 4; i++) + // if ac_lock is true do nothing + if (this->ac_lock_state == true) { - setLightLevel(i, 3); + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; } + // ac_fan_speed = this->climateCard_daikin->getFanSpeed(); + ac_fan_speed = this->ac_fan_speed; + // mode= auto, high, mid, low + ESP_LOGI("ISEDisplay", "Current AC fan speed: %d", ac_fan_speed); + ac_fan_speed = (ac_fan_speed + 1) % 4; + ESP_LOGI("ISEDisplay", "New AC fan speed: %d", ac_fan_speed); + setACstate(ac_fan_speed, ac_mode, ac_temperature); break; - case COMPONENT_LIGHT_ROW1_SLIDER: + case COMPONENT_OBJ_DASHBOARD_BTN_AC_TEMP_MINUS: if (touch_type != TOUCH_TYPE_RELEASE) break; - lightLevelRow1 = this->getNumber("light_r1_slide.val"); - toggleSliderLight(1, lightLevelRow1); + // if ac_lock is true do nothing + if (this->ac_lock_state == true) + { + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; + } + // ac_temperature = this->climateCard_daikin->getTemperature() - 1; + ac_temperature = this->ac_temperature - 1; + setACstate(ac_fan_speed, ac_mode, ac_temperature); break; - case COMPONENT_LIGHT_ROW2_SLIDER: + case COMPONENT_OBJ_DASHBOARD_BTN_AC_TEMP_PLUS: if (touch_type != TOUCH_TYPE_RELEASE) break; - lightLevelRow2 = this->getNumber("light_r2_slide.val"); - toggleSliderLight(2, lightLevelRow2); + // if ac_lock is true do nothing + if (this->ac_lock_state == true) + { + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + break; + } + // ac_temperature = this->climateCard_daikin->getTemperature() + 1; + ac_temperature = this->ac_temperature + 1; + setACstate(ac_fan_speed, ac_mode, ac_temperature); break; - case COMPONENT_LIGHT_ROW3_SLIDER: + case COMPONENT_OBJ_DASHBOARD_BTN_PM_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; - lightLevelRow3 = this->getNumber("light_r3_slide.val"); - toggleSliderLight(3, lightLevelRow3); - break; - case COMPONENT_LIGHT_ROW4_SLIDER: - if (touch_type != TOUCH_TYPE_RELEASE) + // if pm_lock is true do nothing + if (this->pm_lock_state == true) + { + ESP_LOGI("ISEDisplay", "PM lock is on, do nothing"); break; - lightLevelRow4 = this->getNumber("light_r4_slide.val"); - toggleSliderLight(4, lightLevelRow4); + } + togglePM(); break; - case COMPONENT_LIGHT_ROW1_SWITCH: + case COMPONENT_OBJ_DASHBOARD_TXT_PM_INSIDE: + break; + case COMPONENT_OBJ_DASHBOARD_TXT_PM_OUTSIDE: + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW1: + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW2: + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW3: + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW4: + break; + case COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW1: if (touch_type != TOUCH_TYPE_RELEASE) break; toggleLightIndividual(1); break; - case COMPONENT_LIGHT_ROW2_SWITCH: + case COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW2: if (touch_type != TOUCH_TYPE_RELEASE) break; toggleLightIndividual(2); break; - case COMPONENT_LIGHT_ROW3_SWITCH: + case COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW3: if (touch_type != TOUCH_TYPE_RELEASE) break; toggleLightIndividual(3); break; - case COMPONENT_LIGHT_ROW4_SWITCH: + case COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW4: if (touch_type != TOUCH_TYPE_RELEASE) break; toggleLightIndividual(4); break; - // TODO : Don't we have fan only mode too? can you really just switch between 0 and 1? - case COMPONENT_AC_TOGGLE_BUTTON: - if (touch_type != TOUCH_TYPE_RELEASE) - break; - toggleAC(); + case COMPONENT_OBJ_DASHBOARD_TIMER_TEN_SEC: break; - case COMPONENT_AC_MODE: - if (touch_type != TOUCH_TYPE_RELEASE) - break; - changeUserACmode(); + case COMPONENT_OBJ_DASHBOARD_VAL_TIME_PAST: break; - case COMPONENT_AC_FAN_SPEED: - if (touch_type != TOUCH_TYPE_RELEASE) - break; - ac_fan_speed = this->climateCard->getFanSpeed(); - // We have auto, low, mid, high right?, that's 0,1,2,3 a modulo operation of 3 only gives 0,1,2 - // mod 4 should fixed it - ESP_LOGI("ISEDisplay", "Current AC fan speed: %d", ac_fan_speed); - ac_fan_speed = (ac_fan_speed + 1) % 4; - ESP_LOGI("ISEDisplay", "New AC fan speed: %d", ac_fan_speed); - this->climateCard->setFanSpeed(ac_fan_speed); - // updateACState(); + case COMPONENT_OBJ_DASHBOARD_TIMER_INACTIVE_CHECK: break; - case COMPONENT_AC_TEMP_DOWN_BUTTON: + case COMPONENT_OBJ_DASHBOARD_BTN_SYSTEM_TOGGLE: if (touch_type != TOUCH_TYPE_RELEASE) break; - this->climateCard->setTemperature(this->climateCard->getTemperature() - 1); - // updateACState(); + // implement system toggle + // check light on or off + // check ac on or off + // check pm on or off + toggleSystem(); break; - case COMPONENT_AC_TEMP_UP_BUTTON: + case COMPONENT_OBJ_DASHBOARD_BTN_PM_SPEED: if (touch_type != TOUCH_TYPE_RELEASE) break; - this->climateCard->setTemperature(this->climateCard->getTemperature() + 1); - // updateACState(); + // implement pm speed change + changePMfanspeed(); break; - case COMPONENT_PM_TOGGLE_BUTTON: + case COMPONENT_OBJ_DASHBOARD_BTN_PM_MODE: if (touch_type != TOUCH_TYPE_RELEASE) break; - togglePM(); + // implement pm mode change break; - case COMPONENT_PM_FAN_SPEED_DECREASE: - if (touch_type != TOUCH_TYPE_RELEASE) - break; - pm_fan_speed = this->outputCard->getValue(6); - ESP_LOGI("ISEDisplay", "Current PM fan speed: %d", pm_fan_speed); - if (pm_fan_speed >= 1 && pm_fan_speed <= 20) - this->outputCard->setValue(6, (pm_fan_speed - 1)); - ESP_LOGI("ISEDisplay", "New PM fan speed: %d", pm_fan_speed); - updateAirPurifierState(); + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_MASTER_LIGHT: break; - case COMPONENT_PM_FAN_SPEED_INCREASE: + case COMPONENT_OBJ_DASHBOARD_LOGO: + jumpToPage(1); + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_PM_LOCK: if (touch_type != TOUCH_TYPE_RELEASE) break; - pm_fan_speed = this->outputCard->getValue(6); - ESP_LOGI("ISEDisplay", "Current PM fan speed: %d", pm_fan_speed); - if (pm_fan_speed >= 0 && pm_fan_speed <= 19) - this->outputCard->setValue(6, (pm_fan_speed + 1)); - ESP_LOGI("ISEDisplay", "New PM fan speed: %d", pm_fan_speed); - updateAirPurifierState(); + // toggle_pm_lock(); + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_AC_LOCK: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + // toggle_ac_lock(); + break; + case COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_MASTER: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + toggleLightGroupState(); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV1: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightGroupState(1); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV2: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightGroupState(2); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV3: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightGroupState(3); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV1: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(1, 1); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV2: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(1, 2); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV3: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(1, 3); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV1: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(2, 1); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV2: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(2, 2); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV3: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(2, 3); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV1: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(3, 1); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV2: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(3, 2); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV3: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(3, 3); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV1: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(4, 1); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV2: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(4, 2); + break; + case COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV3: + if (touch_type != TOUCH_TYPE_RELEASE) + break; + setLightLevel(4, 3); + break; + case COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_C_DEGREE: break; default: break; @@ -265,33 +441,27 @@ void ISEDisplay::handlePWMChange(uint8_t pin, bool state, uint16_t value) // NEED to switch case for different page uint8_t current_page = this->currentPage; + + // uint8_t first_pin = *(light_array); + // uint8_t last_pin = *(light_array + 7); + if (current_page == PAGE_STANDBY) { - if (pin >= 1 && pin <= 4) + if (LIGHT_ROW1_COLUMN1 || LIGHT_ROW1_COLUMN2 || LIGHT_ROW2_COLUMN1 || LIGHT_ROW2_COLUMN2 || LIGHT_ROW3_COLUMN1 || LIGHT_ROW3_COLUMN2 || LIGHT_ROW4_COLUMN1 || LIGHT_ROW4_COLUMN2) // change { // Light updateLightGroupStatePageStandby(); - // time_since_last_screen_update = millis(); // update time since last activity - } - else if (pin == 4 || pin == 5) - { - // Air Purifier - updateAirPurifierStateStandby(); + updateAllStandbyToggle(); // time_since_last_screen_update = millis(); // update time since last activity } } else if (current_page == PAGE_DASHBOARD) { - if (pin >= 1 && pin <= 4) + if (LIGHT_ROW1_COLUMN1 || LIGHT_ROW1_COLUMN2 || LIGHT_ROW2_COLUMN1 || LIGHT_ROW2_COLUMN2 || LIGHT_ROW3_COLUMN1 || LIGHT_ROW3_COLUMN2 || LIGHT_ROW4_COLUMN1 || LIGHT_ROW4_COLUMN2) // change { // Light updateLightGroupStatePageDashboard(); - // time_since_last_screen_update = millis(); // update time since last activity - } - else if (pin == 4 || pin == 5) - { - // Air Purifier - updateAirPurifierState(); + updateSystemtoggle(); // time_since_last_screen_update = millis(); // update time since last activity } } @@ -302,120 +472,46 @@ void ISEDisplay::handlePWMChange(uint8_t pin, bool state, uint16_t value) } void ISEDisplay::updateDateTimeText(rtctime_t time) { - this->takeSerialMutex(); - // Send the time to the display + if (this->currentPage == 1) + { + if (!this->takeSerialMutex()) + return; + // Send the time to the display - this->displayAdapter->printf("time.txt=\"%02d:%02d\"", time.hours, time.minutes); - this->sendStopBytes(); + this->displayAdapter->printf("time.txt=\"%02d:%02d\"", time.hours, time.minutes); + this->sendStopBytes(); - this->displayAdapter->printf("date.txt=\"%02d.%02d.%d\"", time.day, time.month, time.year); - this->sendStopBytes(); + this->displayAdapter->printf("date.txt=\"%02d.%02d.%d\"", time.day, time.month, time.year); + this->sendStopBytes(); - this->giveSerialMutex(); + this->giveSerialMutex(); + } } // TODO : Implement // user remote var // appdeamon -void ISEDisplay::updateWeather(char *weather_string) -{ - // TODO : use remotevar to get weather data from appdaemon and update the display - u_int8_t weather_code = 68; - if (strcmp(weather_string, "fair_day") == 0) - { - weather_code = 63; - } - else if (strcmp(weather_string, "sunny") == 0) - { - weather_code = 63; - } - else if (strcmp(weather_string, "fair_night") == 0) - { - weather_code = 64; - } - else if (strcmp(weather_string, "cloudy") == 0) - { - weather_code = 65; - } - else if (strcmp(weather_string, "clear-day") == 0) - { - weather_code = 66; - } - else if (strcmp(weather_string, "clear-night") == 0) - { - weather_code = 67; - } - else if (strcmp(weather_string, "partlycloudy_day") == 0) - { - weather_code = 68; - } - else if (strcmp(weather_string, "partlycloudy") == 0) - { - weather_code = 68; - } - else if (strcmp(weather_string, "partlycloudy_night") == 0) - { - weather_code = 69; - } - else if (strcmp(weather_string, "heavyrain") == 0) - { - weather_code = 70; - } - else if (strcmp(weather_string, "heavyrainandthunder") == 0) - { - weather_code = 71; - } - else if (strcmp(weather_string, "rainandthunder") == 0) - { - weather_code = 72; - } - else if (strcmp(weather_string, "rain") == 0) - { - weather_code = 73; - } - else if (strcmp(weather_string, "rainy") == 0) - { - weather_code = 73; - } - else if (strcmp(weather_string, "lightrain") == 0) - { - weather_code = 74; - } - else if (strcmp(weather_string, "fog") == 0) - { - weather_code = 75; - } - else - { - weather_code = 68; - } - ESP_LOGI("ISEDisplay", "Updating weather to: %s (%d)", weather_string, weather_code); +// void ISEDisplay::updateTempOutside(float temp_outside) +// { +// // TODO : use remotevar to get PM2.5 data from appdaemon and update the display - if (!this->takeSerialMutex()) - return; - this->displayAdapter->printf("weather_icon.pic=%d", weather_code); - this->sendStopBytes(); - this->giveSerialMutex(); -} -void ISEDisplay::updateTempOutside(float temp_outside) -{ - // TODO : use remotevar to get PM2.5 data from appdaemon and update the display - - // change temp_outside to int then display - u_int8_t temp_outside_int = (u_int8_t)temp_outside; - ESP_LOGI("ISEDisplay", "Updating temperature outside to: %d", temp_outside_int); - this->takeSerialMutex(); - this->displayAdapter->printf("outside_temp.txt=\"%d\"", temp_outside_int); - this->sendStopBytes(); - this->giveSerialMutex(); -} +// // change temp_outside to int then display +// u_int8_t temp_outside_int = (u_int8_t)temp_outside; +// ESP_LOGI("ISEDisplay", "Updating temperature outside to: %d", temp_outside_int); +// if (!this->takeSerialMutex()) +// return; +// this->displayAdapter->printf("outside_temp.txt=\"%d\"", temp_outside_int); +// this->sendStopBytes(); +// this->giveSerialMutex(); +// } void ISEDisplay::updatePMoutside(u_int16_t pm25_outside) { ESP_LOGI("ISEDisplay", "Updating PM2.5 outside to: %d", pm25_outside); u_int16_t curPage = this->currentPage; if (curPage == 2) { - this->takeSerialMutex(); + if (!this->takeSerialMutex()) + return; this->displayAdapter->printf("pm_out.txt=\"%d\"", pm25_outside); this->sendStopBytes(); this->giveSerialMutex(); @@ -429,7 +525,8 @@ void ISEDisplay::updatePMinside(u_int16_t pm25_inside) u_int16_t curPage = this->currentPage; if (curPage == 2) { - this->takeSerialMutex(); + if (!this->takeSerialMutex()) + return; this->displayAdapter->printf("pm_in.txt=\"%d\"", pm25_inside); this->sendStopBytes(); this->giveSerialMutex(); @@ -438,21 +535,129 @@ void ISEDisplay::updatePMinside(u_int16_t pm25_inside) void ISEDisplay::setPMstate(bool is_pm_on, uint8_t pm_fan_speed) { - // TODO : set data to HA's Xiaomi air purifier sensor + //check pm_lock if true do nothing + this->pm_lock_state = strcmp(pm_lock->getValue(), "on") == 0; + if (this->pm_lock_state == true) + { + ESP_LOGI("ISEDisplay", "PM lock is on, do nothing"); + return; + } + ESP_LOGI("ISEDisplay", "Setting PM state: %d, fan speed: %d", is_pm_on, pm_fan_speed); + char buffer[4]; + itoa(pm_fan_speed, buffer, DEC); + remote_pm_fan_speed->setValue(buffer); + pm_switch->setValue(is_pm_on ? "on" : "off"); +} + +void ISEDisplay::setPMlockstate(bool is_pm_lock_on) +{ + ESP_LOGI("ISEDisplay", "Setting PM lock state: %d", is_pm_lock_on); + pm_lock->setValue(is_pm_lock_on ? "on" : "off"); +} + +void ISEDisplay::setAClockstate(bool is_ac_lock_on) +{ + ESP_LOGI("ISEDisplay", "Setting AC lock state: %d", is_ac_lock_on); + ac_lock->setValue(is_ac_lock_on ? "on" : "off"); } void ISEDisplay::setACstate(uint8_t ac_fan_speed, uint8_t ac_mode, uint8_t ac_temperature) { - ESP_LOGI("ISEDisplay", "Setting AC state: = fan speed: %d, mode: %d, temperature: %d", ac_fan_speed, ac_mode, ac_temperature); + ESP_LOGI("ISEDisplay", "AC state before change is: fan speed: %d, mode: %d, temperature: %d", this->ac_fan_speed, this->ac_mode, this->ac_temperature); + ESP_LOGI("ISEDisplay", "Setting AC state in memory to: = fan speed: %d, mode: %d, temperature: %d", ac_fan_speed, ac_mode, ac_temperature); - this->climateCard->setFanSpeed(ac_fan_speed); - ESP_LOGI("ISEDisplay", "AC fan speed set to: %d", ac_fan_speed); - this->climateCard->setMode(ac_mode); - ESP_LOGI("ISEDisplay", "AC mode set to: %d", ac_mode); - this->climateCard->setTemperature(ac_temperature); - ESP_LOGI("ISEDisplay", "AC temperature set to: %d", ac_temperature); - // updateACState(); + this->ac_fan_speed = ac_fan_speed; + this->ac_mode = ac_mode; + this->ac_temperature = ac_temperature; + //check ac_lock if true do nothing + this->ac_lock_state = strcmp(ac_lock->getValue(), "on") == 0; + if (this->ac_lock_state == true) + { + ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + return; + } + // check ac_temp is within bound of daikin + if (this->ac_temperature < DAIKIN_MIN_TEMP) + { + this->ac_temperature = DAIKIN_MIN_TEMP; + } + else if (this->ac_temperature > DAIKIN_MAX_TEMP) + { + this->ac_temperature = DAIKIN_MAX_TEMP; + } + this->time_since_last_ac_change = millis(); + this->ac_press_pending = true; + updateACState(); + updateSystemtoggle(); + updateAllStandbyToggle(); } +void ISEDisplay::sendACIRcode() +{ + uint8_t cur_ac_fan_speed = this->ac_fan_speed; + uint8_t cur_ac_mode = this->ac_mode; + uint8_t before_change_ac_mode = this->climateCard_daikin->getMode(); + uint8_t cur_ac_temperature = this->ac_temperature; + uint8_t york_temp = cur_ac_temperature; + // this->climateCard->setFanSpeed(ac_fan_speed); + ESP_LOGI("ISEDisplay", "AC fan speed set to: %d", cur_ac_fan_speed); + // this->climateCard->setMode(ac_mode); + ESP_LOGI("ISEDisplay", "AC mode before change is set to: %d", before_change_ac_mode); + ESP_LOGI("ISEDisplay", "AC mode set to: %d", cur_ac_mode); + // this->climateCard->setTemperature(ac_temperature); + ESP_LOGI("ISEDisplay", "AC temperature set to: %d", cur_ac_temperature); + // check if temp is within range of min and max for york if not set an min or max for only york + if (ac_staggered_start_call_pending == false) + { + ESP_LOGI("ISEDisplay", "AC Staggered start call pending is false"); + this->climateCard_daikin->setState(cur_ac_mode, cur_ac_fan_speed, cur_ac_temperature); + ESP_LOGI("ISEDisplay", "Daikin AC IR code sent"); + } + if (cur_ac_temperature < YORK_MIN_TEMP) + { + york_temp = YORK_MIN_TEMP; + } + else if (cur_ac_temperature > YORK_MAX_TEMP) + { + york_temp = YORK_MAX_TEMP; + } + if (cur_ac_mode == 3 && ac_staggered_start_call_pending == false) + { + ESP_LOGI("ISEDisplay", "AC Staggered start call pending is false"); + this->climateCard_york->setState(0, cur_ac_fan_speed, york_temp); + ESP_LOGI("ISEDisplay", "York AC IR code sent to off mode due to swtiching to dry on Daikin"); + } + else + { + // want to stagger start york ac when change state from off (mode 0) to on (mode 1,2,3) by 1 sec without delaying other code + if (before_change_ac_mode == 0 && ac_staggered_start_call_pending == false) + { + ESP_LOGI("ISEDisplay", "cur_ac_mode is 0 and ac_staggered_start_call_pending is false"); + this->time_since_ac_staggered_start_call = millis(); + this->ac_staggered_start_call_pending = true; + ESP_LOGI("ISEDisplay", "AC staggered start call pending set to true and call time set to current time"); + } + else + { + ESP_LOGI("ISEDisplay", "AC Staggered start call pending is true or cur_ac_mode is not 0"); + this->climateCard_york->setState(cur_ac_mode, cur_ac_fan_speed, york_temp); + ESP_LOGI("ISEDisplay", "York AC IR code sent"); + // wondering if there is a case where the ac_staggered_start_call_pending is not set to false after setState have been called + } + } + // get value of mode fanspeed and temp and print compare to store value + ESP_LOGI("ISEDisplay", "AC IR code sent"); + ESP_LOGI("ISEDisplay", "NOTE: ac_staggered_start_call_pending is %d", ac_staggered_start_call_pending); + if (ac_staggered_start_call_pending == true) + { + ESP_LOGI("ISEDisplay", "thus the york ac will not be set to current mode if ac_staggered_start_call_pending is true will be trigger after 1 sec"); + } + ESP_LOGI("ISEDisplay", "Daikin fan speed: %d, Daikin mode: %d, Daikin temperature: %d", cur_ac_fan_speed, cur_ac_mode, cur_ac_temperature); + ESP_LOGI("ISEDisplay", "York fan speed: %d, York mode: %d, York temperature: %d", cur_ac_fan_speed, cur_ac_mode, york_temp); + ESP_LOGI("ISEDisplay", "getting value of mode, fanspeed and temp from climate card"); + ESP_LOGI("ISEDisplay", "Daikin fan speed: %d, Daikin mode: %d, Daikin temperature: %d", this->climateCard_daikin->getFanSpeed(), this->climateCard_daikin->getMode(), this->climateCard_daikin->getTemperature()); + ESP_LOGI("ISEDisplay", "York fan speed: %d, York mode: %d, York temperature: %d", this->climateCard_york->getFanSpeed(), this->climateCard_york->getMode(), this->climateCard_york->getTemperature()); +} + void ISEDisplay::toggleLightGroupState() { // Get the current group state @@ -463,6 +668,17 @@ void ISEDisplay::toggleLightGroupState() { setLightLevel(i, state ? 0 : 3); } + // for loop might slow it down maybe? idk +} +void ISEDisplay::setLightGroupState(uint8_t level) +{ + // Get the current group state + ESP_LOGI("ISEDisplay", "Current light group state: %d", level); + // Toggle light + for (uint8_t i = 1; i <= 4; i++) + { + setLightLevel(i, level); + } } void ISEDisplay::toggleLightGroupStateStandby() { @@ -479,83 +695,258 @@ void ISEDisplay::toggleLightGroupStateStandby() void ISEDisplay::togglePM() { // Get the current group state - bool state = this->outputCard->getState(5); - ESP_LOGI("ISEDisplay", "Current PM state: %d", state); + bool ispmlock = this->pm_lock_state; + if (ispmlock) + { + ESP_LOGI("ISEDisplay", "PM lock is on, do nothing"); + return; + } + else + { + bool state = strcmp(pm_switch->getValue(), "on") == 0; + ESP_LOGI("ISEDisplay", "Current PM state: %d", state); + // Toggle the state + pm_switch->setValue(state ? "off" : "on"); + ESP_LOGI("ISEDisplay", "New PM state: %d", state); + // updateAirPurifierState(); + } +} +void ISEDisplay::toggleACLock() +{ + // Get the current group state + bool state = strcmp(ac_lock->getValue(), "on") == 0; + ESP_LOGI("ISEDisplay", "Current AC lock state: %d", state); // Toggle the state - state = !state; - // Set the state - this->outputCard->setState(5, state); - ESP_LOGI("ISEDisplay", "New PM state: %d", state); - updateAirPurifierState(); + ac_lock->setValue(state ? "off" : "on"); + ESP_LOGI("ISEDisplay", "New AC lock state: %d", state); + // updateAirPurifierStateStandby(); +} +void ISEDisplay::togglePMLock() +{ + // Get the current group state + bool state = strcmp(pm_lock->getValue(), "on") == 0; + ESP_LOGI("ISEDisplay", "Current PM lock state: %d", state); + // Toggle the state + pm_lock->setValue(state ? "off" : "on"); + ESP_LOGI("ISEDisplay", "New PM lock state: %d", state); + // updateAirPurifierStateStandby(); } void ISEDisplay::togglePMStandby() { // Get the current group state - bool state = this->outputCard->getState(5); + bool state = strcmp(pm_switch->getValue(), "on") == 0; ESP_LOGI("ISEDisplay", "Current PM state: %d", state); // Toggle the state - state = !state; - // Set the state - this->outputCard->setState(5, state); + pm_switch->setValue(state ? "off" : "on"); ESP_LOGI("ISEDisplay", "New PM state: %d", state); - updateAirPurifierStateStandby(); + // updateAirPurifierStateStandby(); } void ISEDisplay::toggleAC() { // Get the current group state - uint8_t mode = this->climateCard->getMode(); - // get fan speed and temperature - uint8_t fan_speed = this->climateCard->getFanSpeed(); - uint8_t temperature = this->climateCard->getTemperature(); - + // uint8_t mode = this->climateCard_daikin->getMode(); + uint8_t mode = this->ac_mode; ESP_LOGI("ISEDisplay", "Current AC mode: %d", mode); + ESP_LOGI("ISEDisplay", "Current user mode: %d", user_mode); + // get value of mode, fanspeed and temp and print compare to store value + ESP_LOGI("ISEDisplay", "Daikin fan speed: %d, Daikin mode: %d, Daikin temperature: %d", this->climateCard_daikin->getFanSpeed(), this->climateCard_daikin->getMode(), this->climateCard_daikin->getTemperature()); + ESP_LOGI("ISEDisplay", "York fan speed: %d, York mode: %d, York temperature: %d", this->climateCard_york->getFanSpeed(), this->climateCard_york->getMode(), this->climateCard_york->getTemperature()); // Toggle the state - if (mode == 0) - { - ESP_LOGI("ISEDisplay", " User mode: %d", user_mode); - setACstate(fan_speed, user_mode, temperature); - } - else - { - ESP_LOGI("ISEDisplay", "User mode BEFORE: %d", user_mode); - // update user mode to new mode - user_mode = mode; - // change actual mode to off - ESP_LOGI("ISEDisplay", "User mode AFTER: %d", user_mode); - setACstate(fan_speed, 0, temperature); - } -} -void ISEDisplay::changeUserACmode() -{ - // Get the current group state - uint8_t mode = this->climateCard->getMode(); - ESP_LOGI("ISEDisplay", "Current actual AC mode: %d", mode); - // Toggle the state - // user mode alternate between 1 and 2 - ESP_LOGI("ISEDisplay", "User mode BEFORE: %d", user_mode); - user_mode = (user_mode) % 2 + 1; - ESP_LOGI("ISEDisplay", "User mode AFTER: %d", user_mode); if (mode != 0) { // update mode to new mode - mode = user_mode; - ESP_LOGI("ISEDisplay", "change actual AC mode to user mode: %d", mode); + mode = 0; + ESP_LOGI("ISEDisplay", "change actual AC mode to off: %d", mode); } else { // ie mode is off // do nothing as the state is keep in user_mode // the mode will change to user_mode when turn on by toggleAC() ESP_LOGI("ISEDisplay", "do nothing; user mode: %d , actual mode: %d", user_mode, mode); + mode = user_mode; } - updateuserACmode(); // call to update mode part of the display seperately + // get fan speed and temperature + // uint8_t fan_speed = this->climateCard_daikin->getFanSpeed(); + // uint8_t temperature = this->climateCard_daikin->getTemperature(); + uint8_t fan_speed = this->ac_fan_speed; + uint8_t temperature = this->ac_temperature; + ESP_LOGI("ISEDisplay", "Current AC mode: %d", mode); + // Toggle the state + setACstate(fan_speed, mode, temperature); +} +void ISEDisplay::changeUserACmode() +{ + // Get the current group state + uint8_t mode = this->ac_mode; + // uint8_t mode = this->climateCard_daikin->getMode(); + ESP_LOGI("ISEDisplay", "Current actual AC mode: %d", mode); + // Toggle the state + // user mode alternate between 1, 2, and 3 + ESP_LOGI("ISEDisplay", "User mode BEFORE: %d", user_mode); + // user_mode = (user_mode) % 3 + 1; //loop from 1 to 2 to 3 then back to 1 + // Cycle user_mode from 2 to 1 to 3 + switch (user_mode) + { + case 2: // If current mode is cool (2), change to fan (1) + user_mode = 1; + break; + case 1: // If current mode is fan (1), change to dry (3) + user_mode = 3; + break; + case 3: // If current mode is dry (3), change to cool (2) + default: + user_mode = 2; + break; + } + ESP_LOGI("ISEDisplay", "User mode AFTER: %d", user_mode); + if (mode != 0) + { + // update mode to new mode + mode = user_mode; + ESP_LOGI("ISEDisplay", "change actual AC mode to user mode: %d", mode); + setACstate(this->ac_fan_speed, mode, this->ac_temperature); + } + else + { // ie mode is off + // do nothing as the state is keep in user_mode + // the mode will change to user_mode when turn on by toggleAC() + ESP_LOGI("ISEDisplay", "update just user mode display; user mode: %d , actual mode: %d", user_mode, mode); + updateuserACmode(); + } + + // updateuserACmode(); // call to update mode part of the display seperately +} +void ISEDisplay::changePMfanspeed() +{ + // Get the current group state + uint8_t fan_speed = this->pm_fan_speed; + uint8_t new_fan_speed = fan_speed; + // uint8_t fan_speed = this->climateCard_york->getFanSpeed(); + ESP_LOGI("ISEDisplay", "Current PM fan speed: %d", fan_speed); + // Toggle the state + // fan_speed have 3 state high mid low switch between them + switch (fan_speed) + { + case PM_FAN_SPEED_LOW: + new_fan_speed = PM_FAN_SPEED_MID; + break; + case PM_FAN_SPEED_MID: + new_fan_speed = PM_FAN_SPEED_HIGH; + break; + case PM_FAN_SPEED_HIGH: + new_fan_speed = PM_FAN_SPEED_LOW; + break; + default: + new_fan_speed = PM_FAN_SPEED_HIGH; + break; + } + ESP_LOGI("ISEDisplay", "New PM fan speed: %d", new_fan_speed); + this->pm_fan_speed = new_fan_speed; + ESP_LOGI("ISEDisplay", "Setting PM fan speed in memory to: %d", this->pm_fan_speed); + remote_pm_fan_speed->setIntValue(this->pm_fan_speed); + ESP_LOGI("ISEDisplay", "Setting PM fan speed in remote var to: %d", remote_pm_fan_speed->getValueAsInt()); + updateAirPurifierState(); } void ISEDisplay::setLightLevel(uint8_t row, uint8_t level) { - for (uint8_t i = 1; i <= 4; i++) + // Set the light level + // this->outputCard->setValue(row, level); + + // only value between 1 and 4 is valid + ESP_LOGI("ISEDisplay", "Setting light level for row %d to %d", row, level); + + uint8_t primary_pin = *(light_array + 2 * (row - 1)); + uint8_t secondary_pin = *(light_array + 2 * (row - 1) + 1); + + ESP_LOGI("ISEDisplay", "Primary pin: %d, Secondary pin: %d", primary_pin, secondary_pin); + + bool primary = false; + bool secondary = false; + + switch (level) { - if (row == i) - this->outputCard->setValue(row, level); + case 0: + primary = false; + secondary = false; + ESP_LOGI("ISEDisplay", "Primary pin is %d, Secondary pin is %d", primary, secondary); + break; + case 1: + primary = false; + secondary = true; + ESP_LOGI("ISEDisplay", "Primary pin is %d, Secondary pin is %d", primary, secondary); + break; + case 2: + primary = true; + secondary = false; + ESP_LOGI("ISEDisplay", "Primary pin is %d, Secondary pin is %d", primary, secondary); + break; + case 3: + primary = true; + secondary = true; + ESP_LOGI("ISEDisplay", "Primary pin is %d, Secondary pin is %d", primary, secondary); + break; + default: + ESP_LOGE("ISEDisplay", "Invalid light level: %d", level); + break; } + + this->outputCard->setState(primary_pin, primary); + this->outputCard->setState(secondary_pin, secondary); + ESP_LOGI("ISEDisplay", "Light level set for row %d", row); +} + +u_int8_t ISEDisplay::getLightLevel(uint8_t row) +{ + u_int8_t lightLevel = 0; + ESP_LOGI("ISEDisplay", "Getting light level for row %d", row); + // lightLevel = this->outputCard->getValue(row); + // row can only be between 1 and 4 + uint8_t primary_pin = *(light_array + 2 * (row - 1)); + uint8_t secondary_pin = *(light_array + 2 * (row - 1) + 1); + ESP_LOGI("ISEDisplay", "Primary pin: %d, Secondary pin: %d", primary_pin, secondary_pin); + bool primary = this->outputCard->getState(primary_pin); + bool secondary = this->outputCard->getState(secondary_pin); + ESP_LOGI("ISEDisplay", "Primary pin state: %d, Secondary pin state: %d", primary, secondary); + if (primary && secondary) + { + lightLevel = 3; + } + else if (primary) + { + lightLevel = 2; + } + else if (secondary) + { + lightLevel = 1; + } + else + { + lightLevel = 0; + } + ESP_LOGI("ISEDisplay", "Light level for row %d is %d", row, lightLevel); + return lightLevel; +} + +// change to light with the assignment + +lightPosition ISEDisplay::getRowCol(uint8_t pin) +{ + lightPosition position; + // uint8_t row = this->row; + // uint8_t column = this->column; + // const uint8_t *light_array = this->light_array; + // should return the row and column of the light from pin in a row by column array pointer pass from main using pointer arithmetic + for (uint8_t i = 0; i < row * column; i++) + { + uint8_t value = *(light_array + i); + if (value == pin) + { + position.row = i / column; + position.column = i % column; + return position; + } + } + return position; } void ISEDisplay::updateLightGroupStatePageStandby() @@ -563,14 +954,15 @@ void ISEDisplay::updateLightGroupStatePageStandby() // Calculate the state bool state = calculateLightGroupState(); // Send the state to the display - this->takeSerialMutex(); + if (!this->takeSerialMutex()) + return; this->displayAdapter->print("s_light_toggle.pic="); - this->displayAdapter->print(state ? COMPONENT_STANDBY_LIGHT_PIC_ON : COMPONENT_STANDBY_LIGHT_PIC_OFF); + this->displayAdapter->print(state ? COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_ON : COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_OFF); this->sendStopBytes(); this->displayAdapter->print("s_light_toggle.pic2="); - this->displayAdapter->print(state ? COMPONENT_STANDBY_LIGHT_PIC_ON_PRESSED : COMPONENT_STANDBY_LIGHT_PIC_OFF_PRESSED); + this->displayAdapter->print(state ? COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_ON_PRESSED : COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_OFF_PRESSED); this->sendStopBytes(); this->giveSerialMutex(); @@ -578,49 +970,115 @@ void ISEDisplay::updateLightGroupStatePageStandby() void ISEDisplay::updateLightGroupStatePageDashboard() { // Calculate the state - bool state = calculateLightGroupState(); + bool state_master = calculateLightGroupState(); + uint8_t firstState = getLightLevel(1); + bool allMatch = true; + // Send the state to the display - this->takeSerialMutex(); + if (!this->takeSerialMutex()) + return; - this->displayAdapter->print("light_master.pic="); - this->displayAdapter->print(state ? COMPONENT_LIGHT_MASTER_ON : COMPONENT_LIGHT_MASTER_OFF); + this->displayAdapter->print("light_m_sw.pic="); + this->displayAdapter->print(state_master ? COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_ON : COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_OFF); this->sendStopBytes(); - this->displayAdapter->print("light_master.pic2="); - this->displayAdapter->print(state ? COMPONENT_LIGHT_MASTER_ON_PRESSED : COMPONENT_LIGHT_MASTER_OFF_PRESSED); + this->displayAdapter->print("light_m_sw.pic2="); + this->displayAdapter->print(state_master ? COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_ON_PRESSED : COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_OFF_PRESSED); this->sendStopBytes(); + // this->displayAdapter->print("light_m_sw.pic="); + // this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_ON : COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_OFF); + // this->sendStopBytes(); + + // this->displayAdapter->print("light_m_sw.pic2="); + // this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_ON_PRESSED : COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_OFF_PRESSED); + // this->sendStopBytes(); + for (uint8_t i = 1; i <= 4; i++) { - u_int8_t state = this->outputCard->getValue(i); + u_int8_t state = getLightLevel(i); + + if (i > 1 && state != firstState) + { + allMatch = false; + } + switch (state) { case 0: this->displayAdapter->print("light_row"); this->displayAdapter->print(i); this->displayAdapter->print(".pic="); - this->displayAdapter->print(COMPONENT_LIGHT_LEVEL_0); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_0); + this->sendStopBytes(); + + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print("_sw.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_OFF); + this->sendStopBytes(); + + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print("_sw.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_OFF_PRESSED); this->sendStopBytes(); break; case 1: this->displayAdapter->print("light_row"); this->displayAdapter->print(i); this->displayAdapter->print(".pic="); - this->displayAdapter->print(COMPONENT_LIGHT_LEVEL_1); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_1); + this->sendStopBytes(); + + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print("_sw.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_ON); + this->sendStopBytes(); + + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print("_sw.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_ON_PRESSED); this->sendStopBytes(); break; case 2: this->displayAdapter->print("light_row"); this->displayAdapter->print(i); this->displayAdapter->print(".pic="); - this->displayAdapter->print(COMPONENT_LIGHT_LEVEL_2); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_2); + this->sendStopBytes(); + + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print("_sw.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_ON); + this->sendStopBytes(); + + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print("_sw.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_ON_PRESSED); this->sendStopBytes(); break; case 3: this->displayAdapter->print("light_row"); this->displayAdapter->print(i); this->displayAdapter->print(".pic="); - this->displayAdapter->print(COMPONENT_LIGHT_LEVEL_3); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_3); + this->sendStopBytes(); + + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print("_sw.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_ON); + this->sendStopBytes(); + + this->displayAdapter->print("light_row"); + this->displayAdapter->print(i); + this->displayAdapter->print("_sw.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_ON_PRESSED); this->sendStopBytes(); break; default: @@ -628,15 +1086,66 @@ void ISEDisplay::updateLightGroupStatePageDashboard() } } + if (allMatch) + { + // All states match, change the master light level which is the firststate + // use switch case + switch (firstState) + { + case 0: + this->displayAdapter->print("master_light.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_0); + this->sendStopBytes(); + break; + case 1: + this->displayAdapter->print("master_light.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_1); + this->sendStopBytes(); + break; + case 2: + this->displayAdapter->print("master_light.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_2); + this->sendStopBytes(); + break; + case 3: + this->displayAdapter->print("master_light.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_3); + this->sendStopBytes(); + break; + default: + this->displayAdapter->print("master_light.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_D); + this->sendStopBytes(); + break; + } + } + else + { + this->displayAdapter->print("master_light.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_D); + this->sendStopBytes(); + } + this->giveSerialMutex(); } +void ISEDisplay::updateLightSwitch() +{ + // DEPRECATED + // Calculate the state + // not in use due to worse performance + + // check state and set for each individual light row + // if state is 0 set to off and other(1,2,3) to on +} bool ISEDisplay::calculateLightGroupState() { // Check if all lights are on bool lightOn = false; + // uint_8 first_pin = *(light_array); + // uint_8 last_pin = *(light_array + 7); for (uint8_t i = 1; i <= 4; i++) { - if (this->outputCard->getValue(i) != 0) + if (getLightLevel(i) != 0) { lightOn = true; break; @@ -644,10 +1153,111 @@ bool ISEDisplay::calculateLightGroupState() } return lightOn; } +bool ISEDisplay::calculateAllState() +{ + bool lightState = calculateLightGroupState(); + bool pmState = strcmp(pm_switch->getValue(), "on") == 0; + bool acState = false; + if (ac_mode != 0) + { + acState = true; + } + return lightState || pmState || acState; +} +void ISEDisplay::toggleSystem() +{ + // toggleLightGroupState(); + // // check for ac lock and pm lock, if lock is on do nothing + // if (this->ac_lock_state == true) + // { + // ESP_LOGI("ISEDisplay", "AC lock is on, do nothing"); + // } + // else + // { + // toggleAC(); + // } + // if (this->pm_lock_state == true) + // { + // ESP_LOGI("ISEDisplay", "PM lock is on, do nothing"); + // } + // else + // { + // togglePM(); + // } + + bool state = calculateAllState(); + if (state) + { + //if AC mode is not zero, toggleAC() + if(ac_mode != 0) { + toggleAC(); + } + setLightGroupState(0); + setPMstate(false, pm_fan_speed); + } + else + { + if(ac_mode == 0) { + toggleAC(); + } + setLightGroupState(3); + setPMstate(true, pm_fan_speed); + } + + + + + + +} +void ISEDisplay::allToggleStandby() +{ + bool lightState = calculateLightGroupState(); + bool pmState = strcmp(pm_switch->getValue(), "on") == 0; + if (ac_mode != 0) + { + setACstate(0, ac_fan_speed, ac_temperature); + } + else{ + setACstate(2, ac_fan_speed, ac_temperature); + } + if (lightState) + { + setLightGroupState(0); + } + else + { + setLightGroupState(3); + } + if (pmState) + { + setPMstate(false, pm_fan_speed); + } + else + { + setPMstate(true, pm_fan_speed); + } + +} +void ISEDisplay::updateAllStandbyToggle() +{ + bool state = calculateAllState(); + if (!this->takeSerialMutex()) + return; + this->displayAdapter->print("s_open_all.pic="); + this->displayAdapter->print(state ? COMPONENT_STANDBY_PIC_ADV_SETTING_TOGGLE_ON : COMPONENT_STANDBY_PIC_ADV_SETTING_TOGGLE_OFF); + this->sendStopBytes(); + + this->displayAdapter->print("s_open_all.pic2="); + this->displayAdapter->print(state ? COMPONENT_STANDBY_PIC_ADV_SETTING_TOGGLE_ON_PRESSED : COMPONENT_STANDBY_PIC_ADV_SETTING_TOGGLE_OFF_PRESSED); + this->sendStopBytes(); + + this->giveSerialMutex(); +} void ISEDisplay::toggleLightIndividual(uint8_t row) { // Get the current state - uint8_t state = this->outputCard->getValue(row); + uint8_t state = getLightLevel(row); if (state != 0) { state = 0; @@ -659,47 +1269,36 @@ void ISEDisplay::toggleLightIndividual(uint8_t row) // Set the state setLightLevel(row, state); } -void ISEDisplay::toggleSliderLight(uint8_t row, uint8_t lightLevel) +void ISEDisplay::updateSystemtoggle() { - // Get the current state - uint8_t state = 0; + bool state = calculateAllState(); + if (!this->takeSerialMutex()) + return; + this->displayAdapter->print("system_toggle.pic="); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_ON : COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_OFF); + this->sendStopBytes(); - if (lightLevel < 10) - { - state = 0; - } - else if (lightLevel < 33) - { - state = 1; - } - else if (lightLevel <= 66) - { - state = 2; - } - else if (lightLevel > 66) - { - state = 3; - } - else - { - state = 0; - } - // Set the state - setLightLevel(row, state); + this->displayAdapter->print("system_toggle.pic2="); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_ON_PRESSED : COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_OFF_PRESSED); + this->sendStopBytes(); + + this->giveSerialMutex(); } void ISEDisplay::updateAirPurifierStateStandby() { // Get the state - bool state = this->outputCard->getState(5); + bool state = strcmp(pm_switch->getValue(), "on") == 0; + this->pm_lock_state = strcmp(pm_lock->getValue(), "on") == 0; // Send the state to the display - this->takeSerialMutex(); + if (!this->takeSerialMutex()) + return; this->displayAdapter->print("s_pm_toggle.pic="); - this->displayAdapter->print(state ? COMPONENT_STANDBY_PM_PIC_ON : COMPONENT_STANDBY_PM_PIC_OFF); + this->displayAdapter->print(state ? COMPONENT_STANDBY_PIC_PM_TOGGLE_ON : COMPONENT_STANDBY_PIC_PM_TOGGLE_OFF); this->sendStopBytes(); this->displayAdapter->print("s_pm_toggle.pic2="); - this->displayAdapter->print(state ? COMPONENT_STANDBY_PM_PIC_ON_PRESSED : COMPONENT_STANDBY_PM_PIC_OFF_PRESSED); + this->displayAdapter->print(state ? COMPONENT_STANDBY_PIC_PM_TOGGLE_ON_PRESSED : COMPONENT_STANDBY_PIC_PM_TOGGLE_OFF_PRESSED); this->sendStopBytes(); this->giveSerialMutex(); @@ -707,57 +1306,206 @@ void ISEDisplay::updateAirPurifierStateStandby() void ISEDisplay::updateAirPurifierState() { - // Get the state - bool state = this->outputCard->getState(5); - pm_fan_speed = this->outputCard->getValue(6); - // Send the state to the display - this->takeSerialMutex(); + // check for page + if (currentPage == PAGE_DASHBOARD) + { + ESP_LOGI("ISEDisplay", "Updating dashboard"); + // Get the state + bool state = strcmp(pm_switch->getValue(), "on") == 0; + this->pm_lock_state = strcmp(pm_lock->getValue(), "on") == 0; + ESP_LOGI("ISEDisplay", "Updating air purifier state to: %d", state); + pm_fan_speed = this->pm_fan_speed; + ESP_LOGI("ISEDisplay", "Updating air purifier fan speed to: %d", pm_fan_speed); + // Send the state to the display + if (!this->takeSerialMutex()) + return; - this->displayAdapter->print("pm_sw.pic="); - this->displayAdapter->print(state ? COMPONENT_PM_TOGGLE_PIC_ON : COMPONENT_PM_TOGGLE_PIC_OFF); - this->sendStopBytes(); + this->displayAdapter->print("pm_sw.pic="); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_PM_TOGGLE_ON : COMPONENT_DASHBOARD_PIC_PM_TOGGLE_OFF); + this->sendStopBytes(); - this->displayAdapter->print("pm_sw.pic2="); - this->displayAdapter->print(state ? COMPONENT_PM_TOGGLE_PIC_ON_PRESSED : COMPONENT_PM_TOGGLE_PIC_OFF_PRESSED); - this->sendStopBytes(); + this->displayAdapter->print("pm_sw.pic2="); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_PM_TOGGLE_ON_PRESSED : COMPONENT_DASHBOARD_PIC_PM_TOGGLE_OFF_PRESSED); + this->sendStopBytes(); - this->displayAdapter->print("pm_speed.val="); - this->displayAdapter->print(pm_fan_speed); - // this->displayAdapter->print("\""); - this->sendStopBytes(); + this->displayAdapter->print("pm_lock.pic="); + this->displayAdapter->print(this->pm_lock_state ? COMPONENT_DASHBOARD_PIC_LOCK : COMPONENT_DASHBOARD_PIC_UNLOCK); + this->sendStopBytes(); - this->displayAdapter->print("pm_speed.pco="); - this->displayAdapter->print(state ? 34486 : 33841); - this->sendStopBytes(); + this->displayAdapter->print("pm_mode.pic="); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_ON : COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_OFF); + this->sendStopBytes(); - this->giveSerialMutex(); + this->displayAdapter->print("pm_mode.pic2="); + this->displayAdapter->print(state ? COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_ON_PRESSED : COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_OFF_PRESSED); + this->sendStopBytes(); + + switch (pm_fan_speed) + { + case PM_FAN_SPEED_LOW: + if (state) + { // state is on + this->displayAdapter->print("pm_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_ON); + this->sendStopBytes(); + + this->displayAdapter->print("pm_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_ON_PRESSED); + this->sendStopBytes(); + } + else + { // state is off + this->displayAdapter->print("pm_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_OFF); + this->sendStopBytes(); + + this->displayAdapter->print("pm_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_OFF_PRESSED); + this->sendStopBytes(); + } + break; + case PM_FAN_SPEED_MID: + if (state) + { // state is on + this->displayAdapter->print("pm_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_ON); + this->sendStopBytes(); + + this->displayAdapter->print("pm_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_ON_PRESSED); + this->sendStopBytes(); + } + else + { // state is off + this->displayAdapter->print("pm_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_OFF); + this->sendStopBytes(); + + this->displayAdapter->print("pm_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_OFF_PRESSED); + this->sendStopBytes(); + } + break; + case PM_FAN_SPEED_HIGH: + if (state) + { // state is on + this->displayAdapter->print("pm_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_ON); + this->sendStopBytes(); + + this->displayAdapter->print("pm_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_ON_PRESSED); + this->sendStopBytes(); + } + else + { // state is off + this->displayAdapter->print("pm_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_OFF); + this->sendStopBytes(); + + this->displayAdapter->print("pm_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_OFF_PRESSED); + this->sendStopBytes(); + } + break; + default: + break; + } + + // this->displayAdapter->print("pm_speed.val="); + // this->displayAdapter->print(pm_fan_speed); + // // this->displayAdapter->print("\""); + // this->sendStopBytes(); + + // this->displayAdapter->print("pm_speed.pco="); + // this->displayAdapter->print(state ? 34486 : 33841); + // this->sendStopBytes(); + + this->giveSerialMutex(); + } + + else if (currentPage == PAGE_STANDBY) + { + ESP_LOGI("ISEDisplay", "Updating standby"); + updateAirPurifierStateStandby(); + } } void ISEDisplay::handleACChange(uint8_t mode, uint8_t fan_speed, uint8_t temperature) { ESP_LOGI("ISEDisplay", "AC state changed: mode: %d, fan speed: %d, temperature: %d", mode, fan_speed, temperature); updateACState(); + updateSystemtoggle(); + updateAllStandbyToggle(); } void ISEDisplay::updateuserACmode() { - this->takeSerialMutex(); + // uint8_t mode = this->climateCard_daikin->getMode(); + uint8_t mode = this->ac_mode; + if (!this->takeSerialMutex()) + return; ESP_LOGI("ISEDisplay", "updating display user AC mode to: %d", user_mode); switch (user_mode) { case 1: - this->displayAdapter->print("ac_mode.pic="); - this->displayAdapter->print(COMPONENT_AC_MODE_COOL_PIC); - this->sendStopBytes(); - this->displayAdapter->print("ac_mode.pic2="); - this->displayAdapter->print(COMPONENT_AC_MODE_COOL_PIC_PRESSED); - this->sendStopBytes(); + if (mode == 0) + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_ON_PRESSED); + this->sendStopBytes(); + } break; case 2: - this->displayAdapter->print("ac_mode.pic="); - this->displayAdapter->print(COMPONENT_AC_MODE_FAN_PIC); - this->sendStopBytes(); - this->displayAdapter->print("ac_mode.pic2="); - this->displayAdapter->print(COMPONENT_AC_MODE_FAN_PIC_PRESSED); - this->sendStopBytes(); + if (mode == 0) + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_ON_PRESSED); + this->sendStopBytes(); + } + break; + + case 3: + if (mode == 0) + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_mode.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_mode.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_ON_PRESSED); + this->sendStopBytes(); + } break; default: break; @@ -766,42 +1514,96 @@ void ISEDisplay::updateuserACmode() } void ISEDisplay::updateACfanSpeed() { - uint8_t fan_speed = this->climateCard->getFanSpeed(); + // uint8_t fan_speed = this->climateCard_daikin->getFanSpeed(); + // uint8_t mode = this->climateCard_daikin->getMode(); + uint8_t fan_speed = this->ac_fan_speed; + uint8_t mode = this->ac_mode; + this->ac_lock_state = strcmp(ac_lock->getValue(), "on") == 0; + ESP_LOGI("ISEDisplay", "updating display AC fan speed to: %d", fan_speed); - this->takeSerialMutex(); + if (!this->takeSerialMutex()) + return; switch (fan_speed) { case 0: - this->displayAdapter->print("ac_speed.pic="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_AUTO_PIC); - this->sendStopBytes(); - this->displayAdapter->print("ac_speed.pic2="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_AUTO_PIC_PRESSED); - this->sendStopBytes(); + if (mode == 0) + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_ON_PRESSED); + this->sendStopBytes(); + } break; case 1: - this->displayAdapter->print("ac_speed.pic="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_HIGH_PIC); - this->sendStopBytes(); - this->displayAdapter->print("ac_speed.pic2="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_HIGH_PIC_PRESSED); - this->sendStopBytes(); + if (mode == 0) + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_ON_PRESSED); + this->sendStopBytes(); + } break; case 2: - this->displayAdapter->print("ac_speed.pic="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_MID_PIC); - this->sendStopBytes(); - this->displayAdapter->print("ac_speed.pic2="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_MID_PIC_PRESSED); - this->sendStopBytes(); + if (mode == 0) + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_MID_ON_PRESSED); + this->sendStopBytes(); + } break; case 3: - this->displayAdapter->print("ac_speed.pic="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_LOW_PIC); - this->sendStopBytes(); - this->displayAdapter->print("ac_speed.pic2="); - this->displayAdapter->print(COMPONENT_AC_FAN_MODE_LOW_PIC_PRESSED); - this->sendStopBytes(); + if (mode == 0) + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_OFF); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_OFF_PRESSED); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_speed.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_ON); + this->sendStopBytes(); + this->displayAdapter->print("ac_speed.pic2="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_ON_PRESSED); + this->sendStopBytes(); + } break; default: break; @@ -813,50 +1615,77 @@ void ISEDisplay::updateACState() // TODOlater : The cognitive complexity here is so high, maybe break up the method a bit? // Get the state - uint8_t mode = this->climateCard->getMode(); - uint8_t temperature = this->climateCard->getTemperature(); + // uint8_t mode = this->climateCard_daikin->getMode(); + // uint8_t temperature = this->climateCard_daikin->getTemperature(); + uint8_t mode = this->ac_mode; + uint8_t temperature = this->ac_temperature; + this->ac_lock_state = strcmp(ac_lock->getValue(), "on") == 0; - this->takeSerialMutex(); - - // Send the state to the display - if (mode == 0) + if (currentPage != 1) { - this->displayAdapter->print("ac_temp.pco="); - this->displayAdapter->print(33841); - this->sendStopBytes(); + if (!this->takeSerialMutex()) + return; - this->displayAdapter->print("ac_temp.pic="); - this->displayAdapter->print(COMPONENT_AC_STATUS_OFF); + // Send the state to the display + if (mode == 0) + { + this->displayAdapter->print("ac_temp.pco="); + this->displayAdapter->print(COMPONENT_COLOR_INACTIVE_GREY); + this->sendStopBytes(); + + this->displayAdapter->print("c_degree.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_DEGREE_C_OFF); + this->sendStopBytes(); + } + else + { + this->displayAdapter->print("ac_temp.pco="); + this->displayAdapter->print(COMPONENT_COLOR_ACTIVE_BLUE); + this->sendStopBytes(); + + this->displayAdapter->print("c_degree.pic="); + this->displayAdapter->print(COMPONENT_DASHBOARD_PIC_DEGREE_C_ON); + this->sendStopBytes(); + } + this->displayAdapter->print("ac_sw.pic="); + this->displayAdapter->print(mode != 0 ? COMPONENT_DASHBOARD_PIC_AC_TOGGLE_ON : COMPONENT_DASHBOARD_PIC_AC_TOGGLE_OFF); this->sendStopBytes(); + this->displayAdapter->print("ac_sw.pic2="); + this->displayAdapter->print(mode != 0 ? COMPONENT_DASHBOARD_PIC_AC_TOGGLE_ON_PRESSED : COMPONENT_DASHBOARD_PIC_AC_TOGGLE_OFF_PRESSED); + this->sendStopBytes(); + this->displayAdapter->print("ac_lock.pic="); + this->displayAdapter->print(this->ac_lock_state ? COMPONENT_DASHBOARD_PIC_LOCK : COMPONENT_DASHBOARD_PIC_UNLOCK); + this->sendStopBytes(); + this->giveSerialMutex(); + + updateuserACmode(); + + updateACfanSpeed(); + + if (!this->takeSerialMutex()) + return; + + this->displayAdapter->print("ac_temp.val="); + this->displayAdapter->print(temperature); + // this->displayAdapter->print("\""); + this->sendStopBytes(); + this->giveSerialMutex(); } - else + else if (currentPage == 1) { - this->displayAdapter->print("ac_temp.pco="); - this->displayAdapter->print(34486); + if (!this->takeSerialMutex()) + return; + + this->displayAdapter->print("s_ac_toggle.pic="); + this->displayAdapter->print(mode != 0 ? COMPONENT_STANDBY_PIC_AC_TOGGLE_ON : COMPONENT_STANDBY_PIC_AC_TOGGLE_OFF); this->sendStopBytes(); - this->displayAdapter->print("ac_temp.pic="); - this->displayAdapter->print(COMPONENT_AC_STATUS_ON); + this->displayAdapter->print("s_ac_toggle.pic2="); + this->displayAdapter->print(mode != 0 ? COMPONENT_STANDBY_PIC_AC_TOGGLE_ON_PRESSED : COMPONENT_STANDBY_PIC_AC_TOGGLE_OFF_PRESSED); this->sendStopBytes(); - user_mode = mode; + this->giveSerialMutex(); } - this->displayAdapter->print("ac_sw.pic="); - this->displayAdapter->print(mode != 0 ? COMPONENT_AC_TOGGLE_PIC_ON : COMPONENT_AC_TOGGLE_PIC_OFF); - this->sendStopBytes(); - this->displayAdapter->print("ac_sw.pic2="); - this->displayAdapter->print(mode != 0 ? COMPONENT_AC_TOGGLE_PIC_ON_PRESSED : COMPONENT_AC_TOGGLE_PIC_OFF_PRESSED); - this->sendStopBytes(); - updateuserACmode(); - - updateACfanSpeed(); - - this->displayAdapter->print("ac_temp.val="); - this->displayAdapter->print(temperature); - // this->displayAdapter->print("\""); - this->sendStopBytes(); - - this->giveSerialMutex(); ESP_LOGI("ISEDisplay", "display AC state updated"); } diff --git a/src/ise_display.hpp b/src/ise_display.hpp index c830090..9be7e1b 100644 --- a/src/ise_display.hpp +++ b/src/ise_display.hpp @@ -2,6 +2,7 @@ #include "ise_display_definitions.hpp" #include +#include #include #include #include @@ -16,20 +17,27 @@ +struct lightPosition { + uint8_t row; + uint8_t column; +}; class ISEDisplay : public ESPMegaDisplay { public: - ISEDisplay(HardwareSerial* adapter); - void begin(DigitalInputCard* inputCard, DigitalOutputCard* outputCard, ClimateCard* climateCard); + ISEDisplay(HardwareSerial* adapter, const uint8_t *light_array, uint8_t row, uint8_t column); + void begin(DigitalInputCard* inputCard, DigitalOutputCard* outputCard, ClimateCard* climateCard_daikin, ClimateCard* climateCard_york, RemoteVariable* pm_switch, RemoteVariable* pm_fan_speed, RemoteVariable* ac_lock, RemoteVariable* pm_lock, ESPMegaIoT *iot); void updateLightGroupStatePageDashboard(); void updateLightGroupStatePageStandby(); void updateAirPurifierState(); void updateAirPurifierStateStandby(); + void updateSystemtoggle(); + void updateAllStandbyToggle(); void updateDateTimeText(rtctime_t time); void updateWeather(char *weather_string); void updateTempOutside(float temp_outside); void updatePMoutside(u_int16_t pm25_outside); void updatePMinside(u_int16_t pm25_inside); + void updateACState(); void loop(); @@ -42,16 +50,35 @@ class ISEDisplay : public ESPMegaDisplay { void setPMstate(bool is_pm_on, uint8_t pm_fan_speed); void setACstate(uint8_t ac_fan_speed, uint8_t ac_mode, uint8_t ac_temperature); void setLightLevel(uint8_t row, uint8_t level); + u_int8_t getLightLevel(uint8_t row); + lightPosition getRowCol(uint8_t pin); DigitalInputCard* inputCard; DigitalOutputCard *outputCard; - ClimateCard *climateCard; + ClimateCard *climateCard_daikin; + ClimateCard *climateCard_york; + ESPMegaIoT *iot; + + const uint8_t *light_array; + uint8_t row; + uint8_t column; + + RemoteVariable *pm_switch; + RemoteVariable *remote_pm_fan_speed; + RemoteVariable *ac_lock; + RemoteVariable *pm_lock; uint8_t outputCallbackHandle; uint8_t climateCallbackHandle; + uint32_t time_since_last_ac_change; + uint32_t time_since_ac_staggered_start_call; + bool ac_staggered_start_call_pending; uint8_t user_mode; + uint8_t ac_lock_state; + uint8_t pm_lock_state; uint8_t ac_mode; uint8_t ac_fan_speed; uint8_t ac_temperature; + bool ac_press_pending; uint8_t pm_fan_speed; uint8_t time_since_last_screen_update; u_int8_t lightLevelRow1; @@ -59,18 +86,28 @@ class ISEDisplay : public ESPMegaDisplay { u_int8_t lightLevelRow3; u_int8_t lightLevelRow4; - void updateACState(); + void updateuserACmode(); void updateACfanSpeed(); + void updateLightSwitch(); bool calculateLightGroupState(); + bool calculateAllState(); + void toggleSystem(); + void sendACIRcode(); + void setPMlockstate(bool is_pm_lock_on); + void setAClockstate(bool is_ac_lock_on); + void toggleACLock(); + void togglePMLock(); + void allToggleStandby(); void toggleLightGroupState(); void toggleLightGroupStateStandby(); void toggleLightIndividual(uint8_t row); - void toggleSliderLight(uint8_t row,uint8_t lightLevel); void togglePM(); void togglePMStandby(); void toggleAC(); + void setLightGroupState(uint8_t level); void toggleACStandby(); void changeUserACmode(); + void changePMfanspeed(); -}; \ No newline at end of file +}; diff --git a/src/ise_display_definitions.hpp b/src/ise_display_definitions.hpp index 87af10d..19a849b 100644 --- a/src/ise_display_definitions.hpp +++ b/src/ise_display_definitions.hpp @@ -11,6 +11,35 @@ tentetive pin mapping 4: row 4 (value from 0-3) + +change light assignment +1: row 1 column 1 +2: row 1 column 2 +3: row 2 column 1 +4: row 2 column 2 +5: row 3 column 1 +6: row 3 column 2 +7: row 4 column 1 +8: row 4 column 2 +*/ + +#define DAIKIN_MAX_TEMP 32 +#define DAIKIN_MIN_TEMP 16 + +#define YORK_MAX_TEMP 30 +#define YORK_MIN_TEMP 18 + + +#define LIGHT_ROW1_COLUMN1 10 +#define LIGHT_ROW1_COLUMN2 11 +#define LIGHT_ROW2_COLUMN1 9 +#define LIGHT_ROW2_COLUMN2 8 +#define LIGHT_ROW3_COLUMN1 3 +#define LIGHT_ROW3_COLUMN2 2 +#define LIGHT_ROW4_COLUMN1 0 +#define LIGHT_ROW4_COLUMN2 1 + +/* 5: Air Purifier status (on/off) 6: Air Purifier fan speed (0-20) @@ -21,6 +50,26 @@ lights have 4 states 3: high */ +#define COMPUTER_DESK_SWITCH_OUT 12 + +#define COMPUTER_DESK_SWITCH_IN 12 + +#define LIGHT_ROW1_COLUMN1_IN 4 +#define LIGHT_ROW1_COLUMN2_IN 5 +#define LIGHT_ROW2_COLUMN1_IN 6 +#define LIGHT_ROW2_COLUMN2_IN 7 +#define LIGHT_ROW3_COLUMN1_IN 0 +#define LIGHT_ROW3_COLUMN2_IN 1 +#define LIGHT_ROW4_COLUMN1_IN 2 +#define LIGHT_ROW4_COLUMN2_IN 3 + +#define MOTION_FRONT 8 +#define MOTION_REAR 9 + +//PM fanspeed setting +#define PM_FAN_SPEED_LOW 1 +#define PM_FAN_SPEED_MID 5 +#define PM_FAN_SPEED_HIGH 9 // #define DISPLAY_TIMEOUT 5*60*1000 // 5 minutes @@ -34,178 +83,463 @@ lights have 4 states #define PAGE_STANDBY 1 #define PAGE_DASHBOARD 2 +//gmov logo size +#define COMPONENT_LOGO_500X500 0 //original size +#define COMPONENT_LOGO_260X260 1 //use for boot page loading +#define COMPONENT_LOGO_140X140 2 //use for standby page logo +#define COMPONENT_LOGO_62X62 3 //use for dashboard page top left logo + +//font +#define COMPONENT_FONT_K2D_SB_24 0 //use for date +#define COMPONENT_FONT_BAIJ_B_32 1 //use for PM +#define COMPONENT_FONT_BAIJ_B_48 2 //use for time +#define COMPONENT_FONT_BAIJ_SB_80 3 //use for AC temperature +#define COMPONENT_FONT_BAIJ_B_40 4 //use for PM + +//color (PCO) +#define COMPONENT_COLOR_ACTIVE_BLUE 7775 +#define COMPONENT_COLOR_INACTIVE_GREY 44405 +#define COMPONENT_COLOR_WHITE 65535 +#define COMPONENT_COLOR_BLACK 0 + + +//-------------BOOT PAGE---------------- +//logo gmov boot +#define COMPONENT_OBJ_BOOT_LOGO 1 + +//boot background +#define COMPONENT_BOOT_BACKGROUND_PIC 0 +#define COMPONENT_BOOT_BACKGROUND_PIC_REFERENCE 1 + +//-------------STANDBY PAGE---------------- +//standby page object id and object name +#define COMPONENT_OBJ_STANDBY_LOGO 1 //logo +#define COMPONENT_OBJ_STANDBY_BTN_OPEN_ALL_TOGGLE 2 //s_open_all +#define COMPONENT_OBJ_STANDBY_BTN_LIGHT_TOGGLE 3 //s_light_toggle +#define COMPONENT_OBJ_STANDBY_BTN_AC_TOGGLE 4 //s_ac_toggle +#define COMPONENT_OBJ_STANDBY_BTN_PM_TOGGLE 5 //s_pm_toggle +#define COMPONENT_OBJ_STANDBY_TXT_TIME 6 //time +#define COMPONENT_OBJ_STANDBY_TXT_DATE 7 //date +#define COMPONENT_OBJ_STANDBY_TIMER_IDLE 8 //idle_timer +#define COMPONENT_OBJ_STANDBY_TXT_PM_OUTSIDE 9 //pm_out +#define COMPONENT_OBJ_STANDBY_TXT_PM_INSIDE 10 //pm_in + +//---------standby page picture id and picture name------------ + +//Standby background +#define COMPONENT_STANDBY_PIC_BACKGROUND 2 +#define COMPONENT_STANDBY_PIC_BACKGROUND_REFERENCE 3 + +//Standby open all toggle +#define COMPONENT_STANDBY_PIC_OPEN_ALL_TOGGLE_OFF 4 +#define COMPONENT_STANDBY_PIC_OPEN_ALL_TOGGLE_OFF_PRESSED 5 +#define COMPONENT_STANDBY_PIC_OPEN_ALL_TOGGLE_ON 6 +#define COMPONENT_STANDBY_PIC_OPEN_ALL_TOGGLE_ON_PRESSED 7 + +//Standby adv setting toggle +#define COMPONENT_STANDBY_PIC_ADV_SETTING_TOGGLE_OFF 88 +#define COMPONENT_STANDBY_PIC_ADV_SETTING_TOGGLE_OFF_PRESSED 89 +#define COMPONENT_STANDBY_PIC_ADV_SETTING_TOGGLE_ON 90 +#define COMPONENT_STANDBY_PIC_ADV_SETTING_TOGGLE_ON_PRESSED 91 + +//Standby light toggle +#define COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_OFF 8 +#define COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_OFF_PRESSED 9 +#define COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_ON 10 +#define COMPONENT_STANDBY_PIC_LIGHT_TOGGLE_ON_PRESSED 11 + +//Standby AC toggle +#define COMPONENT_STANDBY_PIC_AC_TOGGLE_OFF 12 +#define COMPONENT_STANDBY_PIC_AC_TOGGLE_OFF_PRESSED 13 +#define COMPONENT_STANDBY_PIC_AC_TOGGLE_ON 14 +#define COMPONENT_STANDBY_PIC_AC_TOGGLE_ON_PRESSED 15 + +//Standby PM toggle +#define COMPONENT_STANDBY_PIC_PM_TOGGLE_OFF 16 +#define COMPONENT_STANDBY_PIC_PM_TOGGLE_OFF_PRESSED 17 +#define COMPONENT_STANDBY_PIC_PM_TOGGLE_ON 18 +#define COMPONENT_STANDBY_PIC_PM_TOGGLE_ON_PRESSED 19 + +//-------------DASHBOARD PAGE---------------- +//dashboard page object id and object name + +//AC +#define COMPONENT_OBJ_DASHBOARD_NUM_AC_TEMP 1 //ac_temp +#define COMPONENT_OBJ_DASHBOARD_BTN_AC_TOGGLE 2 //ac_sw +#define COMPONENT_OBJ_DASHBOARD_BTN_AC_MODE 3 //ac_mode +#define COMPONENT_OBJ_DASHBOARD_BTN_AC_FAN_SPEED 4 //ac_speed +#define COMPONENT_OBJ_DASHBOARD_BTN_AC_TEMP_MINUS 5 //ac_minus +#define COMPONENT_OBJ_DASHBOARD_BTN_AC_TEMP_PLUS 6 //ac_plus + +//PM +#define COMPONENT_OBJ_DASHBOARD_BTN_PM_TOGGLE 7 //pm_sw +#define COMPONENT_OBJ_DASHBOARD_TXT_PM_INSIDE 8 //pm_in +#define COMPONENT_OBJ_DASHBOARD_TXT_PM_OUTSIDE 9 //pm_out + +//DECAPRICATED +#define DONTUSE_COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_MASTER 10 //DONT USE THIS D_light_master + +//Light Pic Holder +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW1 11 //light_row1 +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW2 12 //light_row2 +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW3 13 //light_row3 +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_LIGHT_ROW4 14 //light_row4 + +//Light Button +#define COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW1 15 //light_row1_sw +#define COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW2 16 //light_row2_sw +#define COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW3 17 //light_row3_sw +#define COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_ROW4 18 //light_row4_sw + +//Timer +#define COMPONENT_OBJ_DASHBOARD_TIMER_TEN_SEC 19 //time_10sec +#define COMPONENT_OBJ_DASHBOARD_VAL_TIME_PAST 20 //time_past +#define COMPONENT_OBJ_DASHBOARD_TIMER_INACTIVE_CHECK 21 //inactive_check + +//System toggle +#define COMPONENT_OBJ_DASHBOARD_BTN_SYSTEM_TOGGLE 22 //system_toggle + +//PM Button +#define COMPONENT_OBJ_DASHBOARD_BTN_PM_SPEED 23 //pm_speed +#define COMPONENT_OBJ_DASHBOARD_BTN_PM_MODE 24 //pm_mode + +//Light Master Pic Holder +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_MASTER_LIGHT 25 //master_light + +//Logo +#define COMPONENT_OBJ_DASHBOARD_LOGO 26 //small_ise_logo + +//Lock Pic Holder +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_PM_LOCK 27 //pm_lock +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_AC_LOCK 28 //ac_lock + +//Light Master Button +#define COMPONENT_OBJ_DASHBOARD_BTN_LIGHT_MASTER 29 //light_m_sw + +//Light Master Hotspot +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV1 30 //light_m_lv1 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV2 31 //light_m_lv2 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_MASTER_LV3 32 //light_m_lv3 + +//Light Row1 Hotspot +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV1 33 //light_row1_lv1 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV2 34 //light_row1_lv2 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW1_LV3 35 //light_row1_lv3 + +//Light Row2 Hotspot +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV1 36 //light_row2_lv1 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV2 37 //light_row2_lv2 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW2_LV3 38 //light_row2_lv3 + +//Light Row3 Hotspot +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV1 39 //light_row3_lv1 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV2 40 //light_row3_lv2 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW3_LV3 41 //light_row3_lv3 + +//Light Row4 Hotspot +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV1 42 //light_row4_lv1 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV2 43 //light_row4_lv2 +#define COMPONENT_OBJ_DASHBOARD_HOTSPOT_LIGHT_ROW4_LV3 44 //light_row4_lv3 + +//Degree Pic Holder +#define COMPONENT_OBJ_DASHBOARD_HOLDER_PIC_C_DEGREE 45 //c_degree + +//-----------------dashboard page picture id and picture name---------------- + +//Dashboard Background +#define COMPONENT_DASHBOARD_PIC_BACKGROUND_WITH_C 20 +#define COMPONENT_DASHBOARD_PIC_BACKGROUND 21 //use this +#define COMPONENT_DASHBOARD_PIC_BACKGROUND_REFERENCE 22 + +//System Toggle Button +#define COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_OFF 23 +#define COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_OFF_PRESSED 24 +#define COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_ON 25 +#define COMPONENT_DASHBOARD_PIC_SYSTEM_TOGGLE_ON_PRESSED 26 + +//AC Temperature Minus +#define COMPONENT_DASHBOARD_PIC_AC_TEMP_MINUS 27 +#define COMPONENT_DASHBOARD_PIC_AC_TEMP_MINUS_PRESSED 28 + +//AC Temperature Plus +#define COMPONENT_DASHBOARD_PIC_AC_TEMP_PLUS 29 +#define COMPONENT_DASHBOARD_PIC_AC_TEMP_PLUS_PRESSED 30 + +//AC Mode Cool +#define COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_OFF 31 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_OFF_PRESSED 32 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_ON 33 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_COOL_ON_PRESSED 34 + +//AC Mode Dry +#define COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_OFF 35 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_OFF_PRESSED 36 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_ON 37 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_DRY_ON_PRESSED 38 + +//AC Mode Fan +#define COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_OFF 39 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_OFF_PRESSED 40 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_ON 41 +#define COMPONENT_DASHBOARD_PIC_AC_MODE_FAN_ON_PRESSED 42 + +//AC Fan Speed Auto +#define COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_OFF 43 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_OFF_PRESSED 44 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_ON 45 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_AUTO_ON_PRESSED 46 + +//AC Fan Speed High +#define COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_OFF 47 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_OFF_PRESSED 48 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_ON 49 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_HIGH_ON_PRESSED 50 + +//AC Fan Speed Mid +#define COMPONENT_DASHBOARD_PIC_AC_FAN_MID_OFF 51 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_MID_OFF_PRESSED 52 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_MID_ON 53 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_MID_ON_PRESSED 54 + +//AC Fan Speed Low +#define COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_OFF 55 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_OFF_PRESSED 56 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_ON 57 +#define COMPONENT_DASHBOARD_PIC_AC_FAN_LOW_ON_PRESSED 58 + +//AC Toggle Button +#define COMPONENT_DASHBOARD_PIC_AC_TOGGLE_OFF 59 +#define COMPONENT_DASHBOARD_PIC_AC_TOGGLE_OFF_PRESSED 60 +#define COMPONENT_DASHBOARD_PIC_AC_TOGGLE_ON 61 +#define COMPONENT_DASHBOARD_PIC_AC_TOGGLE_ON_PRESSED 62 + +//PM Toggle Button +#define COMPONENT_DASHBOARD_PIC_PM_TOGGLE_OFF 63 +#define COMPONENT_DASHBOARD_PIC_PM_TOGGLE_OFF_PRESSED 64 +#define COMPONENT_DASHBOARD_PIC_PM_TOGGLE_ON 65 +#define COMPONENT_DASHBOARD_PIC_PM_TOGGLE_ON_PRESSED 66 + +//Light Switch Button +#define COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_OFF 67 +#define COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_OFF_PRESSED 68 +#define COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_ON 69 +#define COMPONENT_DASHBOARD_PIC_LIGHT_SWITCH_ON_PRESSED 70 + +//Light Row Level +#define COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_0 71 +#define COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_1 72 +#define COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_2 73 +#define COMPONENT_DASHBOARD_PIC_LIGHT_ROW_LEVEL_3 74 + +//Light Master Switch Button +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_OFF 75 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_OFF_PRESSED 76 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_ON 77 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_ON_PRESSED 78 + +//Light Master Level +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_D 79 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_0 80 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_1 81 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_2 82 +#define COMPONENT_DASHBOARD_PIC_LIGHT_MASTER_LEVEL_3 83 + +//Lock Pic +#define COMPONENT_DASHBOARD_PIC_LOCK 84 +#define COMPONENT_DASHBOARD_PIC_UNLOCK 85 + +//Degree Pic +#define COMPONENT_DASHBOARD_PIC_DEGREE_C_OFF 86 +#define COMPONENT_DASHBOARD_PIC_DEGREE_C_ON 87 + + + + + + + + + + + + + + + +//-----------------DECAPRICATED---------------- + //boot page //logo gmov boot -#define COMPONENT_LOGO_BOOT 1 -#define COMPONENT_LOGO_BOOT_VID 1 +#define OLD_COMP_LOGO_BOOT 1 +#define OLD_COMP_LOGO_BOOT_VID 1 //boot background -#define COMPONENT_BACKGROUND_BOOT_PIC 43 +#define OLD_COMP_BACKGROUND_BOOT_PIC 43 //standby page object id -#define COMPONENT_LOGO_STANDBY 1 -#define COMPONENT_LOGO_STANDBY_VID 2 +#define OLD_COMP_LOGO_STANDBY 1 +#define OLD_COMP_LOGO_STANDBY_VID 2 -#define COMPONENT_STANDBY_OPEN_ALL_TOGGLE 2 -#define COMPONENT_STANDBY_LIGHT_TOGGLE 3 -#define COMPONENT_STANDBY_AC_TOGGLE 4 -#define COMPONENT_STANDBY_PM_TOGGLE 5 +#define OLD_COMP_STANDBY_OPEN_ALL_TOGGLE 2 +#define OLD_COMP_STANDBY_LIGHT_TOGGLE 3 +#define OLD_COMP_STANDBY_AC_TOGGLE 4 +#define OLD_COMP_STANDBY_PM_TOGGLE 5 //text -#define COMPONENT_STANDBY_TIME_TXT 6 -#define COMPONENT_STANDBY_DATE_TXT 7 -#define COMPONENT_STANDBY_OUTSIDE_TEMP_TXT 8 +#define OLD_COMP_STANDBY_TIME_TXT 6 +#define OLD_COMP_STANDBY_DATE_TXT 7 +#define OLD_COMP_STANDBY_OUTSIDE_TEMP_TXT 8 -#define COMPONENT_STANDBY_TIMER 9 -#define COMPONENT_STANDBY_WEATHER_ICON 10 +#define OLD_COMP_STANDBY_TIMER 9 +#define OLD_COMP_STANDBY_WEATHER_ICON 10 //standby page picture id -#define COMPONENT_BACKGROUND_PIC 44 -#define COMPONENT_BACKGROUND_REFERENCE_PIC 45 +#define OLD_COMP_BACKGROUND_PIC 44 +#define OLD_COMP_BACKGROUND_REFERENCE_PIC 45 -#define COMPONENT_STANDBY_OPEN_ALL_TOGGLE_PIC_OFF 46 -#define COMPONENT_STANDBY_OPEN_ALL_TOGGLE_PIC_OFF_PRESSED 47 -#define COMPONENT_STANDBY_OPEN_ALL_TOGGLE_PIC_ON 48 -#define COMPONENT_STANDBY_OPEN_ALL_TOGGLE_PIC_ON_PRESSED 49 +#define OLD_COMP_STANDBY_OPEN_ALL_TOGGLE_PIC_OFF 46 +#define OLD_COMP_STANDBY_OPEN_ALL_TOGGLE_PIC_OFF_PRESSED 47 +#define OLD_COMP_STANDBY_OPEN_ALL_TOGGLE_PIC_ON 48 +#define OLD_COMP_STANDBY_OPEN_ALL_TOGGLE_PIC_ON_PRESSED 49 -#define COMPONENT_STANDBY_AC_PIC_OFF 50 -#define COMPONENT_STANDBY_AC_PIC_OFF_PRESSED 51 -#define COMPONENT_STANDBY_AC_PIC_ON 52 -#define COMPONENT_STANDBY_AC_PIC_ON_PRESSED 53 +#define OLD_COMP_STANDBY_AC_PIC_OFF 50 +#define OLD_COMP_STANDBY_AC_PIC_OFF_PRESSED 51 +#define OLD_COMP_STANDBY_AC_PIC_ON 52 +#define OLD_COMP_STANDBY_AC_PIC_ON_PRESSED 53 -#define COMPONENT_STANDBY_LIGHT_PIC_OFF 54 -#define COMPONENT_STANDBY_LIGHT_PIC_OFF_PRESSED 55 -#define COMPONENT_STANDBY_LIGHT_PIC_ON 56 -#define COMPONENT_STANDBY_LIGHT_PIC_ON_PRESSED 57 +#define OLD_COMP_STANDBY_LIGHT_PIC_OFF 54 +#define OLD_COMP_STANDBY_LIGHT_PIC_OFF_PRESSED 55 +#define OLD_COMP_STANDBY_LIGHT_PIC_ON 56 +#define OLD_COMP_STANDBY_LIGHT_PIC_ON_PRESSED 57 -#define COMPONENT_STANDBY_PM_PIC_OFF 58 -#define COMPONENT_STANDBY_PM_PIC_OFF_PRESSED 59 -#define COMPONENT_STANDBY_PM_PIC_ON 60 -#define COMPONENT_STANDBY_PM_PIC_ON_PRESSED 61 +#define OLD_COMP_STANDBY_PM_PIC_OFF 58 +#define OLD_COMP_STANDBY_PM_PIC_OFF_PRESSED 59 +#define OLD_COMP_STANDBY_PM_PIC_ON 60 +#define OLD_COMP_STANDBY_PM_PIC_ON_PRESSED 61 -#define COMPONENT_REFERENCE_BACKGROUND_PIC 62 +#define OLD_COMP_REFERENCE_BACKGROUND_PIC 62 //dashboard page //dashboard page object id -#define COMPONENT_AC_TOGGLE_BUTTON 3 -#define COMPONENT_AC_MODE 4 -#define COMPONENT_AC_FAN_SPEED 5 -#define COMPONENT_AC_TEMP_DOWN_BUTTON 6 -#define COMPONENT_AC_TEMP_UP_BUTTON 7 +#define OLD_COMP_AC_TOGGLE_BUTTON 3 +#define OLD_COMP_AC_MODE 4 +#define OLD_COMP_AC_FAN_SPEED 5 +#define OLD_COMP_AC_TEMP_DOWN_BUTTON 6 +#define OLD_COMP_AC_TEMP_UP_BUTTON 7 -#define COMPONENT_PM_TOGGLE_BUTTON 8 -#define COMPONENT_PM_FAN_SPEED_DECREASE 9 -#define COMPONENT_PM_FAN_SPEED_INCREASE 10 +#define OLD_COMP_PM_TOGGLE_BUTTON 8 +#define OLD_COMP_PM_FAN_SPEED_DECREASE 9 +#define OLD_COMP_PM_FAN_SPEED_INCREASE 10 -#define COMPONENT_PM_INSIDE_TXT 11 -#define COMPONENT_PM_OUTSIDE_TXT 12 +#define OLD_COMP_PM_INSIDE_TXT 11 +#define OLD_COMP_PM_OUTSIDE_TXT 12 -#define COMPONENT_LIGHT_MASTER_BUTTON 13 -#define COMPONENT_LIGHT_ROW1_PIC_PLACEHOLDER 14 -#define COMPONENT_LIGHT_ROW2_PIC_PLACEHOLDER 15 -#define COMPONENT_LIGHT_ROW3_PIC_PLACEHOLDER 16 -#define COMPONENT_LIGHT_ROW4_PIC_PLACEHOLDER 17 +#define OLD_COMP_LIGHT_MASTER_BUTTON 13 +#define OLD_COMP_LIGHT_ROW1_PIC_PLACEHOLDER 14 +#define OLD_COMP_LIGHT_ROW2_PIC_PLACEHOLDER 15 +#define OLD_COMP_LIGHT_ROW3_PIC_PLACEHOLDER 16 +#define OLD_COMP_LIGHT_ROW4_PIC_PLACEHOLDER 17 -#define COMPONENT_LIGHT_MASTER_LEVEL1_TOUCHPOINT 18 -#define COMPONENT_LIGHT_MASTER_LEVEL2_TOUCHPOINT 19 -#define COMPONENT_LIGHT_MASTER_LEVEL3_TOUCHPOINT 20 +#define OLD_COMP_LIGHT_MASTER_LEVEL1_TOUCHPOINT 18 +#define OLD_COMP_LIGHT_MASTER_LEVEL2_TOUCHPOINT 19 +#define OLD_COMP_LIGHT_MASTER_LEVEL3_TOUCHPOINT 20 -#define COMPONENT_DASHBOARD_TIME_TXT 21 -#define COMPONENT_DASHBOARD_DATE_TXT 22 -#define COMPONENT_DASHBOARD_OUTSIDE_TEMP_TXT 23 +#define OLD_COMP_DASHBOARD_TIME_TXT 21 +#define OLD_COMP_DASHBOARD_DATE_TXT 22 +#define OLD_COMP_DASHBOARD_OUTSIDE_TEMP_TXT 23 -#define COMPONENT_LIGHT_ROW1_SLIDER 24 -#define COMPONENT_LIGHT_ROW2_SLIDER 25 -#define COMPONENT_LIGHT_ROW3_SLIDER 26 -#define COMPONENT_LIGHT_ROW4_SLIDER 27 +#define OLD_COMP_LIGHT_ROW1_SLIDER 24 +#define OLD_COMP_LIGHT_ROW2_SLIDER 25 +#define OLD_COMP_LIGHT_ROW3_SLIDER 26 +#define OLD_COMP_LIGHT_ROW4_SLIDER 27 -#define COMPONENT_LIGHT_ROW1_SWITCH 28 -#define COMPONENT_LIGHT_ROW2_SWITCH 29 -#define COMPONENT_LIGHT_ROW3_SWITCH 30 -#define COMPONENT_LIGHT_ROW4_SWITCH 31 +#define OLD_COMP_LIGHT_ROW1_SWITCH 28 +#define OLD_COMP_LIGHT_ROW2_SWITCH 29 +#define OLD_COMP_LIGHT_ROW3_SWITCH 30 +#define OLD_COMP_LIGHT_ROW4_SWITCH 31 -#define COMPONENT_DASHBOARD_WEATHER_ICON 32 +#define OLD_COMP_DASHBOARD_WEATHER_ICON 32 //dashboard page picture id -#define COMPONENT_DASHBOARD_REFERENCE_BACKGROUND_PIC 0 -#define COMPONENT_DASHBOARD_BACKGROUND_PIC 1 -#define COMPONENT_DASHBOARD_BACKGROUND_VARIANT_PIC 2 +#define OLD_COMP_DASHBOARD_REFERENCE_BACKGROUND_PIC 0 +#define OLD_COMP_DASHBOARD_BACKGROUND_PIC 1 +#define OLD_COMP_DASHBOARD_BACKGROUND_VARIANT_PIC 2 //AC on/off -#define COMPONENT_AC_TOGGLE_PIC_OFF 3 -#define COMPONENT_AC_TOGGLE_PIC_OFF_PRESSED 4 -#define COMPONENT_AC_TOGGLE_PIC_ON 5 -#define COMPONENT_AC_TOGGLE_PIC_ON_PRESSED 6 -#define COMPONENT_AC_TEMP_DOWN_PIC 7 -#define COMPONENT_AC_TEMP_DOWN_PIC_PRESSED 8 -#define COMPONENT_AC_TEMP_UP_PIC 9 -#define COMPONENT_AC_TEMP_UP_PIC_PRESSED 10 +#define OLD_COMP_AC_TOGGLE_PIC_OFF 3 +#define OLD_COMP_AC_TOGGLE_PIC_OFF_PRESSED 4 +#define OLD_COMP_AC_TOGGLE_PIC_ON 5 +#define OLD_COMP_AC_TOGGLE_PIC_ON_PRESSED 6 +#define OLD_COMP_AC_TEMP_DOWN_PIC 7 +#define OLD_COMP_AC_TEMP_DOWN_PIC_PRESSED 8 +#define OLD_COMP_AC_TEMP_UP_PIC 9 +#define OLD_COMP_AC_TEMP_UP_PIC_PRESSED 10 -#define COMPONENT_AC_FAN_MODE_AUTO_PIC 11 -#define COMPONENT_AC_FAN_MODE_AUTO_PIC_PRESSED 12 -#define COMPONENT_AC_FAN_MODE_HIGH_PIC 13 -#define COMPONENT_AC_FAN_MODE_HIGH_PIC_PRESSED 14 -#define COMPONENT_AC_FAN_MODE_MID_PIC 15 -#define COMPONENT_AC_FAN_MODE_MID_PIC_PRESSED 16 -#define COMPONENT_AC_FAN_MODE_LOW_PIC 17 -#define COMPONENT_AC_FAN_MODE_LOW_PIC_PRESSED 18 +#define OLD_COMP_AC_FAN_MODE_AUTO_PIC 11 +#define OLD_COMP_AC_FAN_MODE_AUTO_PIC_PRESSED 12 +#define OLD_COMP_AC_FAN_MODE_HIGH_PIC 13 +#define OLD_COMP_AC_FAN_MODE_HIGH_PIC_PRESSED 14 +#define OLD_COMP_AC_FAN_MODE_MID_PIC 15 +#define OLD_COMP_AC_FAN_MODE_MID_PIC_PRESSED 16 +#define OLD_COMP_AC_FAN_MODE_LOW_PIC 17 +#define OLD_COMP_AC_FAN_MODE_LOW_PIC_PRESSED 18 -#define COMPONENT_AC_MODE_DRY_PIC 19 -#define COMPONENT_AC_MODE_DRY_PIC_PRESSED 20 -#define COMPONENT_AC_MODE_COOL_PIC 21 -#define COMPONENT_AC_MODE_COOL_PIC_PRESSED 22 -#define COMPONENT_AC_MODE_FAN_PIC 23 -#define COMPONENT_AC_MODE_FAN_PIC_PRESSED 24 +#define OLD_COMP_AC_MODE_DRY_PIC 19 +#define OLD_COMP_AC_MODE_DRY_PIC_PRESSED 20 +#define OLD_COMP_AC_MODE_COOL_PIC 21 +#define OLD_COMP_AC_MODE_COOL_PIC_PRESSED 22 +#define OLD_COMP_AC_MODE_FAN_PIC 23 +#define OLD_COMP_AC_MODE_FAN_PIC_PRESSED 24 //pm; air purifier -#define COMPONENT_PM_TOGGLE_PIC_OFF 25 -#define COMPONENT_PM_TOGGLE_PIC_OFF_PRESSED 26 -#define COMPONENT_PM_TOGGLE_PIC_ON 27 -#define COMPONENT_PM_TOGGLE_PIC_ON_PRESSED 28 +#define OLD_COMP_PM_TOGGLE_PIC_OFF 25 +#define OLD_COMP_PM_TOGGLE_PIC_OFF_PRESSED 26 +#define OLD_COMP_PM_TOGGLE_PIC_ON 27 +#define OLD_COMP_PM_TOGGLE_PIC_ON_PRESSED 28 -#define COMPONENT_PM_FAN_SPEED_DECREASE_PIC 29 -#define COMPONENT_PM_FAN_SPEED_DECREASE_PIC_PRESSED 30 -#define COMPONENT_PM_FAN_SPEED_INCREASE_PIC 31 -#define COMPONENT_PM_FAN_SPEED_INCREASE_PIC_PRESSED 32 +#define OLD_COMP_PM_FAN_SPEED_DECREASE_PIC 29 +#define OLD_COMP_PM_FAN_SPEED_DECREASE_PIC_PRESSED 30 +#define OLD_COMP_PM_FAN_SPEED_INCREASE_PIC 31 +#define OLD_COMP_PM_FAN_SPEED_INCREASE_PIC_PRESSED 32 //AC status indicator -#define COMPONENT_AC_STATUS_OFF 33 -#define COMPONENT_AC_STATUS_ON 34 +#define OLD_COMP_AC_STATUS_OFF 33 +#define OLD_COMP_AC_STATUS_ON 34 //light master -#define COMPONENT_LIGHT_MASTER_OFF 35 -#define COMPONENT_LIGHT_MASTER_OFF_PRESSED 36 -#define COMPONENT_LIGHT_MASTER_ON 37 -#define COMPONENT_LIGHT_MASTER_ON_PRESSED 38 +#define OLD_COMP_LIGHT_MASTER_OFF 35 +#define OLD_COMP_LIGHT_MASTER_OFF_PRESSED 36 +#define OLD_COMP_LIGHT_MASTER_ON 37 +#define OLD_COMP_LIGHT_MASTER_ON_PRESSED 38 //light level component -#define COMPONENT_LIGHT_LEVEL_0 39 -#define COMPONENT_LIGHT_LEVEL_1 40 -#define COMPONENT_LIGHT_LEVEL_2 41 -#define COMPONENT_LIGHT_LEVEL_3 42 +#define OLD_COMP_LIGHT_LEVEL_0 39 +#define OLD_COMP_LIGHT_LEVEL_1 40 +#define OLD_COMP_LIGHT_LEVEL_2 41 +#define OLD_COMP_LIGHT_LEVEL_3 42 //weather icon legend -#define COMPONENT_WEATHER_ICON_FAIR_DAY 63 -#define COMPONENT_WEATHER_ICON_FAIR_NIGHT 64 -#define COMPONENT_WEATHER_ICON_CLOUDY 65 -#define COMPONENT_WEATHER_ICON_CLEARSKY_DAY 66 -#define COMPONENT_WEATHER_ICON_CLEARSKY_NIGHT 67 -#define COMPONENT_WEATHER_ICON_PARTLYCLOUDY_DAY 68 -#define COMPONENT_WEATHER_ICON_PARTLYCLOUDY_NIGHT 69 -#define COMPONENT_WEATHER_ICON_HEAVY_RAIN 70 -#define COMPONENT_WEATHER_ICON_HEAVY_RAIN_AND_THUNDER 71 -#define COMPONENT_WEATHER_ICON_RAIN_AND_THUNDER 72 -#define COMPONENT_WEATHER_ICON_RAIN 73 -#define COMPONENT_WEATHER_ICON_LIGHT_RAIN 74 -#define COMPONENT_WEATHER_ICON_FOG 75 +#define OLD_COMP_WEATHER_ICON_FAIR_DAY 63 +#define OLD_COMP_WEATHER_ICON_FAIR_NIGHT 64 +#define OLD_COMP_WEATHER_ICON_CLOUDY 65 +#define OLD_COMP_WEATHER_ICON_CLEARSKY_DAY 66 +#define OLD_COMP_WEATHER_ICON_CLEARSKY_NIGHT 67 +#define OLD_COMP_WEATHER_ICON_PARTLYCLOUDY_DAY 68 +#define OLD_COMP_WEATHER_ICON_PARTLYCLOUDY_NIGHT 69 +#define OLD_COMP_WEATHER_ICON_HEAVY_RAIN 70 +#define OLD_COMP_WEATHER_ICON_HEAVY_RAIN_AND_THUNDER 71 +#define OLD_COMP_WEATHER_ICON_RAIN_AND_THUNDER 72 +#define OLD_COMP_WEATHER_ICON_RAIN 73 +#define OLD_COMP_WEATHER_ICON_LIGHT_RAIN 74 +#define OLD_COMP_WEATHER_ICON_FOG 75 //need to toggle 4 row of light independently and have one master switch that can control all diff --git a/src/main.cpp b/src/main.cpp index 545bfe1..fc54fcd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,34 +1,534 @@ #include +/*********************************************** + * Begin Configuration * + ***********************************************/ + +// Analog Card & Current Transformer Configuration +#ifdef ANALOG_ENABLE +bool analogCardAvailable = false; +AnalogCard analogCard = AnalogCard(); +float voltage = CT_RMS_VOLTAGE; +#define CT_INTERVAL 5000 +CurrentTransformerCard ct1 = CurrentTransformerCard(&analogCard, 0, &voltage, &adc2current, CT_INTERVAL); +CurrentTransformerCard ct2 = CurrentTransformerCard(&analogCard, 1, &voltage, &adc2current, CT_INTERVAL); +CurrentTransformerCard ct3 = CurrentTransformerCard(&analogCard, 2, &voltage, &adc2current, CT_INTERVAL); +CurrentTransformerCard ct4 = CurrentTransformerCard(&analogCard, 3, &voltage, &adc2current, CT_INTERVAL); +CurrentTransformerCard ct5 = CurrentTransformerCard(&analogCard, 6, &voltage, &adc2current, CT_INTERVAL); +CurrentTransformerCard ct6 = CurrentTransformerCard(&analogCard, 7, &voltage, &adc2current, CT_INTERVAL); +float adc2current(uint16_t adc_val) +{ + // float voltage = adc_val * 0.0007-0.1994; + if (adc_val > 64000) { + // ADC Value is too high, return 0 + return 0; + } + float adc_voltage = adc_val * 0.0007; + // 0-10V Output with 30A Current Rating CT + float ct_current = adc_voltage / 10.0 * 30.0; + return ct_current; +} + +#endif + + +// Remote Variables +RemoteVariable pm25_in = RemoteVariable(); RemoteVariable pm25_out = RemoteVariable(); RemoteVariable temp_out = RemoteVariable(); RemoteVariable weather = RemoteVariable(); -RemoteVariable pm25_in = RemoteVariable(); +RemoteVariable pm_switch = RemoteVariable(); +RemoteVariable pm_fan_speed = RemoteVariable(); +RemoteVariable pm_lock = RemoteVariable(); +RemoteVariable ac_lock = RemoteVariable(); -const char *mode_names[] = {"off", "fan_only", "cool"}; + + +// Light Configuration +uint8_t row = 4; +uint8_t column = 2; +const uint8_t light_array[4][2] = { + {LIGHT_ROW1_COLUMN1, LIGHT_ROW1_COLUMN2}, + {LIGHT_ROW2_COLUMN1, LIGHT_ROW2_COLUMN2}, + {LIGHT_ROW3_COLUMN1, LIGHT_ROW3_COLUMN2}, + {LIGHT_ROW4_COLUMN1, LIGHT_ROW4_COLUMN2}}; + +// Air Conditioner Configuration +const char *mode_names_daikin[] = {"off", "fan_only", "cool", "dry"}; +const char *mode_names_york[] = {"off", "fan_only", "cool"}; const char *fan_speed_names[] = {"auto", "high", "medium", "low"}; -AirConditioner ac = { - .max_temperature = 30, - .min_temperature = 15, - .modes = 3, - .mode_names = mode_names, +AirConditioner ac_daikin = { + .max_temperature = DAIKIN_MAX_TEMP, + .min_temperature = DAIKIN_MIN_TEMP, + .modes = 4, + .mode_names = mode_names_daikin, .fan_speeds = 4, .fan_speed_names = fan_speed_names, - .getInfraredCode = &getInfraredCode}; + .getInfraredCode = &getInfraredCode_daikin}; + +AirConditioner ac_york = { + .max_temperature = YORK_MAX_TEMP, + .min_temperature = YORK_MIN_TEMP, + .modes = 3, + .mode_names = mode_names_york, + .fan_speeds = 4, + .fan_speed_names = fan_speed_names, + .getInfraredCode = &getInfraredCode_york}; /*********************************************** * End Configuration * ***********************************************/ ESPMegaPRO espmega = ESPMegaPRO(); -ISEDisplay iseDisplay = ISEDisplay(&iseDisplayAdapter); +ISEDisplay iseDisplay = ISEDisplay(&iseDisplayAdapter, &light_array[0][0], row, column); -ClimateCard climateCard = ClimateCard(AIR_CONDITIONER_IR_PIN, ac, - AIR_CONDITIONER_SENSOR_TYPE, AIR_CONDITIONER_SENSOR_PIN, - AIR_CONDITIONER_RMT_CHANNEL); +ESPMegaDisplayOTA iseDisplayOTA = ESPMegaDisplayOTA(); +ESPMegaDisplayOTA internalDisplayOTA = ESPMegaDisplayOTA(); + +ClimateCard climateCard_daikin = ClimateCard(AIR_CONDITIONER_DAIKIN_IR_PIN, ac_daikin, + AIR_CONDITIONER_SENSOR_TYPE, AIR_CONDITIONER_SENSOR_PIN, + AIR_CONDITIONER_RMT_CHANNEL0); + +ClimateCard climateCard_york = ClimateCard(AIR_CONDITIONER_YORK_IR_PIN, ac_york, + AC_SENSOR_TYPE_NONE, 0, + AIR_CONDITIONER_RMT_CHANNEL1); void handleMqttMessage(char *topic, char *payload) { + // Unused for now +} +void mqttSubscribeCallback() +{ + espmega.updateTimeFromNTP(); +} + +void setup() +{ + + + // ------------ Display Pre Initialization Routine ------------ + Serial.begin(115200); + iseDisplayAdapter.begin(ISE_DISPLAY_BAUD_RATE, SERIAL_8N1, ISE_DISPLAY_RX_PIN, ISE_DISPLAY_TX_PIN); + sendExtStopBytes(); + iseDisplayAdapter.print("rest"); + sendExtStopBytes(); + sendStopBytes(); + Serial.print("rest"); + sendStopBytes(); + Serial.print("boot_state.txt=\"Core Initializing . . .\""); + sendStopBytes(); + // ------------ End Display Pre Initialization Routine ------------ + + + // Give flow of control to OS and scheduler + espmega.begin(); + + // Set time zone to UTC+7 + espmega.setTimezone("ICT-7"); + + // set debounce time to 500 for pin 0-11 + for (uint16_t i = 0; i < 16; i++) + { + espmega.inputs.setDebounceTime(i, 75); + } + + // ------------ IoT Module Initialization Routine ------------ + Serial.print("boot_state.txt=\"IoT Initializing . . .\""); + sendStopBytes(); + espmega.enableIotModule(); + ETH.begin(); + espmega.iot->bindEthernetInterface(Ð); + Serial.print("boot_state.txt=\"Network Initializing . . .\""); + sendStopBytes(); + espmega.iot->loadNetworkConfig(); + espmega.iot->connectNetwork(); + Serial.print("boot_state.txt=\"MQTT Initializing . . .\""); + sendStopBytes(); + espmega.iot->loadMqttConfig(); + espmega.iot->registerSubscribeCallback(&mqttSubscribeCallback); + espmega.iot->connectToMqtt(); + Serial.print("boot_state.txt=\"Display Initializing . . .\""); + espmega.enableWebServer(80); + // ------------ End IoT Module Initialization Routine ------------ + + // ------------ Display Post Initialization Routine ------------ + espmega.enableInternalDisplay(&Serial); + // ------------ End Display Post Initialization Routine ------------ + + // ------------ Inputs and Outputs Initialization Routine ------------ + espmega.inputs.registerCallback(on_pin_change); + espmega.outputs.setAutoSaveToFRAM(true); + // Set value of pin 0-12 to 4095 + for (uint8_t i = 0; i < 13; i++) + { + espmega.outputs.setValue(i, 4095); + } + // ------------ End Inputs and Outputs Initialization Routine ------------ + espmega.outputs.setState(12, true); + espmega.outputs.setValue(12, 4095); + espmega.installCard(2, &climateCard_daikin); + climateCard_daikin.bindFRAM(&espmega.fram, 5000); + climateCard_daikin.loadStateFromFRAM(); + climateCard_daikin.setFRAMAutoSave(true); + espmega.display->bindClimateCard(&climateCard_daikin); + +// Input callbacks +// pre-load the input buffers + ESP_LOGV("ISE IoT OS", "Pre-loading input buffers"); + espmega.inputs.preloadInputBuffer(); + + // ------------ Climate Cards Initialization Routine ------------ + ESP_LOGD("ISE OS", "Setting up climate cards"); + + // Daikin Climate Card + ESP_LOGD("ISE OS", "Installing daikin climate card"); + espmega.installCard(2, &climateCard_daikin); + climateCard_daikin.bindFRAM(&espmega.fram, 5000); + climateCard_daikin.loadStateFromFRAM(); + climateCard_daikin.setFRAMAutoSave(true); + // Bind daikin climate card to the internal display + espmega.display->bindClimateCard(&climateCard_daikin); + + // York Climate Card + ESP_LOGD("ISE OS", "Installing york climate card"); + espmega.installCard(3, &climateCard_york); + climateCard_york.bindFRAM(&espmega.fram, 5005); + climateCard_york.loadStateFromFRAM(); + climateCard_york.setFRAMAutoSave(true); + // ------------ End Climate Cards Initialization Routine ------------ + + // ------------ Current Transformer Cards Initialization Routine ------------ + #ifdef ANALOG_ENABLE + ESP_LOGD("ISE OS", "Installing current transformer cards"); + // First try to install the analog card + analogCardAvailable = espmega.installCard(4, &analogCard); + // If the analog card is available, install the current transformer cards + // If the analog card is not available, current transformer cards will not be installed + // Unless CT_FORCE_ENABLE is set to true + // This is to prevent soft locking the device when the device tries to read from an ADC channel that does not exist + if (analogCardAvailable || CT_FORCE_ENABLE) + { + ESP_LOGV("ISE OS", "Analog card available, installing current transformer cards"); + espmega.installCard(5, &ct1); + ct1.bindFRAM(&espmega.fram, 5010); + ct1.loadEnergy(); + ct1.setEnergyAutoSave(true); + espmega.installCard(6, &ct2); + ct2.bindFRAM(&espmega.fram, 5020); + ct2.loadEnergy(); + ct2.setEnergyAutoSave(true); + espmega.installCard(7, &ct3); + ct3.bindFRAM(&espmega.fram, 5030); + ct3.loadEnergy(); + ct3.setEnergyAutoSave(true); + espmega.installCard(8, &ct4); + ct4.bindFRAM(&espmega.fram, 5040); + ct4.loadEnergy(); + ct4.setEnergyAutoSave(true); + espmega.installCard(9, &ct5); + ct5.bindFRAM(&espmega.fram, 5050); + ct5.loadEnergy(); + ct5.setEnergyAutoSave(true); + espmega.installCard(10, &ct5); + ct6.bindFRAM(&espmega.fram, 5060); + ct6.loadEnergy(); + ct6.setEnergyAutoSave(true); + espmega.iot->registerCard(5); + espmega.iot->registerCard(6); + espmega.iot->registerCard(7); + espmega.iot->registerCard(8); + espmega.iot->registerCard(9); + espmega.iot->registerCard(10); + } + else + { + ESP_LOGE("ISE OS", "Analog card not available, current transformer cards cannot and will not be installed."); + } + #endif + // ------------ End Current Transformer Cards Initialization Routine ------------ + + + // ------------ Remote Variables Initialization Routine ------------ + pm25_out.registerCallback(&pm25outupdatedisplay); + pm25_in.registerCallback(&pm25inupdatedisplay); + temp_out.registerCallback(&tempoutupdatedisplay); + weather.registerCallback(&weatherupdatedisplay); + pm_switch.registerCallback(&pmswitchupdatedisplay); + pm_fan_speed.registerCallback(&pmfanspeedupdatedisplay); + pm_lock.registerCallback(&pmlockupdatedisplay); + ac_lock.registerCallback(&aclockupdatedisplay); + + + // PM2.5 PPM Remote Variable + pm25_out.begin(6, "/aqi/value", espmega.iot, true, "/aqi/request_value"); + // Temperature Remote Variable + temp_out.begin(6, "/temp/value", espmega.iot, true, "/temp/request_value"); + // Weather Remote Variable + weather.begin(45, "/weather/value", espmega.iot, true, "/weather/request_value"); + // PM2.5 PPM Remote Variable + pm25_in.begin(6, "/pm/value", espmega.iot, true, "/pm/request_value"); + // Air Purifier Switch Remote Variable + pm_switch.begin(6, "/pm/switch_state", espmega.iot, true, "/pm/request_switch_state"); + pm_switch.enableSetValue("/pm/set_switch_state"); + // Air Purifier Fan Speed Remote Variable + pm_fan_speed.begin(6, "/pm/fan_speed", espmega.iot, true, "/pm/request_fan_speed"); + pm_fan_speed.enableSetValue("/pm/set_fan_speed"); + // Air Purifier Lock Remote Variable + pm_lock.begin(6, "/pm/lock_state", espmega.iot, true, "/pm/request_lock_pm_state"); + pm_lock.enableSetValue("/pm/set_lock_pm_state"); + // Air Conditioner Lock Remote Variable + ac_lock.begin(6, "/ac/lock_state", espmega.iot, true, "/ac/request_lock_ac_state"); + ac_lock.enableSetValue("/ac/set_lock_ac_state"); + // ------------ End Remote Variables Initialization Routine ------------ + + + // ------------ IoT Card Registration Routine ------------ + espmega.iot->registerCard(0); // Register the Input Card + espmega.iot->registerCard(1); // Register the Output Card + espmega.iot->registerCard(2); // Register the Climate Card Daikin + espmega.iot->registerCard(3); // Register the Climate Card York + // ------------ End IoT Card Registration Routine ------------ + + + // ------------ External Display Initialization Routine ------------ + auto bindedGetTime = std::bind(&ESPMegaPRO::getTime, &espmega); + iseDisplay.begin(&espmega.inputs, &espmega.outputs, &climateCard_daikin, &climateCard_york, &pm_switch, &pm_fan_speed, &pm_lock, &ac_lock, espmega.iot); + espmega.iot->registerRelativeMqttCallback(&handleMqttMessage); + iseDisplayOTA.begin("/isedisp", &iseDisplay, espmega.webServer); + internalDisplayOTA.begin("/intdisp", espmega.display, espmega.webServer); + iseDisplay.registerPageChangeCallback(&handlePageChange); + // ------------ End External Display Initialization Routine ------------ +} + +void pm25outupdatedisplay(char *value) +{ + iseDisplay.updatePMoutside(get_pm25_out()); +} +void pm25inupdatedisplay(char *value) +{ + iseDisplay.updatePMinside(get_pm25_in()); +} +void tempoutupdatedisplay(char *value) +{ + //iseDisplay.updateTempOutside(get_temp_out()); +} +void weatherupdatedisplay(char *value) +{ + //iseDisplay.updateWeather(weather.getValue()); +} +void pmfanspeedupdatedisplay(char *value) +{ + iseDisplay.updateAirPurifierState(); +} +void pmswitchupdatedisplay(char *value) +{ + ESP_LOGI("PM switch", "getting PM switch state from MQTT: %d", pm_switch.getValue()); + iseDisplay.updateAirPurifierState(); + iseDisplay.updateSystemtoggle(); + iseDisplay.updateAllStandbyToggle(); + ESP_LOGI("PM switch", "toggling PM switch state from: %d to %d", pm_switch.getValue(), !pm_switch.getValue()); +} +void pmlockupdatedisplay(char *value) +{ + ESP_LOGI("PM lock", "getting PM lock state from MQTT: %d", pm_lock.getValue()); + iseDisplay.updateAirPurifierState(); + ESP_LOGI("PM lock", "toggling PM lock state from: %d to %d", pm_lock.getValue(), !pm_lock.getValue()); +} +void aclockupdatedisplay(char *value) +{ + ESP_LOGI("AC lock", "getting AC lock state from MQTT: %d", ac_lock.getValue()); + iseDisplay.updateACState(); + ESP_LOGI("AC lock", "toggling AC lock state from: %d to %d", ac_lock.getValue(), !ac_lock.getValue()); +} + +void loop() +{ + espmega.loop(); + iseDisplay.loop(); + + // Update the time every 15 seconds + static uint32_t last_time_updated = 0; + + if (millis() - last_time_updated > 15000) + { + rtctime_t time = espmega.getTime(); + iseDisplay.updateDateTimeText(time); + last_time_updated = millis(); + } +#ifdef ANALOG_ENABLE + // Send out analog Data every 6 seconds + static uint32_t last_analog_sent = 0; + if (millis() - last_analog_sent > 6000) + { + espmega.iot->publish("/debug/up", "1"); + if (analogCardAvailable || CT_FORCE_ENABLE) + { + espmega.iot->publish("/debug/log", "Sending Analog Card Data"); + char topic_buffer[50]; + char payload_buffer[50]; + // Publish ADC Pin 0-7 + for (uint8_t i = 0; i < 8; i++) + { + sprintf(topic_buffer, "/debug/analog/%d", i); + sprintf(payload_buffer, "%d", analogCard.analogRead(i)); + espmega.iot->publish(topic_buffer, payload_buffer); + } + } + last_analog_sent = millis(); + } +#endif +} + +void on_pin_change(uint8_t pin, uint8_t value) +{ + switch (pin) + { + case LIGHT_ROW1_COLUMN1_IN: + espmega.outputs.setState(LIGHT_ROW1_COLUMN1, !espmega.outputs.getState(LIGHT_ROW1_COLUMN1)); + break; + case LIGHT_ROW1_COLUMN2_IN: + espmega.outputs.setState(LIGHT_ROW1_COLUMN2, !espmega.outputs.getState(LIGHT_ROW1_COLUMN2)); + break; + case LIGHT_ROW2_COLUMN1_IN: + espmega.outputs.setState(LIGHT_ROW2_COLUMN1, !espmega.outputs.getState(LIGHT_ROW2_COLUMN1)); + break; + case LIGHT_ROW2_COLUMN2_IN: + espmega.outputs.setState(LIGHT_ROW2_COLUMN2, !espmega.outputs.getState(LIGHT_ROW2_COLUMN2)); + break; + case LIGHT_ROW3_COLUMN1_IN: + espmega.outputs.setState(LIGHT_ROW3_COLUMN1, !espmega.outputs.getState(LIGHT_ROW3_COLUMN1)); + break; + case LIGHT_ROW3_COLUMN2_IN: + espmega.outputs.setState(LIGHT_ROW3_COLUMN2, !espmega.outputs.getState(LIGHT_ROW3_COLUMN2)); + break; + case LIGHT_ROW4_COLUMN1_IN: + espmega.outputs.setState(LIGHT_ROW4_COLUMN1, !espmega.outputs.getState(LIGHT_ROW4_COLUMN1)); + break; + case LIGHT_ROW4_COLUMN2_IN: + espmega.outputs.setState(LIGHT_ROW4_COLUMN2, !espmega.outputs.getState(LIGHT_ROW4_COLUMN2)); + break; + case COMPUTER_DESK_SWITCH_IN: + espmega.outputs.setState(COMPUTER_DESK_SWITCH_OUT, !espmega.outputs.getState(COMPUTER_DESK_SWITCH_OUT)); + break; + } +} + +uint16_t get_pm25_out() +{ + uint16_t pm25_out_value = 0; + // Read PM2.5 PPM from home assistant + pm25_out_value = atoi(pm25_out.getValue()); + ESP_LOGI("PM2.5", "getting PM2.5 PPM from MQTT: %d", pm25_out_value); + return pm25_out_value; +} + +uint16_t get_pm25_in() +{ + uint16_t pm25_in_value = 0; + // Read PM2.5 PPM from home assistant + pm25_in_value = atoi(pm25_in.getValue()); + ESP_LOGI("PM2.5", "getting PM2.5 PPM from MQTT: %d", pm25_in_value); + return pm25_in_value; +} + +float get_temp_out() +{ + float temp_out_value = 0; + // Read temperature from home assistant + temp_out_value = atof(temp_out.getValue()); + ESP_LOGI("Temperature", "getting Temperature from MQTT: %f", temp_out_value); + return temp_out_value; +} + +uint8_t get_pm_fanspeed() +{ + uint8_t pm_fan_speed_value = 0; + // Read PM2.5 fan speed from home assistant + pm_fan_speed_value = (int)atof(pm_fan_speed.getValue()); + ESP_LOGI("PM fan speed", "getting PM2.5 PPM from MQTT: %d", pm_fan_speed_value); + return pm_fan_speed_value; +} + +bool get_pm_lock() +{ + ESP_LOGI("PM lock", "getting PM lock state from MQTT: %d", pm_lock.getValue()); + bool is_pm_lock_on = strcmp(pm_lock.getValue(), "on") == 0; + return is_pm_lock_on; +} + +bool get_ac_lock() +{ + ESP_LOGI("AC lock", "getting AC lock state from MQTT: %d", ac_lock.getValue()); + bool is_ac_lock_on = strcmp(ac_lock.getValue(), "on") == 0; + return is_ac_lock_on; +} + +/** + * @brief Get the PM switch state from home assistant + * @return true if the PM switch is on, false if the PM switch is off + */ +bool get_pm_switch() +{ + ESP_LOGI("PM switch", "getting PM switch state from MQTT: %d", pm_switch.getValue()); + bool is_pm_switch_on = strcmp(pm_switch.getValue(), "on") == 0; + return is_pm_switch_on; +} + +void toggle_pm_switch() +{ + bool is_pm_switch_on = get_pm_switch(); + ESP_LOGI("PM switch", "toggling PM switch state from: %d to %d", is_pm_switch_on, !is_pm_switch_on); + pm_switch.setValue(is_pm_switch_on ? "0" : "1"); +} + +void toggle_ac_lock() +{ + bool is_ac_lock_on = get_ac_lock(); + ESP_LOGI("AC lock", "toggling AC lock state from: %d to %d", is_ac_lock_on, !is_ac_lock_on); + ac_lock.setValue(is_ac_lock_on ? "0" : "1"); +} + +void toggle_pm_lock() +{ + bool is_pm_lock_on = get_pm_lock(); + ESP_LOGI("PM lock", "toggling PM lock state from: %d to %d", is_pm_lock_on, !is_pm_lock_on); + pm_lock.setValue(is_pm_lock_on ? "0" : "1"); +} + +void set_pm_fanspeed(uint8_t speed) +{ + ESP_LOGI("PM fan speed", "setting PM fan speed to: %d", speed); + char buffer[4]; + itoa(speed, buffer, DEC); + pm_fan_speed.setValue(buffer); +} + +void handlePageChange(uint8_t page) +{ + ESP_LOGI("Page", "Page change to: %d", page); + rtctime_t time = espmega.getTime(); + iseDisplay.updateDateTimeText(time); + switch (page) + { + case PAGE_STANDBY: + iseDisplay.updateLightGroupStatePageStandby(); + iseDisplay.updateAirPurifierStateStandby(); + iseDisplay.updateAllStandbyToggle(); + break; + case PAGE_DASHBOARD: + iseDisplay.updateLightGroupStatePageDashboard(); + iseDisplay.updateAirPurifierState(); + iseDisplay.updateSystemtoggle(); + break; + default: + break; + } + + iseDisplay.updatePMoutside(get_pm25_out()); + iseDisplay.updatePMinside(get_pm25_in()); + //iseDisplay.updateWeather(weather.getValue()); + //iseDisplay.updateTempOutside(get_temp_out()); + iseDisplay.updateACState(); } void sendStopBytes() @@ -43,206 +543,4 @@ void sendExtStopBytes() iseDisplayAdapter.write(0xFF); iseDisplayAdapter.write(0xFF); iseDisplayAdapter.write(0xFF); -} - -void setup() -{ - gpio_config_t gpio_2_conf; - gpio_2_conf.intr_type = GPIO_INTR_DISABLE; - gpio_2_conf.mode = GPIO_MODE_INPUT; - gpio_2_conf.pull_up_en = GPIO_PULLUP_ENABLE; - gpio_config(&gpio_2_conf); - // If GPIO 2 is pulled low, clear the FRAM then reboot (Reset the device to factory defaults) - bool clear_fram = !gpio_get_level(GPIO_NUM_2); - Serial.begin(115200); - iseDisplayAdapter.begin(ISE_DISPLAY_BAUD_RATE, SERIAL_8N1, ISE_DISPLAY_RX_PIN, ISE_DISPLAY_TX_PIN); - sendExtStopBytes(); - iseDisplayAdapter.print("rest"); - sendExtStopBytes(); - sendStopBytes(); - Serial.print("rest"); - sendStopBytes(); - Serial.print("boot_state.txt=\"Core Initializing . . .\""); - sendStopBytes(); - espmega.begin(); - // if (clear_fram) - // { - // Serial.print("boot_state.txt=\"Factory Resetting . . .\""); - // sendStopBytes(); - // for (uint16_t i = 0; i < 32768; i++) - // { - // espmega.fram.write8(i, 0); - // } - // esp_restart(); - // } - Serial.print("boot_state.txt=\"IoT Initializing . . .\""); - sendStopBytes(); - espmega.enableIotModule(); - ETH.begin(); - espmega.iot->bindEthernetInterface(Ð); - Serial.print("boot_state.txt=\"Network Initializing . . .\""); - sendStopBytes(); - espmega.iot->loadNetworkConfig(); - espmega.iot->connectNetwork(); - Serial.print("boot_state.txt=\"MQTT Initializing . . .\""); - sendStopBytes(); - espmega.iot->loadMqttConfig(); - espmega.iot->connectToMqtt(); - Serial.print("boot_state.txt=\"Display Initializing . . .\""); - espmega.enableInternalDisplay(&Serial); - espmega.enableWebServer(80); - espmega.inputs.registerCallback(on_pin_change); - espmega.outputs.setAutoSaveToFRAM(true); - espmega.installCard(2, &climateCard); - climateCard.bindFRAM(&espmega.fram, 5000); - climateCard.loadStateFromFRAM(); - climateCard.setFRAMAutoSave(true); - espmega.display->bindClimateCard(&climateCard); - espmega.iot->registerCard(0); // Register the Input Card - espmega.iot->registerCard(1); // Register the Output Card - espmega.iot->registerCard(2); // Register the Climate Card - auto bindedGetTime = std::bind(&ESPMegaPRO::getTime, &espmega); - iseDisplay.begin(&espmega.inputs, &espmega.outputs, &climateCard); - espmega.iot->registerRelativeMqttCallback(&handleMqttMessage); - iseDisplay.registerPageChangeCallback(&handlePageChange); - // placeholder - // PM2.5 PPM Remote Variable - // 12 bytes remote variable, 11 characters + null terminator - // Enable value request at /iqair/pm25_request - pm25_out.begin(6, "/aqi/value", espmega.iot, true, "/aqi/request_value"); - // Temperature Remote Variable - temp_out.begin(6, "/temp/value", espmega.iot, true, "/temp/request_value"); - // Weather Remote Variable - weather.begin(45, "/weather/value", espmega.iot, true, "/weather/request_value"); - // PM2.5 PPM Remote Variable - pm25_in.begin(6, "/pm/value", espmega.iot, true, "/pm/request_value"); -} - -void loop() -{ - espmega.loop(); - iseDisplay.loop(); - - // Update the time every 15 seconds - // static bool run_when_init = false; // No static ? , this shit will reset to 0 every loop - static uint32_t last_time_updated = 0; - // rtctime_t time = espmega.getTime(); - // when init update once then update every 15 seconds - // You don't need this, when it go from page 0 to 1 it call handlePageChange - // if(!run_when_init){ - // time = espmega.getTime(); - // iseDisplay.updateDateTimeText(time); - // last_time_updated = millis(); - // run_when_init = true; - // } - - if (millis() - last_time_updated > 15000) - { - rtctime_t time = espmega.getTime(); - // log time - ESP_LOGI("time", "Time: %d:%d:%d", time.hours, time.minutes, time.seconds); - ESP_LOGI("Date", "Date: %d/%d/%d", time.day, time.month, time.year); - iseDisplay.updateDateTimeText(time); - last_time_updated = millis(); - } - //Update the PM2.5 PPM value every 15 seconds - static uint32_t last_pm25_out_update = 0; - if (millis() - last_pm25_out_update > 15000) - { - uint16_t pm25_out_value = get_pm25_out(); - //ESP_LOGI("loopPM2.5","updating PM2.5 from MQTT inside loop: %d", pm25_out_value); - iseDisplay.updatePMoutside(pm25_out_value); - last_pm25_out_update = millis(); - } - // Update the PM2.5 PPM value every 15 seconds - static uint32_t last_pm25_in_update = 0; - if (millis() - last_pm25_in_update > 15000) - { - uint8_t pm25_in_value = get_pm25_in(); - iseDisplay.updatePMinside(pm25_in_value); - last_pm25_in_update = millis(); - } - // Update the temperature value every 15 seconds - static uint32_t last_temp_out_update = 0; - if (millis() - last_temp_out_update > 15000) - { - float temp_out_value = get_temp_out(); - iseDisplay.updateTempOutside(temp_out_value); - last_temp_out_update = millis(); - } - // Update the weather value every 15 seconds - static uint32_t last_weather_update = 0; - if (millis() - last_weather_update > 15000) - { - char *weather_value = weather.getValue(); - iseDisplay.updateWeather(weather_value); - last_weather_update = millis(); - } -} - -void on_pin_change(uint8_t pin, uint8_t value) -{ -} - -uint16_t get_pm25_out() -{ - uint16_t pm25_out_value = 0; - // Read PM2.5 PPM from sensor - pm25_out_value = atoi(pm25_out.getValue()); - ESP_LOGI("PM2.5", "getting PM2.5 PPM from MQTT: %d", pm25_out_value); - return pm25_out_value; -} - -uint16_t get_pm25_in() -{ - uint16_t pm25_in_value = 0; - // Read PM2.5 PPM from sensor - pm25_in_value = atoi(pm25_in.getValue()); - ESP_LOGI("PM2.5", "getting PM2.5 PPM from MQTT: %d", pm25_in_value); - return pm25_in_value; -} - -float get_temp_out() -{ - float temp_out_value = 0; - // Read temperature from sensor - temp_out_value = atof(temp_out.getValue()); - ESP_LOGI("Temperature", "getting Temperature from MQTT: %f", temp_out_value); - return temp_out_value; -} - -void handlePageChange(uint8_t page) -{ - - // Which already send the time - // printESP_LOGI the page have changed - ESP_LOGI("Page", "Page change to: %d", page); - rtctime_t time = espmega.getTime(); - iseDisplay.updateDateTimeText(time); - switch (page) - { - case PAGE_STANDBY: - iseDisplay.updateLightGroupStatePageStandby(); - iseDisplay.updateAirPurifierStateStandby(); - break; - case PAGE_DASHBOARD: - iseDisplay.updateLightGroupStatePageDashboard(); - iseDisplay.updateAirPurifierState(); - break; - default: - break; - } - - // iseDisplay.updatePMinside(); - iseDisplay.updatePMoutside(get_pm25_out()); - iseDisplay.updatePMinside(get_pm25_in()); - iseDisplay.updateWeather(weather.getValue()); - iseDisplay.updateTempOutside(get_temp_out()); - - /* iseDisplay.updateACState(); - iseDisplay.updateAirPurifierState(); - iseDisplay.updateLightGroupStatePageStandby(); - iseDisplay.updateLightGroupStatePageDashboard(); - iseDisplay.updateuserACmode(); - iseDisplay.updateAirPurifierStateStandby(); */ - } \ No newline at end of file +} \ No newline at end of file diff --git a/src/main.hpp b/src/main.hpp index 73b888c..6dbc3e0 100644 --- a/src/main.hpp +++ b/src/main.hpp @@ -2,7 +2,10 @@ #include SET_LOOP_TASK_STACK_SIZE(32*1024); #include -#include +#include +#include +#include +#include @@ -19,8 +22,20 @@ SET_LOOP_TASK_STACK_SIZE(32*1024); // Air Conditioner Configuration #define AIR_CONDITIONER_SENSOR_TYPE AC_SENSOR_TYPE_DHT22 #define AIR_CONDITIONER_SENSOR_PIN 32 -#define AIR_CONDITIONER_IR_PIN 5 -#define AIR_CONDITIONER_RMT_CHANNEL RMT_CHANNEL_0 +#define AIR_CONDITIONER_DAIKIN_IR_PIN 5 +#define AIR_CONDITIONER_YORK_IR_PIN 15 +#define AIR_CONDITIONER_RMT_CHANNEL0 RMT_CHANNEL_0 +#define AIR_CONDITIONER_RMT_CHANNEL1 RMT_CHANNEL_1 +// CT Configuration +#define ANALOG_ENABLE +#define CT_FORCE_ENABLE true +#define CT_RMS_VOLTAGE 220.0 +#define CT_PIN_LIGHT_PHASE1 0 +#define CT_PIN_LIGHT_PHASE2 1 +#define CT_PIN_SOCKET 2 +#define CT_PIN_AC_PHASE1 3 +#define CT_PIN_AC_PHASE2 4 +#define CT_PIN_AC_PHASE3 5 void handleMqttMessage(char *topic, char *payload); void subscribeToMqttTopics(); @@ -34,6 +49,24 @@ void loop(); void on_pin_change(uint8_t pin, uint8_t value); +void mqttSubscribeCallback(); + uint16_t get_pm25_out(); uint16_t get_pm25_in(); float get_temp_out(); +bool get_pm_lock(); +bool get_ac_lock(); +void toggle_ac_lock(); +void toggle_pm_lock(); +void toggle_pm_switch(); +void set_pm_fanspeed(uint8_t speed); +void display_update(); +void pm25outupdatedisplay(char* value); +void pm25inupdatedisplay(char* value); +void tempoutupdatedisplay(char* value); +void weatherupdatedisplay(char* value); +void pmfanspeedupdatedisplay(char* value); +void pmlockupdatedisplay(char* value); +void aclockupdatedisplay(char* value); +void pmswitchupdatedisplay(char* value); +float adc2current(uint16_t adc_val); \ No newline at end of file