From 221a8ee7c4f013d241d0e1195ada7dba466a1ea6 Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Sat, 25 Nov 2023 13:52:25 +0100 Subject: [PATCH 01/14] feat(text): new font and ticking clock plugin --- include/plugins/TickingClockPlugin.h | 18 +++++ include/screen.h | 2 + include/signs.h | 2 + src/main.cpp | 3 + src/plugins/TickingClockPlugin.cpp | 64 +++++++++++++++++ src/screen.cpp | 23 ++++++ src/signs.cpp | 101 +++++++++++++++++++++++++++ 7 files changed, 213 insertions(+) create mode 100644 include/plugins/TickingClockPlugin.h create mode 100644 src/plugins/TickingClockPlugin.cpp diff --git a/include/plugins/TickingClockPlugin.h b/include/plugins/TickingClockPlugin.h new file mode 100644 index 0000000..86e58c3 --- /dev/null +++ b/include/plugins/TickingClockPlugin.h @@ -0,0 +1,18 @@ +#pragma once + +#include "PluginManager.h" + +class TickingClockPlugin : public Plugin +{ +private: + struct tm timeinfo; + + int previousMinutes; + int previousHour; + int previousSecond; + +public: + void setup() override; + void loop() override; + const char *getName() const override; +}; diff --git a/include/screen.h b/include/screen.h index bbabebc..0d30fdc 100644 --- a/include/screen.h +++ b/include/screen.h @@ -70,6 +70,8 @@ class Screen_ void drawBigNumbers(int x, int y, std::vector numbers, uint8_t brightness = 255); void drawWeather(int x, int y, int weather, uint8_t brightness = 255); std::vector readBytes(std::vector bytes); + + void scrollText(std::string text, int delayTime = 30, uint8_t brightness = 255 ); }; extern Screen_ &Screen; diff --git a/include/signs.h b/include/signs.h index da68658..c97c709 100644 --- a/include/signs.h +++ b/include/signs.h @@ -14,3 +14,5 @@ extern std::vector> smallNumbers; extern std::vector> bigNumbers; extern std::vector> lineAnimation; extern std::vector> weatherIcons; + +extern std::vector> system6x7; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index d24a0da..573793a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -28,6 +28,8 @@ #include "plugins/BigClockPlugin.h" #include "plugins/ClockPlugin.h" #include "plugins/WeatherPlugin.h" +#include "plugins/AnimationPlugin.h" +#include "plugins/TickingClockPlugin.h" #endif #include "asyncwebserver.h" @@ -176,6 +178,7 @@ void setup() pluginManager.addPlugin(new ClockPlugin()); pluginManager.addPlugin(new WeatherPlugin()); pluginManager.addPlugin(new AnimationPlugin()); + pluginManager.addPlugin(new TickingClockPlugin()); #endif pluginManager.init(); diff --git a/src/plugins/TickingClockPlugin.cpp b/src/plugins/TickingClockPlugin.cpp new file mode 100644 index 0000000..32390f9 --- /dev/null +++ b/src/plugins/TickingClockPlugin.cpp @@ -0,0 +1,64 @@ +#include "plugins/TickingClockPlugin.h" + +void TickingClockPlugin::setup() +{ + // loading screen + Screen.setPixel(4, 7, 1); + Screen.setPixel(5, 7, 1); + Screen.setPixel(7, 7, 1); + Screen.setPixel(8, 7, 1); + Screen.setPixel(10, 7, 1); + Screen.setPixel(11, 7, 1); + + previousMinutes = -1; + previousHour = -1; +} + +void TickingClockPlugin::loop() +{ + if (getLocalTime(&timeinfo)) + { + + if ( (timeinfo.tm_hour*60+timeinfo.tm_min) < 6*60+30 || + (timeinfo.tm_hour*60+timeinfo.tm_min) > 22*60+30 ) //only between 6:30 and 22:30 + { + Screen.clear(); + return; + } + + if (previousHour != timeinfo.tm_hour || previousMinutes != timeinfo.tm_min) + { + if(previousHour==-1)Screen.scrollText("Welcome to Ticking Clock!"); + + std::vector hh = {(timeinfo.tm_hour - timeinfo.tm_hour % 10) / 10, timeinfo.tm_hour % 10}; + std::vector mm = {(timeinfo.tm_min - timeinfo.tm_min % 10) / 10, timeinfo.tm_min % 10}; + + Screen.clear(); + + Screen.drawCharacter(2,0, Screen.readBytes(system6x7[hh[0]+16]), 8); + Screen.drawCharacter(9,0, Screen.readBytes(system6x7[hh[1]+16]), 8); + Screen.drawCharacter(2,9, Screen.readBytes(system6x7[mm[0]+16]), 8); + Screen.drawCharacter(9,9, Screen.readBytes(system6x7[mm[1]+16]), 8); + previousMinutes = timeinfo.tm_min; + previousHour = timeinfo.tm_hour; + } + if(previousSecond != timeinfo.tm_sec){ + + // clear second lane + Screen.drawRectangle(0,7,16,2,true,0); + // alternating second pixel + if ((timeinfo.tm_sec * 32 / 60) % 2 == 0) + Screen.setPixel(timeinfo.tm_sec*16/60,7,1); + else + Screen.setPixel(timeinfo.tm_sec*16/60,8,1); + + previousSecond = timeinfo.tm_sec; + } + + } +} + +const char *TickingClockPlugin::getName() const +{ + return "Ticking Clock"; +} diff --git a/src/screen.cpp b/src/screen.cpp index b19ce6d..023d3d1 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -299,6 +299,29 @@ void Screen_::drawWeather(int x, int y, int weather, uint8_t brightness) this->drawCharacter(x, y, this->readBytes(weatherIcons[weather]), 16, brightness); } +void Screen_::scrollText(std::string text, int delayTime, uint8_t brightness) +{ + int textWidth = text.length() * 6 ; // Assuming 6 pixels width for each character + space + + for (int i = -16; i < textWidth; i++) { // start with negarive screen size, so out of screen to the right + + this->clear(); + + for (std::size_t strPos = 0; strPos < text.length(); strPos++) { // since i need the pos to calculate, this is the best way to iterate here + + int xPos = strPos * 6 - i; + + if (xPos > -6 && xPos < 16) { //so are we somewhere on screen with the char? + // yes tsystem6x7 charset starts wis space (char32) + Screen.drawCharacter(xPos,4, Screen.readBytes(system6x7[text[strPos]-32]), 8); + + } + } + + delay(delayTime); + } +} + Screen_ &Screen_::getInstance() { static Screen_ instance; diff --git a/src/signs.cpp b/src/signs.cpp index d5db103..9e4b156 100644 --- a/src/signs.cpp +++ b/src/signs.cpp @@ -48,3 +48,104 @@ std::vector> weatherIcons = { {0x03, 0x80, 0x06, 0x70, 0x1C, 0x18, 0x32, 0x06, 0x1F, 0xFC, 0x05, 0x20, 0x08, 0x48, 0x02, 0x20}, // snow {0x03, 0xFC, 0x3F, 0x00, 0x07, 0xFE, 0x7F, 0x00, 0x03, 0xF8, 0x3F, 0x80}, // fog }; + +// system font based on https://github.com/MakeMagazinDE/Obegraensad by DR. ARMIN ZINK +std::vector> system6x7 = +{ + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // (s + {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00000000, 0b00100000}, // ! + {0b01010000, 0b01010000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // " + {0b01010000, 0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01010000, 0b01010000}, // # + {0b00100000, 0b01111000, 0b10100000, 0b01110000, 0b00101000, 0b11110000, 0b00100000}, // $ + {0b11000000, 0b11001000, 0b00010000, 0b00100000, 0b01000000, 0b10011000, 0b00011000}, // % + {0b01100000, 0b10010000, 0b10100000, 0b01000000, 0b10101000, 0b10010000, 0b01101000}, // & + {0b01100000, 0b00100000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ' + {0b00010000, 0b00100000, 0b01000000, 0b01000000, 0b01000000, 0b00100000, 0b00010000}, // ( + {0b01000000, 0b00100000, 0b00010000, 0b00010000, 0b00010000, 0b00100000, 0b01000000}, // ) + {0b00000000, 0b01010000, 0b00100000, 0b11111000, 0b00100000, 0b01010000, 0b00000000}, // * + {0b00000000, 0b00100000, 0b00100000, 0b11111000, 0b00100000, 0b00100000, 0b00000000}, // + + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // , + {0b00000000, 0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b00000000, 0b00000000}, // - + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b01100000}, // . + {0b00000000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b00000000}, // / + {0b01111000, 0b11111100, 0b11001100, 0b11001100, 0b11001100, 0b11111100, 0b01111000}, // 0 + {0b00110000, 0b01110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 1 + {0b01111000, 0b11111100, 0b00001100, 0b00111000, 0b01100000, 0b11111100, 0b11111100}, // 2 + {0b01111000, 0b11111100, 0b00001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 3 + {0b11001100, 0b11001100, 0b11111100, 0b01111100, 0b00001100, 0b00001100, 0b00001100}, // 4 + {0b11111100, 0b11111100, 0b11000000, 0b11111000, 0b00001100, 0b11111100, 0b11111000}, // 5 + {0b01111000, 0b11111100, 0b11000000, 0b11111000, 0b11001100, 0b11111100, 0b01111000}, // 6 + {0b11111100, 0b11111100, 0b00011000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 7 + {0b01111000, 0b11111100, 0b11001100, 0b01111000, 0b11001100, 0b11111100, 0b01111000}, // 8 + {0b01111000, 0b11111100, 0b11001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 9 + {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b01100000, 0b00000000}, // : + {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // ; + {0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b00100000, 0b00010000, 0b00001000}, // < + {0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b11111000, 0b00000000, 0b00000000}, // = + {0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00100000, 0b01000000, 0b10000000}, // > + {0b01110000, 0b10001000, 0b00001000, 0b00010000, 0b00100000, 0b00000000, 0b00100000}, // ? + {0b01110000, 0b10001000, 0b00001000, 0b01101000, 0b10101000, 0b10101000, 0b01110000}, // @ + {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000}, // A + {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10001000, 0b10001000, 0b11110000}, // B + {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // C + {0b11100000, 0b10010000, 0b10001000, 0b10001000, 0b10001000, 0b10010000, 0b11100000}, // D + {0b11111000, 0b10000000, 0b10000000, 0b11110000, 0b10000000, 0b10000000, 0b11111000}, // E + {0b11111000, 0b10000000, 0b10000000, 0b11100000, 0b10000000, 0b10000000, 0b10000000}, // F + {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10011000, 0b10001000, 0b01110000}, // G + {0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000, 0b10001000}, // H + {0b01110000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // I + {0b00111000, 0b00010000, 0b00010000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // J + {0b10001000, 0b10010000, 0b10100000, 0b11000000, 0b10100000, 0b10010000, 0b10001000}, // K + {0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b11111000}, // L + {0b10001000, 0b11011000, 0b10101000, 0b10001000, 0b10001000, 0b10001000, 0b10001000}, // M + {0b10001000, 0b10001000, 0b11001000, 0b10101000, 0b10011000, 0b10001000, 0b10001000}, // N + {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // O + {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10000000, 0b10000000, 0b10000000}, // P + {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10010000, 0b01101000}, // Q + {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10100000, 0b10010000, 0b10001000}, // R + {0b01111000, 0b10000000, 0b10000000, 0b01110000, 0b00001000, 0b00001000, 0b11110000}, // S + {0b11111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // T + {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // U + {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // V + {0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b11011000, 0b10001000}, // W + {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000, 0b10001000}, // X + {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // Y + {0b11111000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b11111000}, // Z + {0b00111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00111000}, // [ + {0b00000000, 0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000000}, // " + {0b11100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b11100000}, // ] + {0b00100000, 0b01010000, 0b10001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ^ + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11111000}, // _ + {0b01000000, 0b00100000, 0b00010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ` + {0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b01111000, 0b10001000, 0b01111000}, // a + {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b11110000}, // b + {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // c + {0b00001000, 0b00001000, 0b01101000, 0b10011000, 0b10001000, 0b10001000, 0b01111000}, // d + {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b11111000, 0b10000000, 0b01110000}, // e + {0b00110000, 0b01001000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01000000}, // f + {0b00000000, 0b00000000, 0b01111000, 0b10001000, 0b01111000, 0b00001000, 0b00110000}, // g + {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // h + {0b00100000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // i + {0b00010000, 0b00000000, 0b00110000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // j + {0b01000000, 0b01000000, 0b01001000, 0b01010000, 0b01100000, 0b01010000, 0b01001000}, // k + {0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // l + {0b00000000, 0b00000000, 0b11010000, 0b10101000, 0b10101000, 0b10001000, 0b10001000}, // m + {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // n + {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // o + {0b00000000, 0b00000000, 0b11110000, 0b10001000, 0b11110000, 0b10000000, 0b10000000}, // p + {0b00000000, 0b00000000, 0b01101000, 0b10011000, 0b01111000, 0b00001000, 0b00001000}, // q + {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10000000, 0b10000000, 0b10000000}, // r + {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b01110000, 0b00001000, 0b11110000}, // s + {0b01000000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01001000, 0b00110000}, // t + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b10011000, 0b01101000}, // u + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // v + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b01010000}, // w + {0b00000000, 0b00000000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000}, // x + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b01111000, 0b00001000, 0b01110000}, // y + {0b00000000, 0b00000000, 0b11111000, 0b00010000, 0b00100000, 0b01000000, 0b11111000}, // z + {0b00010000, 0b00100000, 0b00100000, 0b01000000, 0b00100000, 0b00100000, 0b00010000}, // { + {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // | + {0b01000000, 0b00100000, 0b00100000, 0b00010000, 0b00100000, 0b00100000, 0b01000000}, // } + {0b00000000, 0b00100000, 0b00010000, 0b11111000, 0b00010000, 0b00100000, 0b00000000}, // -> + {0b00000000, 0b00100000, 0b01000000, 0b11111000, 0b01000000, 0b00100000, 0b00000000}, // <- +}; \ No newline at end of file From 8e403030db2d27299fe229fae856962ab51694a2 Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Sun, 26 Nov 2023 12:05:05 +0100 Subject: [PATCH 02/14] Added Message scroll via hhtp call http://192.168.178.141/message?text=Hallo%20Welt --- include/webgui.h | 2 +- src/asyncwebserver.cpp | 3 +++ src/webgui.cpp | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/include/webgui.h b/include/webgui.h index 72e0015..516732b 100644 --- a/include/webgui.h +++ b/include/webgui.h @@ -6,5 +6,5 @@ #include void startGui(AsyncWebServerRequest *request); - +void handleMessage(AsyncWebServerRequest *request); #endif diff --git a/src/asyncwebserver.cpp b/src/asyncwebserver.cpp index 6acb0e2..a7d2d5b 100644 --- a/src/asyncwebserver.cpp +++ b/src/asyncwebserver.cpp @@ -14,6 +14,9 @@ void initWebServer() server.onNotFound([](AsyncWebServerRequest *request) { request->send(404, "text/plain", "Page not found!"); }); + // Route to handle "/message?text=" URL + server.on("/message", HTTP_GET, handleMessage); + server.begin(); } diff --git a/src/webgui.cpp b/src/webgui.cpp index 0f7f540..717133a 100644 --- a/src/webgui.cpp +++ b/src/webgui.cpp @@ -1,4 +1,5 @@ #include "webgui.h" +#include "screen.h" #ifdef ENABLE_SERVER @@ -406,4 +407,18 @@ void startGui(AsyncWebServerRequest *request) request->send(response); } +void handleMessage(AsyncWebServerRequest *request){ + + Screen.persist(); + + // Print the received text + Screen.scrollText(request->arg("text").c_str()); + + // Send a response to the client + request->send(200, "text/plain", "Message received"); + + //restore old screen + Screen.loadFromStorage(); +} + #endif From bf089e56bad966602b895759b9ed2f5dedeb6faf Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Sat, 2 Dec 2023 16:51:05 +0100 Subject: [PATCH 03/14] feat(text): improve message handling --- include/messages.h | 50 +++++++++++++++++ include/webgui.h | 1 - platformio.ini | 23 ++------ src/asyncwebserver.cpp | 6 +- src/main.cpp | 4 ++ src/messages.cpp | 121 +++++++++++++++++++++++++++++++++++++++++ src/webgui.cpp | 12 ---- 7 files changed, 185 insertions(+), 32 deletions(-) create mode 100644 include/messages.h create mode 100644 src/messages.cpp diff --git a/include/messages.h b/include/messages.h new file mode 100644 index 0000000..5b2ad95 --- /dev/null +++ b/include/messages.h @@ -0,0 +1,50 @@ +#pragma once + +/* +#include + +#include "PluginManager.h" +#include "signs.h" +#include "constants.h" +#include "storage.h"*/ +#include +#include "screen.h" + + +class Message +{ + public: + int id; + int repeat; + std::string text; + std::vector graph; +}; + + +class Messages_ +{ + + private: + Messages_() = default; + std::vector messages; + public: + static Messages_ &getInstance(); + + Messages_(const Screen_ &) = delete; + Messages_ &operator=(const Screen_ &) = delete; + + void add(std::string text, int repeat = 0, int id = 0, std::vector graph = {} ); + + void remove(int id = 0 ); + + void scroll(); + void scrollMessageEveryMinute(); + +}; + +extern Messages_ &Messages; + +void handleMessage(AsyncWebServerRequest *request); +void handleRemove(AsyncWebServerRequest *request); + + diff --git a/include/webgui.h b/include/webgui.h index 516732b..a352ec7 100644 --- a/include/webgui.h +++ b/include/webgui.h @@ -6,5 +6,4 @@ #include void startGui(AsyncWebServerRequest *request); -void handleMessage(AsyncWebServerRequest *request); #endif diff --git a/platformio.ini b/platformio.ini index 0b87948..54d2c0b 100644 --- a/platformio.ini +++ b/platformio.ini @@ -7,6 +7,8 @@ ; ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html +[platformio] +default_envs = esp32dev [env:esp32dev] platform = espressif32 @@ -20,23 +22,10 @@ monitor_speed = 115200 monitor_filters = esp32_exception_decoder ; extra_scripts = upload.py ; upload_protocol = custom -; upload_url = http://192.168.178.50/update - -[env:esp32dev-ota] -platform = espressif32 -board = esp32dev -framework = arduino -lib_deps = - https://github.com/me-no-dev/ESPAsyncWebServer.git - bblanchon/ArduinoJson@^6.19.4 - https://github.com/tzapu/WiFiManager.git#v2.0.16-rc.2 -monitor_speed = 115200 -; extra_scripts = upload.py -; upload_protocol = custom -; upload_url = http://192.168.0.114/update - -[env:d1_mini_pro] -board = d1_mini_pro +; upload_url = http://192.168.178.141/update +;upload_port=COM4 +[env:nodemcuv2] +board = nodemcuv2 platform = espressif8266 framework = arduino ; build_type = debug diff --git a/src/asyncwebserver.cpp b/src/asyncwebserver.cpp index a7d2d5b..ef271fb 100644 --- a/src/asyncwebserver.cpp +++ b/src/asyncwebserver.cpp @@ -1,4 +1,5 @@ #include "asyncwebserver.h" +#include "messages.h" #ifdef ENABLE_SERVER @@ -14,9 +15,10 @@ void initWebServer() server.onNotFound([](AsyncWebServerRequest *request) { request->send(404, "text/plain", "Page not found!"); }); - // Route to handle "/message?text=" URL - server.on("/message", HTTP_GET, handleMessage); + // Route to handle http://your-server/message?text=Hello&repeat=3&id=42&graph=1,2,3,4 + server.on("/message", HTTP_GET, handleMessage); + server.on("/removemessage", HTTP_GET, handleRemove); server.begin(); } diff --git a/src/main.cpp b/src/main.cpp index 573793a..5371350 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -37,6 +37,7 @@ #include "screen.h" #include "secrets.h" #include "websocket.h" +#include "messages.h" unsigned long previousMillis = 0; unsigned long interval = 30000; @@ -186,6 +187,9 @@ void setup() void loop() { + + Messages.scrollMessageEveryMinute(); + pluginManager.runActivePlugin(); if (WiFi.status() != WL_CONNECTED && millis() - lastConnectionAttempt > connectionInterval) diff --git a/src/messages.cpp b/src/messages.cpp new file mode 100644 index 0000000..68d3857 --- /dev/null +++ b/src/messages.cpp @@ -0,0 +1,121 @@ +#include "messages.h" +#include + +using namespace std; + +Messages_ &Messages_::getInstance() +{ + static Messages_ instance; + return instance; +} + +// std::string text, int repeat = 0, int id = 0; std::vector graph = {} +void Messages_::add(std::string text, int repeat, int id, std::vector graph) +{ + messages.emplace_back(Message{id, repeat, text, graph}); + scroll(); +} + +void Messages_::remove(int id) +{ + // Use std::remove_if to move the messages to be removed to the end of the vector + auto it = std::remove_if(messages.begin(), messages.end(), [id](const Message &msg) + { return msg.id == id; }); + + // Erase the messages marked for removal + messages.erase(it, messages.end()); +} + +void Messages_::scroll() +{ + + Screen.persist(); + + for (auto it = messages.begin(); it != messages.end();) + { + // Print the text for each message + Screen.scrollText(it->text.c_str()); + + // Decrease repeat and remove if it becomes less than 0 + if (--(it->repeat) < 0) + { + it = messages.erase(it); + } + else + { + ++it; + } + + // You might want to consider adding some delay or other logic here + } + + // restore old screen + Screen.loadFromStorage(); +} + +void Messages_::scrollMessageEveryMinute() +{ + // Static variable to remember the previous minute + static int previousMinute; + + // Structure to hold time information + struct tm timeinfo; + + // Check if the local time can be obtained + if (getLocalTime(&timeinfo)) + { + // Check if the current minute is different from the previous minute + if (timeinfo.tm_min != previousMinute) + { + // Update the previous minute to the current minute + previousMinute = timeinfo.tm_min; + + // Call the scroll function to display messages + scroll(); + } + } +} + + +Messages_ &Messages = Messages.getInstance(); + +// http://your-server/message?text=Hello&repeat=3&id=42&graph=1,2,3,4 +void handleMessage(AsyncWebServerRequest *request) +{ + + // Extracting parameters from the URL + std::string text = request->arg("text").c_str(); + int repeat = request->arg("repeat").toInt(); + int id = request->arg("id").toInt(); + + // Extracting the 'graph' parameter as a comma-separated list of integers + std::string graphParam = request->arg("graph").c_str(); + std::vector graph; + + char *token = strtok(const_cast(graphParam.c_str()), ","); + while (token != nullptr) + { + // Convert the substring to an integer and add it to the vector + graph.push_back(std::stoi(token)); + token = strtok(nullptr, ","); + } + + // Call the add function with the extracted parameters + Messages.add(text, repeat, id, graph); + + // Send a response to the client + request->send(200, "text/plain", "Message received"); +} + +// http://your-server/removemessage?id=42 +void handleRemove(AsyncWebServerRequest *request) +{ + + int id = request->arg("id").toInt(); + + // Call the add function with the extracted parameters + Messages.remove(id); + + // Send a response to the client + request->send(200, "text/plain", "Message received"); +} \ No newline at end of file diff --git a/src/webgui.cpp b/src/webgui.cpp index 717133a..5a224f9 100644 --- a/src/webgui.cpp +++ b/src/webgui.cpp @@ -407,18 +407,6 @@ void startGui(AsyncWebServerRequest *request) request->send(response); } -void handleMessage(AsyncWebServerRequest *request){ - Screen.persist(); - - // Print the received text - Screen.scrollText(request->arg("text").c_str()); - - // Send a response to the client - request->send(200, "text/plain", "Message received"); - - //restore old screen - Screen.loadFromStorage(); -} #endif From d3f9aa430fa6d635a7504de4c3edc84e215f1a09 Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Sun, 3 Dec 2023 11:58:18 +0100 Subject: [PATCH 04/14] feat(text): graph printing in messages --- include/messages.h | 4 +++- include/screen.h | 1 + src/messages.cpp | 12 ++++++------ src/screen.cpp | 45 ++++++++++++++++++++++++++++++++++++--------- 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/include/messages.h b/include/messages.h index 5b2ad95..1cfc7eb 100644 --- a/include/messages.h +++ b/include/messages.h @@ -25,9 +25,11 @@ class Messages_ { private: + Messages_() = default; std::vector messages; - public: + int previousMinute; +public: static Messages_ &getInstance(); Messages_(const Screen_ &) = delete; diff --git a/include/screen.h b/include/screen.h index 0d30fdc..348076d 100644 --- a/include/screen.h +++ b/include/screen.h @@ -72,6 +72,7 @@ class Screen_ std::vector readBytes(std::vector bytes); void scrollText(std::string text, int delayTime = 30, uint8_t brightness = 255 ); + void scrollGraph( std::vector graph = {}, int miny=0, int maxy=15, int delayTime = 60, uint8_t brightness = 255); }; extern Screen_ &Screen; diff --git a/src/messages.cpp b/src/messages.cpp index 68d3857..a457b0e 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -13,7 +13,8 @@ Messages_ &Messages_::getInstance() void Messages_::add(std::string text, int repeat, int id, std::vector graph) { messages.emplace_back(Message{id, repeat, text, graph}); - scroll(); + //scroll(); + previousMinute=-1; // force to show message imedeately in next loop. Apparently http handlers cant run to long } void Messages_::remove(int id) @@ -33,9 +34,10 @@ void Messages_::scroll() for (auto it = messages.begin(); it != messages.end();) { - // Print the text for each message - Screen.scrollText(it->text.c_str()); + // Print the text for each message + if(it->text.length()>0) Screen.scrollText(it->text.c_str()); + if(it->graph.size()>0) Screen.scrollGraph(it->graph); // Decrease repeat and remove if it becomes less than 0 if (--(it->repeat) < 0) { @@ -46,7 +48,6 @@ void Messages_::scroll() ++it; } - // You might want to consider adding some delay or other logic here } // restore old screen @@ -55,8 +56,7 @@ void Messages_::scroll() void Messages_::scrollMessageEveryMinute() { - // Static variable to remember the previous minute - static int previousMinute; + // Structure to hold time information struct tm timeinfo; diff --git a/src/screen.cpp b/src/screen.cpp index 023d3d1..366a8ba 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -299,22 +299,24 @@ void Screen_::drawWeather(int x, int y, int weather, uint8_t brightness) this->drawCharacter(x, y, this->readBytes(weatherIcons[weather]), 16, brightness); } -void Screen_::scrollText(std::string text, int delayTime, uint8_t brightness) +void Screen_::scrollText(std::string text, int delayTime, uint8_t brightness) { - int textWidth = text.length() * 6 ; // Assuming 6 pixels width for each character + space + int textWidth = text.length() * 6; // Assuming 6 pixels width for each character + space - for (int i = -16; i < textWidth; i++) { // start with negarive screen size, so out of screen to the right + for (int i = -ROWS; i < textWidth; i++) + { // start with negarive screen size, so out of screen to the right this->clear(); - - for (std::size_t strPos = 0; strPos < text.length(); strPos++) { // since i need the pos to calculate, this is the best way to iterate here - + + for (std::size_t strPos = 0; strPos < text.length(); strPos++) + { // since i need the pos to calculate, this is the best way to iterate here + int xPos = strPos * 6 - i; - if (xPos > -6 && xPos < 16) { //so are we somewhere on screen with the char? + if (xPos > -6 && xPos < ROWS) + { // so are we somewhere on screen with the char? // yes tsystem6x7 charset starts wis space (char32) - Screen.drawCharacter(xPos,4, Screen.readBytes(system6x7[text[strPos]-32]), 8); - + Screen.drawCharacter(xPos, 4, Screen.readBytes(system6x7[text[strPos] - 32]), 8); } } @@ -322,6 +324,31 @@ void Screen_::scrollText(std::string text, int delayTime, uint8_t brightness) } } +void Screen_::scrollGraph(std::vector graph, int miny, int maxy, int delayTime, uint8_t brightness) +{ + if (graph.size() <= 0) { + // Handle empty graph + return; + } + + for (int i = -ROWS; i < (int)graph.size(); i++) //if somebody cares: that int cast cost me >1h + { + this->clear(); + for (int x = 0; x < ROWS; x++) + { + int index = i + x; + + if (index >= 0 && index < graph.size()) + { + int y = ROWS-((graph[index] - miny+1) * ROWS) / (maxy - miny +1) ; + + this->setPixel(x, y, 1, brightness); + } + } + delay(delayTime); + } +} + Screen_ &Screen_::getInstance() { static Screen_ instance; From 0df7bdcdceb0ab204cc3fc0e9340f0cd3b64d5fd Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Sun, 3 Dec 2023 17:15:41 +0100 Subject: [PATCH 05/14] feat(text): fixes and update readme --- README.md | 37 +++++++++++++++++++++++++++++++++++++ include/messages.h | 7 ------- src/messages.cpp | 11 +++++------ 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 10c097d..26dfb6e 100644 --- a/README.md +++ b/README.md @@ -201,7 +201,44 @@ void MyPlugin::websocketHook(DynamicJsonDocument &request) { pluginManager.addPlugin(new MyPlugin()); ``` +# External Call +The LED Display service provides a simple yet powerful external interface that allows users to display messages and graphs on a 16x16 LED display. This functionality can be accessed through HTTP calls to the service endpoint. + +## Message Display + +To display a message on the LED display, users can make an HTTP GET request to the following endpoint: +``` +http://your-server/message +``` +### Parameters + +- `text` (optional): The text message to be displayed on the LED display. +- `graph` (optional): A comma-separated list of integers representing a graph. The values should be in the range of 0 to 15 and will be visualized as a graph on the LED display. +- `repeat` (optional): The number of times the message should be repeated. If not provided, the default is 1. +- `id` (optional): A unique identifier for the message. This can be used for later removal or modification of the message. + +#### Example + +``` +GET http://your-server/message?text=Hello&graph=8,5,2,1,0,0,1,4,7,10,13,14,15,15,14,11&repeat=3&id=1 +``` +This example will display the message "Hello" on the LED display with a corresponding graph, repeat it three times, and assign it the identifier 1. + +## Message Removal +To remove a message from the display, users can make an HTTP GET request to the following endpoint: + +``` +http://your-server/removemessage +``` +###Parameters +- `id` (required): The unique identifier of the message to be removed. +####Example + +``` +GET http://your-server/removemessage?id=1 +``` +This example will remove the message with the identifier 1 from the LED display. # Ideas - [ ] gifs diff --git a/include/messages.h b/include/messages.h index 1cfc7eb..f4602a4 100644 --- a/include/messages.h +++ b/include/messages.h @@ -1,12 +1,5 @@ #pragma once -/* -#include - -#include "PluginManager.h" -#include "signs.h" -#include "constants.h" -#include "storage.h"*/ #include #include "screen.h" diff --git a/src/messages.cpp b/src/messages.cpp index a457b0e..fcd09b7 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -12,9 +12,9 @@ Messages_ &Messages_::getInstance() // std::string text, int repeat = 0, int id = 0; std::vector graph = {} void Messages_::add(std::string text, int repeat, int id, std::vector graph) { + remove(id); // there should be only one message by id messages.emplace_back(Message{id, repeat, text, graph}); - //scroll(); - previousMinute=-1; // force to show message imedeately in next loop. Apparently http handlers cant run to long + previousMinute=-1; // force the message to be displayed immediately in the next loop. Apparently http handler cannot run for too long } void Messages_::remove(int id) @@ -67,12 +67,11 @@ void Messages_::scrollMessageEveryMinute() // Check if the current minute is different from the previous minute if (timeinfo.tm_min != previousMinute) { - // Update the previous minute to the current minute - previousMinute = timeinfo.tm_min; - // Call the scroll function to display messages scroll(); - } + + // Update the previous minute to the current minute + previousMinute = timeinfo.tm_min; } } } From b915ae59f4e25ad8105cc8ed754b24f545b582f8 Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Tue, 5 Dec 2023 17:23:17 +0100 Subject: [PATCH 06/14] feat(text): additional parameters, better graph - delay, - miny, - maxy -graph is painted with lines instead of pixel only --- README.md | 7 +++++-- include/messages.h | 5 ++++- src/asyncwebserver.cpp | 3 +-- src/messages.cpp | 21 +++++++++++++++------ src/screen.cpp | 13 ++++++++++--- 5 files changed, 35 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 26dfb6e..67fefcc 100644 --- a/README.md +++ b/README.md @@ -215,15 +215,18 @@ http://your-server/message - `text` (optional): The text message to be displayed on the LED display. - `graph` (optional): A comma-separated list of integers representing a graph. The values should be in the range of 0 to 15 and will be visualized as a graph on the LED display. +- `miny` (optional): scaling for lower end of the graph, defaults to 0 +- `maxy` (optional): scaling for upper end of the graph, defaults to 15 - `repeat` (optional): The number of times the message should be repeated. If not provided, the default is 1. - `id` (optional): A unique identifier for the message. This can be used for later removal or modification of the message. +- `delay` (optional): The number of ms of delay between every scroll move. Default is 50 ms. #### Example ``` -GET http://your-server/message?text=Hello&graph=8,5,2,1,0,0,1,4,7,10,13,14,15,15,14,11&repeat=3&id=1 +GET http://your-server/message?text=Hello&graph=8,5,2,1,0,0,1,4,7,10,13,14,15,15,14,11&repeat=3&id=1;delay=60 ``` -This example will display the message "Hello" on the LED display with a corresponding graph, repeat it three times, and assign it the identifier 1. +This example will display the message "Hello" on the LED display with a corresponding graph, repeat it three times, and assign it the identifier 1, waits 60ms while scrolling. ## Message Removal To remove a message from the display, users can make an HTTP GET request to the following endpoint: diff --git a/include/messages.h b/include/messages.h index f4602a4..279774d 100644 --- a/include/messages.h +++ b/include/messages.h @@ -9,8 +9,11 @@ class Message public: int id; int repeat; + int delay; std::string text; std::vector graph; + int miny; + int maxy; }; @@ -28,7 +31,7 @@ class Messages_ Messages_(const Screen_ &) = delete; Messages_ &operator=(const Screen_ &) = delete; - void add(std::string text, int repeat = 0, int id = 0, std::vector graph = {} ); + void add(std::string text, int repeat = 0, int id = 0, int delay = 50,std::vector graph = {}, int miny=0, int maxy=15 ); void remove(int id = 0 ); diff --git a/src/asyncwebserver.cpp b/src/asyncwebserver.cpp index ef271fb..7a29929 100644 --- a/src/asyncwebserver.cpp +++ b/src/asyncwebserver.cpp @@ -15,9 +15,8 @@ void initWebServer() server.onNotFound([](AsyncWebServerRequest *request) { request->send(404, "text/plain", "Page not found!"); }); - // Route to handle http://your-server/message?text=Hello&repeat=3&id=42&graph=1,2,3,4 + // Route to handle http://your-server/message?text=Hello&repeat=3&id=42&delay=30&graph=1,2,3,4&miny=0&maxy=15 server.on("/message", HTTP_GET, handleMessage); - server.on("/removemessage", HTTP_GET, handleRemove); server.begin(); } diff --git a/src/messages.cpp b/src/messages.cpp index fcd09b7..723f728 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -9,11 +9,11 @@ Messages_ &Messages_::getInstance() return instance; } -// std::string text, int repeat = 0, int id = 0; std::vector graph = {} -void Messages_::add(std::string text, int repeat, int id, std::vector graph) +// std::string text, int repeat = 0, int id = 0; int delay = 50, std::vector graph = {}, int miny=0, int maxy=15 +void Messages_::add(std::string text, int repeat, int id, int delay, std::vector graph, int miny, int maxy) { remove(id); // there should be only one message by id - messages.emplace_back(Message{id, repeat, text, graph}); + messages.emplace_back(Message{id, repeat, delay, text, graph,miny,maxy}); previousMinute=-1; // force the message to be displayed immediately in the next loop. Apparently http handler cannot run for too long } @@ -36,8 +36,8 @@ void Messages_::scroll() { // Print the text for each message - if(it->text.length()>0) Screen.scrollText(it->text.c_str()); - if(it->graph.size()>0) Screen.scrollGraph(it->graph); + if(it->text.length()>0) Screen.scrollText(it->text.c_str(),it->delay); + if(it->graph.size()>0) Screen.scrollGraph(it->graph,it->miny, it->maxy, it->delay); // Decrease repeat and remove if it becomes less than 0 if (--(it->repeat) < 0) { @@ -86,6 +86,15 @@ void handleMessage(AsyncWebServerRequest *request) std::string text = request->arg("text").c_str(); int repeat = request->arg("repeat").toInt(); int id = request->arg("id").toInt(); + int delay = request->arg("delay").toInt(); + int miny = request->arg("miny").toInt(); + int maxy = request->arg("maxy").toInt(); + + //if no delay has been passed, use 50 ms + if(delay<=0)delay=50; + + //default maxy to 15 + if(maxy==0)maxy=15; // Extracting the 'graph' parameter as a comma-separated list of integers std::string graphParam = request->arg("graph").c_str(); @@ -100,7 +109,7 @@ void handleMessage(AsyncWebServerRequest *request) } // Call the add function with the extracted parameters - Messages.add(text, repeat, id, graph); + Messages.add(text, repeat, id, delay, graph, miny, maxy); // Send a response to the client request->send(200, "text/plain", "Message received"); diff --git a/src/screen.cpp b/src/screen.cpp index 366a8ba..cf32842 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -340,9 +340,16 @@ void Screen_::scrollGraph(std::vector graph, int miny, int maxy, int delayT if (index >= 0 && index < graph.size()) { - int y = ROWS-((graph[index] - miny+1) * ROWS) / (maxy - miny +1) ; - - this->setPixel(x, y, 1, brightness); + int y2 = ROWS-((graph[index] - miny+1) * ROWS) / (maxy - miny +1) ; + if(x>0 && index>0) //if we are not first pixel on screen + { + int y1 = ROWS-((graph[index-1] - miny+1) * ROWS) / (maxy - miny +1) ; + this->drawLine(x-1,y1,x,y2,1,brightness); + } + else //first pixel on graph/on screen + { + this->setPixel(x, y2, 1, brightness); + } } } delay(delayTime); From 9cc22eca3a95e5e806ddfe3a026bb2ad9a6e563a Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Tue, 5 Dec 2023 17:36:34 +0100 Subject: [PATCH 07/14] feat(text): infinite message repeat --- README.md | 2 +- src/messages.cpp | 43 +++++++++++++++++++++++++++---------------- src/screen.cpp | 13 +++++++++---- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 67fefcc..b482519 100644 --- a/README.md +++ b/README.md @@ -217,7 +217,7 @@ http://your-server/message - `graph` (optional): A comma-separated list of integers representing a graph. The values should be in the range of 0 to 15 and will be visualized as a graph on the LED display. - `miny` (optional): scaling for lower end of the graph, defaults to 0 - `maxy` (optional): scaling for upper end of the graph, defaults to 15 -- `repeat` (optional): The number of times the message should be repeated. If not provided, the default is 1. +- `repeat` (optional): The number of times the message should be repeated. If not provided, the default is 1. Set this value to -1 to repeat infinitely. - `id` (optional): A unique identifier for the message. This can be used for later removal or modification of the message. - `delay` (optional): The number of ms of delay between every scroll move. Default is 50 ms. diff --git a/src/messages.cpp b/src/messages.cpp index 723f728..94f8436 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -13,8 +13,8 @@ Messages_ &Messages_::getInstance() void Messages_::add(std::string text, int repeat, int id, int delay, std::vector graph, int miny, int maxy) { remove(id); // there should be only one message by id - messages.emplace_back(Message{id, repeat, delay, text, graph,miny,maxy}); - previousMinute=-1; // force the message to be displayed immediately in the next loop. Apparently http handler cannot run for too long + messages.emplace_back(Message{id, repeat, delay, text, graph, miny, maxy}); + previousMinute = -1; // force the message to be displayed immediately in the next loop. Apparently http handler cannot run for too long } void Messages_::remove(int id) @@ -36,18 +36,28 @@ void Messages_::scroll() { // Print the text for each message - if(it->text.length()>0) Screen.scrollText(it->text.c_str(),it->delay); - if(it->graph.size()>0) Screen.scrollGraph(it->graph,it->miny, it->maxy, it->delay); - // Decrease repeat and remove if it becomes less than 0 - if (--(it->repeat) < 0) + if (it->text.length() > 0) + Screen.scrollText(it->text.c_str(), it->delay); + if (it->graph.size() > 0) + Screen.scrollGraph(it->graph, it->miny, it->maxy, it->delay); + + // if the repeat is not -1, which is the flag for infinite repeat + if (it->repeat != -1) { - it = messages.erase(it); + // Decrease repeat and remove if it becomes less than 0 + if (--(it->repeat) < 0) + { + it = messages.erase(it); + } + else + { + ++it; + } } else { ++it; } - } // restore old screen @@ -57,7 +67,6 @@ void Messages_::scroll() void Messages_::scrollMessageEveryMinute() { - // Structure to hold time information struct tm timeinfo; @@ -69,13 +78,13 @@ void Messages_::scrollMessageEveryMinute() { // Call the scroll function to display messages scroll(); - + // Update the previous minute to the current minute - previousMinute = timeinfo.tm_min; } + previousMinute = timeinfo.tm_min; + } } } - Messages_ &Messages = Messages.getInstance(); // http://your-server/message?text=Hello&repeat=3&id=42&graph=1,2,3,4 @@ -90,11 +99,13 @@ void handleMessage(AsyncWebServerRequest *request) int miny = request->arg("miny").toInt(); int maxy = request->arg("maxy").toInt(); - //if no delay has been passed, use 50 ms - if(delay<=0)delay=50; + // if no delay has been passed, use 50 ms + if (delay <= 0) + delay = 50; - //default maxy to 15 - if(maxy==0)maxy=15; + // default maxy to 15 + if (maxy == 0) + maxy = 15; // Extracting the 'graph' parameter as a comma-separated list of integers std::string graphParam = request->arg("graph").c_str(); diff --git a/src/screen.cpp b/src/screen.cpp index cf32842..b75dfcf 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -334,22 +334,27 @@ void Screen_::scrollGraph(std::vector graph, int miny, int maxy, int delayT for (int i = -ROWS; i < (int)graph.size(); i++) //if somebody cares: that int cast cost me >1h { this->clear(); + + int y1 = -999; // previous point. + for (int x = 0; x < ROWS; x++) { int index = i + x; - if (index >= 0 && index < graph.size()) - { + { + int y2 = ROWS-((graph[index] - miny+1) * ROWS) / (maxy - miny +1) ; - if(x>0 && index>0) //if we are not first pixel on screen + //if we are not first pixel on screen + //and the distance is < 6, so we do not bridge too big gaps + if(x>0 && index>0 && abs(y2-y1)<6) { - int y1 = ROWS-((graph[index-1] - miny+1) * ROWS) / (maxy - miny +1) ; this->drawLine(x-1,y1,x,y2,1,brightness); } else //first pixel on graph/on screen { this->setPixel(x, y2, 1, brightness); } + y1 = y2; // this value is next values previous value } } delay(delayTime); From 73d300e179ba5633c2d44c82d72f0f443a78ea82 Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Sun, 10 Dec 2023 19:53:07 +0100 Subject: [PATCH 08/14] feat(text): handle brightness correct --- src/plugins/TickingClockPlugin.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/TickingClockPlugin.cpp b/src/plugins/TickingClockPlugin.cpp index 32390f9..112166d 100644 --- a/src/plugins/TickingClockPlugin.cpp +++ b/src/plugins/TickingClockPlugin.cpp @@ -35,10 +35,10 @@ void TickingClockPlugin::loop() Screen.clear(); - Screen.drawCharacter(2,0, Screen.readBytes(system6x7[hh[0]+16]), 8); - Screen.drawCharacter(9,0, Screen.readBytes(system6x7[hh[1]+16]), 8); - Screen.drawCharacter(2,9, Screen.readBytes(system6x7[mm[0]+16]), 8); - Screen.drawCharacter(9,9, Screen.readBytes(system6x7[mm[1]+16]), 8); + Screen.drawCharacter(2,0, Screen.readBytes(system6x7[hh[0]+16]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(9,0, Screen.readBytes(system6x7[hh[1]+16]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(2,9, Screen.readBytes(system6x7[mm[0]+16]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(9,9, Screen.readBytes(system6x7[mm[1]+16]), 8, Screen.getCurrentBrightness()); previousMinutes = timeinfo.tm_min; previousHour = timeinfo.tm_hour; } @@ -48,9 +48,9 @@ void TickingClockPlugin::loop() Screen.drawRectangle(0,7,16,2,true,0); // alternating second pixel if ((timeinfo.tm_sec * 32 / 60) % 2 == 0) - Screen.setPixel(timeinfo.tm_sec*16/60,7,1); + Screen.setPixel(timeinfo.tm_sec*16/60,7,1, Screen.getCurrentBrightness()); else - Screen.setPixel(timeinfo.tm_sec*16/60,8,1); + Screen.setPixel(timeinfo.tm_sec*16/60,8,1 Screen.getCurrentBrightness()); previousSecond = timeinfo.tm_sec; } From 428dbe98688fcc6c4119aa5474c2714db781b101 Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Sun, 10 Dec 2023 20:20:29 +0100 Subject: [PATCH 09/14] feat(text): better offset handling in font --- src/plugins/TickingClockPlugin.cpp | 16 +++++++------- src/screen.cpp | 2 +- src/signs.cpp | 34 +++++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/plugins/TickingClockPlugin.cpp b/src/plugins/TickingClockPlugin.cpp index 112166d..78f28e1 100644 --- a/src/plugins/TickingClockPlugin.cpp +++ b/src/plugins/TickingClockPlugin.cpp @@ -3,13 +3,13 @@ void TickingClockPlugin::setup() { // loading screen - Screen.setPixel(4, 7, 1); +/* Screen.setPixel(4, 7, 1); Screen.setPixel(5, 7, 1); Screen.setPixel(7, 7, 1); Screen.setPixel(8, 7, 1); Screen.setPixel(10, 7, 1); Screen.setPixel(11, 7, 1); - +*/ previousMinutes = -1; previousHour = -1; } @@ -28,17 +28,17 @@ void TickingClockPlugin::loop() if (previousHour != timeinfo.tm_hour || previousMinutes != timeinfo.tm_min) { - if(previousHour==-1)Screen.scrollText("Welcome to Ticking Clock!"); + // if(previousHour==-1)Screen.scrollText("Welcome to Ticking Clock!"); std::vector hh = {(timeinfo.tm_hour - timeinfo.tm_hour % 10) / 10, timeinfo.tm_hour % 10}; std::vector mm = {(timeinfo.tm_min - timeinfo.tm_min % 10) / 10, timeinfo.tm_min % 10}; Screen.clear(); - Screen.drawCharacter(2,0, Screen.readBytes(system6x7[hh[0]+16]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(9,0, Screen.readBytes(system6x7[hh[1]+16]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(2,9, Screen.readBytes(system6x7[mm[0]+16]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(9,9, Screen.readBytes(system6x7[mm[1]+16]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(2,0, Screen.readBytes(system6x7[hh[0]+48]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(9,0, Screen.readBytes(system6x7[hh[1]+48]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(2,9, Screen.readBytes(system6x7[mm[0]+48]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(9,9, Screen.readBytes(system6x7[mm[1]+48]), 8, Screen.getCurrentBrightness()); previousMinutes = timeinfo.tm_min; previousHour = timeinfo.tm_hour; } @@ -50,7 +50,7 @@ void TickingClockPlugin::loop() if ((timeinfo.tm_sec * 32 / 60) % 2 == 0) Screen.setPixel(timeinfo.tm_sec*16/60,7,1, Screen.getCurrentBrightness()); else - Screen.setPixel(timeinfo.tm_sec*16/60,8,1 Screen.getCurrentBrightness()); + Screen.setPixel(timeinfo.tm_sec*16/60,8,1, Screen.getCurrentBrightness()); previousSecond = timeinfo.tm_sec; } diff --git a/src/screen.cpp b/src/screen.cpp index b75dfcf..688f8ea 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -316,7 +316,7 @@ void Screen_::scrollText(std::string text, int delayTime, uint8_t brightness) if (xPos > -6 && xPos < ROWS) { // so are we somewhere on screen with the char? // yes tsystem6x7 charset starts wis space (char32) - Screen.drawCharacter(xPos, 4, Screen.readBytes(system6x7[text[strPos] - 32]), 8); + Screen.drawCharacter(xPos, 4, Screen.readBytes(system6x7[text[strPos]]), 8); } } diff --git a/src/signs.cpp b/src/signs.cpp index 9e4b156..7c2fb50 100644 --- a/src/signs.cpp +++ b/src/signs.cpp @@ -52,7 +52,39 @@ std::vector> weatherIcons = { // system font based on https://github.com/MakeMagazinDE/Obegraensad by DR. ARMIN ZINK std::vector> system6x7 = { - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // (s + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00000000, 0b00100000}, // ! {0b01010000, 0b01010000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // " {0b01010000, 0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01010000, 0b01010000}, // # From 9f7619444019ea6c438dd6717b0fe840a2bfdabb Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Mon, 11 Dec 2023 17:58:56 +0100 Subject: [PATCH 10/14] chore: formatting --- README.md | 40 +++-- include/messages.h | 17 +- include/plugins/AnimationPlugin.h | 2 +- include/screen.h | 4 +- include/signs.h | 2 +- src/messages.cpp | 3 +- src/plugins/TickingClockPlugin.cpp | 53 +++--- src/screen.cpp | 29 ++-- src/signs.cpp | 258 ++++++++++++++--------------- src/webgui.cpp | 2 +- 10 files changed, 203 insertions(+), 207 deletions(-) diff --git a/README.md b/README.md index b482519..10cefec 100644 --- a/README.md +++ b/README.md @@ -109,16 +109,16 @@ The name of the created network can be changed by modifying `WIFI_MANAGER_SSID` Connect them like this and remember to set them in `include/constants.h` according to your board. -| LCD | ESP32 | TTGO LoRa32 | NodeMCUv2 |Lolin D32 (Pro) | -| :--------------: | :----: | :---------: | :-------: | :------------: | -| GND | GND | GND | GND | GND | -| VCC | 5V | 5V | VIN | USB | -| EN (PIN_ENABLE) | GPIO26 | IO22 | GPIO16 D0 | GPIO26 | -| IN (PIN_DATA) | GPIO27 | IO23 | GPIO13 D7 | GPIO27 | -| CLK (PIN_CLOCK) | GPIO14 | IO02 | GPIO14 D5 | GPIO14 | -| CLA (PIN_LATCH) | GPIO12 | IO15 | GPIO0 D3 | GPIO12 | -| BUTTON one end | GPIO16 | IO21 | GPIO2 D4 | GPIO25 | -| BUTTON other end | GND | GND | GND | GND | +| LCD | ESP32 | TTGO LoRa32 | NodeMCUv2 | Lolin D32 (Pro) | +| :--------------: | :----: | :---------: | :-------: | :-------------: | +| GND | GND | GND | GND | GND | +| VCC | 5V | 5V | VIN | USB | +| EN (PIN_ENABLE) | GPIO26 | IO22 | GPIO16 D0 | GPIO26 | +| IN (PIN_DATA) | GPIO27 | IO23 | GPIO13 D7 | GPIO27 | +| CLK (PIN_CLOCK) | GPIO14 | IO02 | GPIO14 D5 | GPIO14 | +| CLA (PIN_LATCH) | GPIO12 | IO15 | GPIO0 D3 | GPIO12 | +| BUTTON one end | GPIO16 | IO21 | GPIO2 D4 | GPIO25 | +| BUTTON other end | GND | GND | GND | GND | @@ -201,6 +201,7 @@ void MyPlugin::websocketHook(DynamicJsonDocument &request) { pluginManager.addPlugin(new MyPlugin()); ``` + # External Call The LED Display service provides a simple yet powerful external interface that allows users to display messages and graphs on a 16x16 LED display. This functionality can be accessed through HTTP calls to the service endpoint. @@ -208,16 +209,18 @@ The LED Display service provides a simple yet powerful external interface that a ## Message Display To display a message on the LED display, users can make an HTTP GET request to the following endpoint: + ``` http://your-server/message ``` + ### Parameters - `text` (optional): The text message to be displayed on the LED display. - `graph` (optional): A comma-separated list of integers representing a graph. The values should be in the range of 0 to 15 and will be visualized as a graph on the LED display. -- `miny` (optional): scaling for lower end of the graph, defaults to 0 -- `maxy` (optional): scaling for upper end of the graph, defaults to 15 -- `repeat` (optional): The number of times the message should be repeated. If not provided, the default is 1. Set this value to -1 to repeat infinitely. +- `miny` (optional): scaling for lower end of the graph, defaults to 0 +- `maxy` (optional): scaling for upper end of the graph, defaults to 15 +- `repeat` (optional): The number of times the message should be repeated. If not provided, the default is 1. Set this value to -1 to repeat infinitely. - `id` (optional): A unique identifier for the message. This can be used for later removal or modification of the message. - `delay` (optional): The number of ms of delay between every scroll move. Default is 50 ms. @@ -226,22 +229,29 @@ http://your-server/message ``` GET http://your-server/message?text=Hello&graph=8,5,2,1,0,0,1,4,7,10,13,14,15,15,14,11&repeat=3&id=1;delay=60 ``` + This example will display the message "Hello" on the LED display with a corresponding graph, repeat it three times, and assign it the identifier 1, waits 60ms while scrolling. ## Message Removal + To remove a message from the display, users can make an HTTP GET request to the following endpoint: ``` http://your-server/removemessage ``` -###Parameters + +### Parameters + - `id` (required): The unique identifier of the message to be removed. -####Example + +#### Example ``` GET http://your-server/removemessage?id=1 ``` + This example will remove the message with the identifier 1 from the LED display. + # Ideas - [ ] gifs diff --git a/include/messages.h b/include/messages.h index 279774d..12fdc22 100644 --- a/include/messages.h +++ b/include/messages.h @@ -3,46 +3,41 @@ #include #include "screen.h" - class Message { - public: +public: int id; int repeat; int delay; std::string text; - std::vector graph; + std::vector graph; int miny; int maxy; }; - class Messages_ { - private: - +private: Messages_() = default; std::vector messages; int previousMinute; + public: static Messages_ &getInstance(); Messages_(const Screen_ &) = delete; Messages_ &operator=(const Screen_ &) = delete; - void add(std::string text, int repeat = 0, int id = 0, int delay = 50,std::vector graph = {}, int miny=0, int maxy=15 ); + void add(std::string text, int repeat = 0, int id = 0, int delay = 50, std::vector graph = {}, int miny = 0, int maxy = 15); - void remove(int id = 0 ); + void remove(int id = 0); void scroll(); void scrollMessageEveryMinute(); - }; extern Messages_ &Messages; void handleMessage(AsyncWebServerRequest *request); void handleRemove(AsyncWebServerRequest *request); - - diff --git a/include/plugins/AnimationPlugin.h b/include/plugins/AnimationPlugin.h index d43fdff..11086e1 100644 --- a/include/plugins/AnimationPlugin.h +++ b/include/plugins/AnimationPlugin.h @@ -12,5 +12,5 @@ class AnimationPlugin : public Plugin void setup() override; void loop() override; const char *getName() const override; - void websocketHook(DynamicJsonDocument& request) override; + void websocketHook(DynamicJsonDocument &request) override; }; diff --git a/include/screen.h b/include/screen.h index 348076d..5ce882b 100644 --- a/include/screen.h +++ b/include/screen.h @@ -71,8 +71,8 @@ class Screen_ void drawWeather(int x, int y, int weather, uint8_t brightness = 255); std::vector readBytes(std::vector bytes); - void scrollText(std::string text, int delayTime = 30, uint8_t brightness = 255 ); - void scrollGraph( std::vector graph = {}, int miny=0, int maxy=15, int delayTime = 60, uint8_t brightness = 255); + void scrollText(std::string text, int delayTime = 30, uint8_t brightness = 255); + void scrollGraph(std::vector graph = {}, int miny = 0, int maxy = 15, int delayTime = 60, uint8_t brightness = 255); }; extern Screen_ &Screen; diff --git a/include/signs.h b/include/signs.h index c97c709..7bde338 100644 --- a/include/signs.h +++ b/include/signs.h @@ -15,4 +15,4 @@ extern std::vector> bigNumbers; extern std::vector> lineAnimation; extern std::vector> weatherIcons; -extern std::vector> system6x7; \ No newline at end of file +extern std::vector> system6x7; \ No newline at end of file diff --git a/src/messages.cpp b/src/messages.cpp index 94f8436..47a26de 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -9,12 +9,11 @@ Messages_ &Messages_::getInstance() return instance; } -// std::string text, int repeat = 0, int id = 0; int delay = 50, std::vector graph = {}, int miny=0, int maxy=15 void Messages_::add(std::string text, int repeat, int id, int delay, std::vector graph, int miny, int maxy) { remove(id); // there should be only one message by id messages.emplace_back(Message{id, repeat, delay, text, graph, miny, maxy}); - previousMinute = -1; // force the message to be displayed immediately in the next loop. Apparently http handler cannot run for too long + previousMinute = -1; // force the message to be displayed immediately in the next loop. The http handler cannot run for too long } void Messages_::remove(int id) diff --git a/src/plugins/TickingClockPlugin.cpp b/src/plugins/TickingClockPlugin.cpp index 78f28e1..9ae67fb 100644 --- a/src/plugins/TickingClockPlugin.cpp +++ b/src/plugins/TickingClockPlugin.cpp @@ -2,14 +2,6 @@ void TickingClockPlugin::setup() { - // loading screen -/* Screen.setPixel(4, 7, 1); - Screen.setPixel(5, 7, 1); - Screen.setPixel(7, 7, 1); - Screen.setPixel(8, 7, 1); - Screen.setPixel(10, 7, 1); - Screen.setPixel(11, 7, 1); -*/ previousMinutes = -1; previousHour = -1; } @@ -17,44 +9,43 @@ void TickingClockPlugin::setup() void TickingClockPlugin::loop() { if (getLocalTime(&timeinfo)) - { + { - if ( (timeinfo.tm_hour*60+timeinfo.tm_min) < 6*60+30 || - (timeinfo.tm_hour*60+timeinfo.tm_min) > 22*60+30 ) //only between 6:30 and 22:30 - { - Screen.clear(); - return; + if ((timeinfo.tm_hour * 60 + timeinfo.tm_min) < 6 * 60 + 30 || + (timeinfo.tm_hour * 60 + timeinfo.tm_min) > 22 * 60 + 30) // only between 6:30 and 22:30 + { + Screen.clear(); + return; } if (previousHour != timeinfo.tm_hour || previousMinutes != timeinfo.tm_min) { - // if(previousHour==-1)Screen.scrollText("Welcome to Ticking Clock!"); std::vector hh = {(timeinfo.tm_hour - timeinfo.tm_hour % 10) / 10, timeinfo.tm_hour % 10}; std::vector mm = {(timeinfo.tm_min - timeinfo.tm_min % 10) / 10, timeinfo.tm_min % 10}; - + Screen.clear(); - - Screen.drawCharacter(2,0, Screen.readBytes(system6x7[hh[0]+48]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(9,0, Screen.readBytes(system6x7[hh[1]+48]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(2,9, Screen.readBytes(system6x7[mm[0]+48]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(9,9, Screen.readBytes(system6x7[mm[1]+48]), 8, Screen.getCurrentBrightness()); + + Screen.drawCharacter(2, 0, Screen.readBytes(system6x7[hh[0] + 48]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(9, 0, Screen.readBytes(system6x7[hh[1] + 48]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(2, 9, Screen.readBytes(system6x7[mm[0] + 48]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(9, 9, Screen.readBytes(system6x7[mm[1] + 48]), 8, Screen.getCurrentBrightness()); previousMinutes = timeinfo.tm_min; - previousHour = timeinfo.tm_hour; + previousHour = timeinfo.tm_hour; } - if(previousSecond != timeinfo.tm_sec){ - + if (previousSecond != timeinfo.tm_sec) + { + // clear second lane - Screen.drawRectangle(0,7,16,2,true,0); + Screen.drawRectangle(0, 7, 16, 2, true, 0); // alternating second pixel - if ((timeinfo.tm_sec * 32 / 60) % 2 == 0) - Screen.setPixel(timeinfo.tm_sec*16/60,7,1, Screen.getCurrentBrightness()); - else - Screen.setPixel(timeinfo.tm_sec*16/60,8,1, Screen.getCurrentBrightness()); + if ((timeinfo.tm_sec * 32 / 60) % 2 == 0) + Screen.setPixel(timeinfo.tm_sec * 16 / 60, 7, 1, Screen.getCurrentBrightness()); + else + Screen.setPixel(timeinfo.tm_sec * 16 / 60, 8, 1, Screen.getCurrentBrightness()); - previousSecond = timeinfo.tm_sec; + previousSecond = timeinfo.tm_sec; } - } } diff --git a/src/screen.cpp b/src/screen.cpp index 688f8ea..f9ea5e5 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -326,35 +326,36 @@ void Screen_::scrollText(std::string text, int delayTime, uint8_t brightness) void Screen_::scrollGraph(std::vector graph, int miny, int maxy, int delayTime, uint8_t brightness) { - if (graph.size() <= 0) { + if (graph.size() <= 0) + { // Handle empty graph return; } - for (int i = -ROWS; i < (int)graph.size(); i++) //if somebody cares: that int cast cost me >1h + for (int i = -ROWS; i < (int)graph.size(); i++) { this->clear(); - - int y1 = -999; // previous point. + + int y1 = -999; // previous point. for (int x = 0; x < ROWS; x++) { int index = i + x; if (index >= 0 && index < graph.size()) - { - - int y2 = ROWS-((graph[index] - miny+1) * ROWS) / (maxy - miny +1) ; - //if we are not first pixel on screen - //and the distance is < 6, so we do not bridge too big gaps - if(x>0 && index>0 && abs(y2-y1)<6) - { - this->drawLine(x-1,y1,x,y2,1,brightness); + { + + int y2 = ROWS - ((graph[index] - miny + 1) * ROWS) / (maxy - miny + 1); + // if we are not first pixel on screen + // and the distance is < 6, so we do not bridge too big gaps + if (x > 0 && index > 0 && abs(y2 - y1) < 6) + { + this->drawLine(x - 1, y1, x, y2, 1, brightness); } - else //first pixel on graph/on screen + else // first pixel on graph/on screen { this->setPixel(x, y2, 1, brightness); } - y1 = y2; // this value is next values previous value + y1 = y2; // this value is next values previous value } } delay(delayTime); diff --git a/src/signs.cpp b/src/signs.cpp index 7c2fb50..7c90217 100644 --- a/src/signs.cpp +++ b/src/signs.cpp @@ -51,133 +51,133 @@ std::vector> weatherIcons = { // system font based on https://github.com/MakeMagazinDE/Obegraensad by DR. ARMIN ZINK std::vector> system6x7 = -{ - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00000000, 0b00100000}, // ! - {0b01010000, 0b01010000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // " - {0b01010000, 0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01010000, 0b01010000}, // # - {0b00100000, 0b01111000, 0b10100000, 0b01110000, 0b00101000, 0b11110000, 0b00100000}, // $ - {0b11000000, 0b11001000, 0b00010000, 0b00100000, 0b01000000, 0b10011000, 0b00011000}, // % - {0b01100000, 0b10010000, 0b10100000, 0b01000000, 0b10101000, 0b10010000, 0b01101000}, // & - {0b01100000, 0b00100000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ' - {0b00010000, 0b00100000, 0b01000000, 0b01000000, 0b01000000, 0b00100000, 0b00010000}, // ( - {0b01000000, 0b00100000, 0b00010000, 0b00010000, 0b00010000, 0b00100000, 0b01000000}, // ) - {0b00000000, 0b01010000, 0b00100000, 0b11111000, 0b00100000, 0b01010000, 0b00000000}, // * - {0b00000000, 0b00100000, 0b00100000, 0b11111000, 0b00100000, 0b00100000, 0b00000000}, // + - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // , - {0b00000000, 0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b00000000, 0b00000000}, // - - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b01100000}, // . - {0b00000000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b00000000}, // / - {0b01111000, 0b11111100, 0b11001100, 0b11001100, 0b11001100, 0b11111100, 0b01111000}, // 0 - {0b00110000, 0b01110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 1 - {0b01111000, 0b11111100, 0b00001100, 0b00111000, 0b01100000, 0b11111100, 0b11111100}, // 2 - {0b01111000, 0b11111100, 0b00001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 3 - {0b11001100, 0b11001100, 0b11111100, 0b01111100, 0b00001100, 0b00001100, 0b00001100}, // 4 - {0b11111100, 0b11111100, 0b11000000, 0b11111000, 0b00001100, 0b11111100, 0b11111000}, // 5 - {0b01111000, 0b11111100, 0b11000000, 0b11111000, 0b11001100, 0b11111100, 0b01111000}, // 6 - {0b11111100, 0b11111100, 0b00011000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 7 - {0b01111000, 0b11111100, 0b11001100, 0b01111000, 0b11001100, 0b11111100, 0b01111000}, // 8 - {0b01111000, 0b11111100, 0b11001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 9 - {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b01100000, 0b00000000}, // : - {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // ; - {0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b00100000, 0b00010000, 0b00001000}, // < - {0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b11111000, 0b00000000, 0b00000000}, // = - {0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00100000, 0b01000000, 0b10000000}, // > - {0b01110000, 0b10001000, 0b00001000, 0b00010000, 0b00100000, 0b00000000, 0b00100000}, // ? - {0b01110000, 0b10001000, 0b00001000, 0b01101000, 0b10101000, 0b10101000, 0b01110000}, // @ - {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000}, // A - {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10001000, 0b10001000, 0b11110000}, // B - {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // C - {0b11100000, 0b10010000, 0b10001000, 0b10001000, 0b10001000, 0b10010000, 0b11100000}, // D - {0b11111000, 0b10000000, 0b10000000, 0b11110000, 0b10000000, 0b10000000, 0b11111000}, // E - {0b11111000, 0b10000000, 0b10000000, 0b11100000, 0b10000000, 0b10000000, 0b10000000}, // F - {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10011000, 0b10001000, 0b01110000}, // G - {0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000, 0b10001000}, // H - {0b01110000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // I - {0b00111000, 0b00010000, 0b00010000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // J - {0b10001000, 0b10010000, 0b10100000, 0b11000000, 0b10100000, 0b10010000, 0b10001000}, // K - {0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b11111000}, // L - {0b10001000, 0b11011000, 0b10101000, 0b10001000, 0b10001000, 0b10001000, 0b10001000}, // M - {0b10001000, 0b10001000, 0b11001000, 0b10101000, 0b10011000, 0b10001000, 0b10001000}, // N - {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // O - {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10000000, 0b10000000, 0b10000000}, // P - {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10010000, 0b01101000}, // Q - {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10100000, 0b10010000, 0b10001000}, // R - {0b01111000, 0b10000000, 0b10000000, 0b01110000, 0b00001000, 0b00001000, 0b11110000}, // S - {0b11111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // T - {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // U - {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // V - {0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b11011000, 0b10001000}, // W - {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000, 0b10001000}, // X - {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // Y - {0b11111000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b11111000}, // Z - {0b00111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00111000}, // [ - {0b00000000, 0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000000}, // " - {0b11100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b11100000}, // ] - {0b00100000, 0b01010000, 0b10001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ^ - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11111000}, // _ - {0b01000000, 0b00100000, 0b00010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ` - {0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b01111000, 0b10001000, 0b01111000}, // a - {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b11110000}, // b - {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // c - {0b00001000, 0b00001000, 0b01101000, 0b10011000, 0b10001000, 0b10001000, 0b01111000}, // d - {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b11111000, 0b10000000, 0b01110000}, // e - {0b00110000, 0b01001000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01000000}, // f - {0b00000000, 0b00000000, 0b01111000, 0b10001000, 0b01111000, 0b00001000, 0b00110000}, // g - {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // h - {0b00100000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // i - {0b00010000, 0b00000000, 0b00110000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // j - {0b01000000, 0b01000000, 0b01001000, 0b01010000, 0b01100000, 0b01010000, 0b01001000}, // k - {0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // l - {0b00000000, 0b00000000, 0b11010000, 0b10101000, 0b10101000, 0b10001000, 0b10001000}, // m - {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // n - {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // o - {0b00000000, 0b00000000, 0b11110000, 0b10001000, 0b11110000, 0b10000000, 0b10000000}, // p - {0b00000000, 0b00000000, 0b01101000, 0b10011000, 0b01111000, 0b00001000, 0b00001000}, // q - {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10000000, 0b10000000, 0b10000000}, // r - {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b01110000, 0b00001000, 0b11110000}, // s - {0b01000000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01001000, 0b00110000}, // t - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b10011000, 0b01101000}, // u - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // v - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b01010000}, // w - {0b00000000, 0b00000000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000}, // x - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b01111000, 0b00001000, 0b01110000}, // y - {0b00000000, 0b00000000, 0b11111000, 0b00010000, 0b00100000, 0b01000000, 0b11111000}, // z - {0b00010000, 0b00100000, 0b00100000, 0b01000000, 0b00100000, 0b00100000, 0b00010000}, // { - {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // | - {0b01000000, 0b00100000, 0b00100000, 0b00010000, 0b00100000, 0b00100000, 0b01000000}, // } - {0b00000000, 0b00100000, 0b00010000, 0b11111000, 0b00010000, 0b00100000, 0b00000000}, // -> - {0b00000000, 0b00100000, 0b01000000, 0b11111000, 0b01000000, 0b00100000, 0b00000000}, // <- + { + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, + {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00000000, 0b00100000}, // ! + {0b01010000, 0b01010000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // " + {0b01010000, 0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01010000, 0b01010000}, // # + {0b00100000, 0b01111000, 0b10100000, 0b01110000, 0b00101000, 0b11110000, 0b00100000}, // $ + {0b11000000, 0b11001000, 0b00010000, 0b00100000, 0b01000000, 0b10011000, 0b00011000}, // % + {0b01100000, 0b10010000, 0b10100000, 0b01000000, 0b10101000, 0b10010000, 0b01101000}, // & + {0b01100000, 0b00100000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ' + {0b00010000, 0b00100000, 0b01000000, 0b01000000, 0b01000000, 0b00100000, 0b00010000}, // ( + {0b01000000, 0b00100000, 0b00010000, 0b00010000, 0b00010000, 0b00100000, 0b01000000}, // ) + {0b00000000, 0b01010000, 0b00100000, 0b11111000, 0b00100000, 0b01010000, 0b00000000}, // * + {0b00000000, 0b00100000, 0b00100000, 0b11111000, 0b00100000, 0b00100000, 0b00000000}, // + + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // , + {0b00000000, 0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b00000000, 0b00000000}, // - + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b01100000}, // . + {0b00000000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b00000000}, // / + {0b01111000, 0b11111100, 0b11001100, 0b11001100, 0b11001100, 0b11111100, 0b01111000}, // 0 + {0b00110000, 0b01110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 1 + {0b01111000, 0b11111100, 0b00001100, 0b00111000, 0b01100000, 0b11111100, 0b11111100}, // 2 + {0b01111000, 0b11111100, 0b00001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 3 + {0b11001100, 0b11001100, 0b11111100, 0b01111100, 0b00001100, 0b00001100, 0b00001100}, // 4 + {0b11111100, 0b11111100, 0b11000000, 0b11111000, 0b00001100, 0b11111100, 0b11111000}, // 5 + {0b01111000, 0b11111100, 0b11000000, 0b11111000, 0b11001100, 0b11111100, 0b01111000}, // 6 + {0b11111100, 0b11111100, 0b00011000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 7 + {0b01111000, 0b11111100, 0b11001100, 0b01111000, 0b11001100, 0b11111100, 0b01111000}, // 8 + {0b01111000, 0b11111100, 0b11001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 9 + {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b01100000, 0b00000000}, // : + {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // ; + {0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b00100000, 0b00010000, 0b00001000}, // < + {0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b11111000, 0b00000000, 0b00000000}, // = + {0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00100000, 0b01000000, 0b10000000}, // > + {0b01110000, 0b10001000, 0b00001000, 0b00010000, 0b00100000, 0b00000000, 0b00100000}, // ? + {0b01110000, 0b10001000, 0b00001000, 0b01101000, 0b10101000, 0b10101000, 0b01110000}, // @ + {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000}, // A + {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10001000, 0b10001000, 0b11110000}, // B + {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // C + {0b11100000, 0b10010000, 0b10001000, 0b10001000, 0b10001000, 0b10010000, 0b11100000}, // D + {0b11111000, 0b10000000, 0b10000000, 0b11110000, 0b10000000, 0b10000000, 0b11111000}, // E + {0b11111000, 0b10000000, 0b10000000, 0b11100000, 0b10000000, 0b10000000, 0b10000000}, // F + {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10011000, 0b10001000, 0b01110000}, // G + {0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000, 0b10001000}, // H + {0b01110000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // I + {0b00111000, 0b00010000, 0b00010000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // J + {0b10001000, 0b10010000, 0b10100000, 0b11000000, 0b10100000, 0b10010000, 0b10001000}, // K + {0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b11111000}, // L + {0b10001000, 0b11011000, 0b10101000, 0b10001000, 0b10001000, 0b10001000, 0b10001000}, // M + {0b10001000, 0b10001000, 0b11001000, 0b10101000, 0b10011000, 0b10001000, 0b10001000}, // N + {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // O + {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10000000, 0b10000000, 0b10000000}, // P + {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10010000, 0b01101000}, // Q + {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10100000, 0b10010000, 0b10001000}, // R + {0b01111000, 0b10000000, 0b10000000, 0b01110000, 0b00001000, 0b00001000, 0b11110000}, // S + {0b11111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // T + {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // U + {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // V + {0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b11011000, 0b10001000}, // W + {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000, 0b10001000}, // X + {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // Y + {0b11111000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b11111000}, // Z + {0b00111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00111000}, // [ + {0b00000000, 0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000000}, // " + {0b11100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b11100000}, // ] + {0b00100000, 0b01010000, 0b10001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ^ + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11111000}, // _ + {0b01000000, 0b00100000, 0b00010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ` + {0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b01111000, 0b10001000, 0b01111000}, // a + {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b11110000}, // b + {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // c + {0b00001000, 0b00001000, 0b01101000, 0b10011000, 0b10001000, 0b10001000, 0b01111000}, // d + {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b11111000, 0b10000000, 0b01110000}, // e + {0b00110000, 0b01001000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01000000}, // f + {0b00000000, 0b00000000, 0b01111000, 0b10001000, 0b01111000, 0b00001000, 0b00110000}, // g + {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // h + {0b00100000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // i + {0b00010000, 0b00000000, 0b00110000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // j + {0b01000000, 0b01000000, 0b01001000, 0b01010000, 0b01100000, 0b01010000, 0b01001000}, // k + {0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // l + {0b00000000, 0b00000000, 0b11010000, 0b10101000, 0b10101000, 0b10001000, 0b10001000}, // m + {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // n + {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // o + {0b00000000, 0b00000000, 0b11110000, 0b10001000, 0b11110000, 0b10000000, 0b10000000}, // p + {0b00000000, 0b00000000, 0b01101000, 0b10011000, 0b01111000, 0b00001000, 0b00001000}, // q + {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10000000, 0b10000000, 0b10000000}, // r + {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b01110000, 0b00001000, 0b11110000}, // s + {0b01000000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01001000, 0b00110000}, // t + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b10011000, 0b01101000}, // u + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // v + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b01010000}, // w + {0b00000000, 0b00000000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000}, // x + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b01111000, 0b00001000, 0b01110000}, // y + {0b00000000, 0b00000000, 0b11111000, 0b00010000, 0b00100000, 0b01000000, 0b11111000}, // z + {0b00010000, 0b00100000, 0b00100000, 0b01000000, 0b00100000, 0b00100000, 0b00010000}, // { + {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // | + {0b01000000, 0b00100000, 0b00100000, 0b00010000, 0b00100000, 0b00100000, 0b01000000}, // } + {0b00000000, 0b00100000, 0b00010000, 0b11111000, 0b00010000, 0b00100000, 0b00000000}, // -> + {0b00000000, 0b00100000, 0b01000000, 0b11111000, 0b01000000, 0b00100000, 0b00000000}, // <- }; \ No newline at end of file diff --git a/src/webgui.cpp b/src/webgui.cpp index 5a224f9..8fa6cde 100644 --- a/src/webgui.cpp +++ b/src/webgui.cpp @@ -408,5 +408,5 @@ void startGui(AsyncWebServerRequest *request) } - + #endif From 58e1cf5ddd8b694ad6f8ba931e6d9fa47600ec77 Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Sat, 13 Jan 2024 22:36:26 +0100 Subject: [PATCH 11/14] Fixes on fonts Fixed out of bounds crash on umlauts, introduced german umlauts, introduced handling of different fonts. --- include/screen.h | 2 +- include/signs.h | 11 +- platformio.ini | 6 +- src/messages.cpp | 3 +- src/plugins/TickingClockPlugin.cpp | 11 +- src/screen.cpp | 33 ++- src/signs.cpp | 316 +++++++++++++++++------------ 7 files changed, 231 insertions(+), 151 deletions(-) diff --git a/include/screen.h b/include/screen.h index 5ce882b..1396b04 100644 --- a/include/screen.h +++ b/include/screen.h @@ -71,7 +71,7 @@ class Screen_ void drawWeather(int x, int y, int weather, uint8_t brightness = 255); std::vector readBytes(std::vector bytes); - void scrollText(std::string text, int delayTime = 30, uint8_t brightness = 255); + void scrollText(std::string text, int delayTime = 30, uint8_t brightness = 255, uint8_t fontid = 0 ); void scrollGraph(std::vector graph = {}, int miny = 0, int maxy = 15, int delayTime = 60, uint8_t brightness = 255); }; diff --git a/include/signs.h b/include/signs.h index 7bde338..d8f7893 100644 --- a/include/signs.h +++ b/include/signs.h @@ -15,4 +15,13 @@ extern std::vector> bigNumbers; extern std::vector> lineAnimation; extern std::vector> weatherIcons; -extern std::vector> system6x7; \ No newline at end of file + +struct font { + std::string name; + int sizeX; + int sizeY; + int offset; + std::vector> data; +}; + +extern std::vector fonts; diff --git a/platformio.ini b/platformio.ini index 54d2c0b..f11b6c3 100644 --- a/platformio.ini +++ b/platformio.ini @@ -20,9 +20,11 @@ lib_deps = https://github.com/tzapu/WiFiManager.git#v2.0.16-rc.2 monitor_speed = 115200 monitor_filters = esp32_exception_decoder -; extra_scripts = upload.py +extra_scripts = upload.py ; upload_protocol = custom -; upload_url = http://192.168.178.141/update +upload_protocol = espota +upload_url = http://192.168.178.141/update +upload_port = 192.168.178.141 ;upload_port=COM4 [env:nodemcuv2] board = nodemcuv2 diff --git a/src/messages.cpp b/src/messages.cpp index 47a26de..98faf9a 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -117,10 +117,9 @@ void handleMessage(AsyncWebServerRequest *request) graph.push_back(std::stoi(token)); token = strtok(nullptr, ","); } - // Call the add function with the extracted parameters Messages.add(text, repeat, id, delay, graph, miny, maxy); - + // Send a response to the client request->send(200, "text/plain", "Message received"); } diff --git a/src/plugins/TickingClockPlugin.cpp b/src/plugins/TickingClockPlugin.cpp index 9ae67fb..a0cc2c1 100644 --- a/src/plugins/TickingClockPlugin.cpp +++ b/src/plugins/TickingClockPlugin.cpp @@ -25,17 +25,16 @@ void TickingClockPlugin::loop() std::vector mm = {(timeinfo.tm_min - timeinfo.tm_min % 10) / 10, timeinfo.tm_min % 10}; Screen.clear(); - - Screen.drawCharacter(2, 0, Screen.readBytes(system6x7[hh[0] + 48]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(9, 0, Screen.readBytes(system6x7[hh[1] + 48]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(2, 9, Screen.readBytes(system6x7[mm[0] + 48]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(9, 9, Screen.readBytes(system6x7[mm[1] + 48]), 8, Screen.getCurrentBrightness()); + + Screen.drawCharacter(2, 0, Screen.readBytes(fonts[1].data[hh[0] ]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(9, 0, Screen.readBytes(fonts[1].data[hh[1] ]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(2, 9, Screen.readBytes(fonts[1].data[mm[0] ]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(9, 9, Screen.readBytes(fonts[1].data[mm[1] ]), 8, Screen.getCurrentBrightness()); previousMinutes = timeinfo.tm_min; previousHour = timeinfo.tm_hour; } if (previousSecond != timeinfo.tm_sec) { - // clear second lane Screen.drawRectangle(0, 7, 16, 2, true, 0); // alternating second pixel diff --git a/src/screen.cpp b/src/screen.cpp index f9ea5e5..213d76e 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -299,24 +299,37 @@ void Screen_::drawWeather(int x, int y, int weather, uint8_t brightness) this->drawCharacter(x, y, this->readBytes(weatherIcons[weather]), 16, brightness); } -void Screen_::scrollText(std::string text, int delayTime, uint8_t brightness) +void Screen_::scrollText(std::string text, int delayTime, uint8_t brightness, uint8_t fontid) { - int textWidth = text.length() * 6; // Assuming 6 pixels width for each character + space + // lets determine the current font + font currentFont = (fontid < fonts.size()) ? fonts[fontid] : fonts[0]; + + int textWidth = text.length() * (currentFont.sizeX+1); // charsize + space for (int i = -ROWS; i < textWidth; i++) { // start with negarive screen size, so out of screen to the right + + int skippedChars = 0; this->clear(); - + for (std::size_t strPos = 0; strPos < text.length(); strPos++) { // since i need the pos to calculate, this is the best way to iterate here - - int xPos = strPos * 6 - i; - - if (xPos > -6 && xPos < ROWS) - { // so are we somewhere on screen with the char? - // yes tsystem6x7 charset starts wis space (char32) - Screen.drawCharacter(xPos, 4, Screen.readBytes(system6x7[text[strPos]]), 8); + if(text[strPos] == 195){ + // we skipp the unicode char idicating german umlauts. yes, this is not a real unicode implementation. however. + skippedChars++; + } + else + { + int xPos = (strPos-skippedChars) * (currentFont.sizeX+1) - i; + + if (xPos > -6 && xPos < ROWS) + { // so are we somewhere on screen with the char? + // ensure that we have a defined char, lets take the first + uint8_t currentChar = ( (text[strPos]= currentFont.offset)) ? text[strPos] : currentFont.offset; + // draw it + Screen.drawCharacter(xPos, 4, Screen.readBytes(currentFont.data[currentChar-currentFont.offset]), 8); + } } } diff --git a/src/signs.cpp b/src/signs.cpp index 7c90217..15467a4 100644 --- a/src/signs.cpp +++ b/src/signs.cpp @@ -50,134 +50,192 @@ std::vector> weatherIcons = { }; // system font based on https://github.com/MakeMagazinDE/Obegraensad by DR. ARMIN ZINK -std::vector> system6x7 = +// std::vector> system6x7 = +std::vector fonts = { - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, - {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00000000, 0b00100000}, // ! - {0b01010000, 0b01010000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // " - {0b01010000, 0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01010000, 0b01010000}, // # - {0b00100000, 0b01111000, 0b10100000, 0b01110000, 0b00101000, 0b11110000, 0b00100000}, // $ - {0b11000000, 0b11001000, 0b00010000, 0b00100000, 0b01000000, 0b10011000, 0b00011000}, // % - {0b01100000, 0b10010000, 0b10100000, 0b01000000, 0b10101000, 0b10010000, 0b01101000}, // & - {0b01100000, 0b00100000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ' - {0b00010000, 0b00100000, 0b01000000, 0b01000000, 0b01000000, 0b00100000, 0b00010000}, // ( - {0b01000000, 0b00100000, 0b00010000, 0b00010000, 0b00010000, 0b00100000, 0b01000000}, // ) - {0b00000000, 0b01010000, 0b00100000, 0b11111000, 0b00100000, 0b01010000, 0b00000000}, // * - {0b00000000, 0b00100000, 0b00100000, 0b11111000, 0b00100000, 0b00100000, 0b00000000}, // + - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // , - {0b00000000, 0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b00000000, 0b00000000}, // - - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b01100000}, // . - {0b00000000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b00000000}, // / - {0b01111000, 0b11111100, 0b11001100, 0b11001100, 0b11001100, 0b11111100, 0b01111000}, // 0 - {0b00110000, 0b01110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 1 - {0b01111000, 0b11111100, 0b00001100, 0b00111000, 0b01100000, 0b11111100, 0b11111100}, // 2 - {0b01111000, 0b11111100, 0b00001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 3 - {0b11001100, 0b11001100, 0b11111100, 0b01111100, 0b00001100, 0b00001100, 0b00001100}, // 4 - {0b11111100, 0b11111100, 0b11000000, 0b11111000, 0b00001100, 0b11111100, 0b11111000}, // 5 - {0b01111000, 0b11111100, 0b11000000, 0b11111000, 0b11001100, 0b11111100, 0b01111000}, // 6 - {0b11111100, 0b11111100, 0b00011000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 7 - {0b01111000, 0b11111100, 0b11001100, 0b01111000, 0b11001100, 0b11111100, 0b01111000}, // 8 - {0b01111000, 0b11111100, 0b11001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 9 - {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b01100000, 0b00000000}, // : - {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // ; - {0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b00100000, 0b00010000, 0b00001000}, // < - {0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b11111000, 0b00000000, 0b00000000}, // = - {0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00100000, 0b01000000, 0b10000000}, // > - {0b01110000, 0b10001000, 0b00001000, 0b00010000, 0b00100000, 0b00000000, 0b00100000}, // ? - {0b01110000, 0b10001000, 0b00001000, 0b01101000, 0b10101000, 0b10101000, 0b01110000}, // @ - {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000}, // A - {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10001000, 0b10001000, 0b11110000}, // B - {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // C - {0b11100000, 0b10010000, 0b10001000, 0b10001000, 0b10001000, 0b10010000, 0b11100000}, // D - {0b11111000, 0b10000000, 0b10000000, 0b11110000, 0b10000000, 0b10000000, 0b11111000}, // E - {0b11111000, 0b10000000, 0b10000000, 0b11100000, 0b10000000, 0b10000000, 0b10000000}, // F - {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10011000, 0b10001000, 0b01110000}, // G - {0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000, 0b10001000}, // H - {0b01110000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // I - {0b00111000, 0b00010000, 0b00010000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // J - {0b10001000, 0b10010000, 0b10100000, 0b11000000, 0b10100000, 0b10010000, 0b10001000}, // K - {0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b11111000}, // L - {0b10001000, 0b11011000, 0b10101000, 0b10001000, 0b10001000, 0b10001000, 0b10001000}, // M - {0b10001000, 0b10001000, 0b11001000, 0b10101000, 0b10011000, 0b10001000, 0b10001000}, // N - {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // O - {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10000000, 0b10000000, 0b10000000}, // P - {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10010000, 0b01101000}, // Q - {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10100000, 0b10010000, 0b10001000}, // R - {0b01111000, 0b10000000, 0b10000000, 0b01110000, 0b00001000, 0b00001000, 0b11110000}, // S - {0b11111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // T - {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // U - {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // V - {0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b11011000, 0b10001000}, // W - {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000, 0b10001000}, // X - {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // Y - {0b11111000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b11111000}, // Z - {0b00111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00111000}, // [ - {0b00000000, 0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000000}, // " - {0b11100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b11100000}, // ] - {0b00100000, 0b01010000, 0b10001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ^ - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11111000}, // _ - {0b01000000, 0b00100000, 0b00010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // ` - {0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b01111000, 0b10001000, 0b01111000}, // a - {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b11110000}, // b - {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // c - {0b00001000, 0b00001000, 0b01101000, 0b10011000, 0b10001000, 0b10001000, 0b01111000}, // d - {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b11111000, 0b10000000, 0b01110000}, // e - {0b00110000, 0b01001000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01000000}, // f - {0b00000000, 0b00000000, 0b01111000, 0b10001000, 0b01111000, 0b00001000, 0b00110000}, // g - {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // h - {0b00100000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // i - {0b00010000, 0b00000000, 0b00110000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // j - {0b01000000, 0b01000000, 0b01001000, 0b01010000, 0b01100000, 0b01010000, 0b01001000}, // k - {0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // l - {0b00000000, 0b00000000, 0b11010000, 0b10101000, 0b10101000, 0b10001000, 0b10001000}, // m - {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // n - {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // o - {0b00000000, 0b00000000, 0b11110000, 0b10001000, 0b11110000, 0b10000000, 0b10000000}, // p - {0b00000000, 0b00000000, 0b01101000, 0b10011000, 0b01111000, 0b00001000, 0b00001000}, // q - {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10000000, 0b10000000, 0b10000000}, // r - {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b01110000, 0b00001000, 0b11110000}, // s - {0b01000000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01001000, 0b00110000}, // t - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b10011000, 0b01101000}, // u - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // v - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b01010000}, // w - {0b00000000, 0b00000000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000}, // x - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b01111000, 0b00001000, 0b01110000}, // y - {0b00000000, 0b00000000, 0b11111000, 0b00010000, 0b00100000, 0b01000000, 0b11111000}, // z - {0b00010000, 0b00100000, 0b00100000, 0b01000000, 0b00100000, 0b00100000, 0b00010000}, // { - {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // | - {0b01000000, 0b00100000, 0b00100000, 0b00010000, 0b00100000, 0b00100000, 0b01000000}, // } - {0b00000000, 0b00100000, 0b00010000, 0b11111000, 0b00010000, 0b00100000, 0b00000000}, // -> - {0b00000000, 0b00100000, 0b01000000, 0b11111000, 0b01000000, 0b00100000, 0b00000000}, // <- + // index 0 - System font + {"system", // name + 5, // size x + 7, // size y + 32, // offset + { + // character data, skipped first "offest" lines + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 32 - BLANK + {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00000000, 0b00100000}, // 33 - ! + {0b01010000, 0b01010000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 34 - " + {0b01010000, 0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01010000, 0b01010000}, // 35 - # + {0b00100000, 0b01111000, 0b10100000, 0b01110000, 0b00101000, 0b11110000, 0b00100000}, // 36 - $ + {0b11000000, 0b11001000, 0b00010000, 0b00100000, 0b01000000, 0b10011000, 0b00011000}, // 37 - % + {0b01100000, 0b10010000, 0b10100000, 0b01000000, 0b10101000, 0b10010000, 0b01101000}, // 38 - & + {0b01100000, 0b00100000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 39 - ' + {0b00010000, 0b00100000, 0b01000000, 0b01000000, 0b01000000, 0b00100000, 0b00010000}, // 40 - ( + {0b01000000, 0b00100000, 0b00010000, 0b00010000, 0b00010000, 0b00100000, 0b01000000}, // 41 - ) + {0b00000000, 0b01010000, 0b00100000, 0b11111000, 0b00100000, 0b01010000, 0b00000000}, // 42 - * + {0b00000000, 0b00100000, 0b00100000, 0b11111000, 0b00100000, 0b00100000, 0b00000000}, // 43 - + + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // 44 - , + {0b00000000, 0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b00000000, 0b00000000}, // 45 - - + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b01100000}, // 46 - . + {0b00000000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b00000000}, // 47 - / + {0b00110000, 0b01111000, 0b01001000, 0b01001000, 0b01001000, 0b01111000, 0b00110000}, // 48 - 0 + {0b00110000, 0b01110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 49 - 1 + {0b00110000, 0b01111000, 0b00001000, 0b00100000, 0b01000000, 0b01111000, 0b01111000}, // 50 - 2 + {0b00110000, 0b01111000, 0b00001000, 0b00111000, 0b00001000, 0b01111000, 0b00110000}, // 51 - 3 + {0b01001000, 0b01001000, 0b01111000, 0b00111000, 0b00001000, 0b00001000, 0b00001000}, // 52 - 4 + {0b01111000, 0b01111000, 0b01000000, 0b01110000, 0b00001000, 0b01111000, 0b01110000}, // 53 - 5 + {0b00110000, 0b01111000, 0b01000000, 0b01110000, 0b01001000, 0b01111000, 0b00110000}, // 54 - 6 + {0b01111000, 0b01111000, 0b00010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // 55 - 7 + {0b00110000, 0b01111000, 0b01001000, 0b00110000, 0b01001000, 0b01111000, 0b00110000}, // 56 - 8 + {0b00110000, 0b01111000, 0b01001000, 0b00111000, 0b00001000, 0b01111000, 0b00110000}, // 57 - 9 + {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b01100000, 0b00000000}, // 58 - : + {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // 59 - ; + {0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b00100000, 0b00010000, 0b00001000}, // 60 - < + {0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b11111000, 0b00000000, 0b00000000}, // 61 - = + {0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00100000, 0b01000000, 0b10000000}, // 62 - > + {0b01110000, 0b10001000, 0b00001000, 0b00010000, 0b00100000, 0b00000000, 0b00100000}, // 63 - ? + {0b01110000, 0b10001000, 0b00001000, 0b01101000, 0b10101000, 0b10101000, 0b01110000}, // 64 - @ + {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000}, // 65 - A + {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10001000, 0b10001000, 0b11110000}, // 66 - B + {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // 67 - C + {0b11100000, 0b10010000, 0b10001000, 0b10001000, 0b10001000, 0b10010000, 0b11100000}, // 68 - D + {0b11111000, 0b10000000, 0b10000000, 0b11110000, 0b10000000, 0b10000000, 0b11111000}, // 69 - E + {0b11111000, 0b10000000, 0b10000000, 0b11100000, 0b10000000, 0b10000000, 0b10000000}, // 70 - F + {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10011000, 0b10001000, 0b01110000}, // 71 - G + {0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000, 0b10001000}, // 72 - H + {0b01110000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // 73 - I + {0b00111000, 0b00010000, 0b00010000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // 74 - J + {0b10001000, 0b10010000, 0b10100000, 0b11000000, 0b10100000, 0b10010000, 0b10001000}, // 75 - K + {0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b11111000}, // 76 - L + {0b10001000, 0b11011000, 0b10101000, 0b10001000, 0b10001000, 0b10001000, 0b10001000}, // 77 - M + {0b10001000, 0b10001000, 0b11001000, 0b10101000, 0b10011000, 0b10001000, 0b10001000}, // 78 - N + {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 79 - O + {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10000000, 0b10000000, 0b10000000}, // 80 - P + {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10010000, 0b01101000}, // 81 - Q + {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10100000, 0b10010000, 0b10001000}, // 82 - R + {0b01111000, 0b10000000, 0b10000000, 0b01110000, 0b00001000, 0b00001000, 0b11110000}, // 83 - S + {0b11111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // 84 - T + {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 85 - U + {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // 86 - V + {0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b11011000, 0b10001000}, // 87 - W + {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000, 0b10001000}, // 88 - X + {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // 89 - Y + {0b11111000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b11111000}, // 90 - Z + {0b00111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00111000}, // 91 - [ + {0b00000000, 0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000000}, // 92 - " + {0b11100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b11100000}, // 93 - ] + {0b00100000, 0b01010000, 0b10001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 94 - ^ + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11111000}, // 95 - _ + {0b01000000, 0b00100000, 0b00010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 96 - ` + {0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b01111000, 0b10001000, 0b01111000}, // 97 - a + {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b11110000}, // 98 - b + {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // 99 - c + {0b00001000, 0b00001000, 0b01101000, 0b10011000, 0b10001000, 0b10001000, 0b01111000}, // 100 - d + {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b11111000, 0b10000000, 0b01110000}, // 101 - e + {0b00110000, 0b01001000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01000000}, // 102 - f + {0b00000000, 0b00000000, 0b01111000, 0b10001000, 0b01111000, 0b00001000, 0b00110000}, // 103 - g + {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // 104 - h + {0b00100000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // 105 - i + {0b00010000, 0b00000000, 0b00110000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // 106 - j + {0b01000000, 0b01000000, 0b01001000, 0b01010000, 0b01100000, 0b01010000, 0b01001000}, // 107 - k + {0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // 108 - l + {0b00000000, 0b00000000, 0b11010000, 0b10101000, 0b10101000, 0b10001000, 0b10001000}, // 109 - m + {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // 110 - n + {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 111 - o + {0b00000000, 0b00000000, 0b11110000, 0b10001000, 0b11110000, 0b10000000, 0b10000000}, // 112 - p + {0b00000000, 0b00000000, 0b01101000, 0b10011000, 0b01111000, 0b00001000, 0b00001000}, // 113 - q + {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10000000, 0b10000000, 0b10000000}, // 114 - r + {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b01110000, 0b00001000, 0b11110000}, // 115 - s + {0b01000000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01001000, 0b00110000}, // 116 - t + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b10011000, 0b01101000}, // 117 - u + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // 118 - v + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b01010000}, // 119 - w + {0b00000000, 0b00000000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000}, // 120 - x + {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b01111000, 0b00001000, 0b01110000}, // 121 - y + {0b00000000, 0b00000000, 0b11111000, 0b00010000, 0b00100000, 0b01000000, 0b11111000}, // 122 - z + {0b00010000, 0b00100000, 0b00100000, 0b01000000, 0b00100000, 0b00100000, 0b00010000}, // 123 - { + {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // 124 - | + {0b01000000, 0b00100000, 0b00100000, 0b00010000, 0b00100000, 0b00100000, 0b01000000}, // 125 - } + {0b00000000, 0b00100000, 0b00010000, 0b11111000, 0b00010000, 0b00100000, 0b00000000}, // 126 - -> + {0b00000000, 0b00100000, 0b01000000, 0b11111000, 0b01000000, 0b00100000, 0b00000000}, // 127 - <- + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 128 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 129 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 130 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 131 + {0b10001000, 0b11111000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000}, // 132 - Ä + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 133 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 134 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 135 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 136 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 137 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 138 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 139 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 140 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 141 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 142 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 143 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 144 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 145 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 146 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 147 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 148 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 149 + {0b10001000, 0b00000000, 0b11111000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 150 - Ö + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 151 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 152 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 153 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 154 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 155 + {0b10001000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 156 - Ü + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 157 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 158 + {0b01110000, 0b10001000, 0b10001000, 0b11110000, 0b10001000, 0b10001000, 0b10110000}, // 159 - ß + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 160 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 161 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 162 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 163 + {0b00000000, 0b10001000, 0b01110000, 0b00001000, 0b01111000, 0b10001000, 0b01111000}, // 164 - ä + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 165 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 166 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 167 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 168 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 169 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 170 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 171 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 172 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 173 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 174 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 175 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 176 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 177 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 178 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 179 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 180 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 181 + {0b00000000, 0b10001000, 0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 182 - ö + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 183 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 184 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 185 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 186 + {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 187 + {0b00000000, 0b10001000, 0b00000000, 0b10001000, 0b10001000, 0b10011000, 0b01101000}, // 188 - ü + }}, + + // index 1 - bold digits + {"boltnumber", // name + 6, // size x + 7, // size y + 48, // offset + { + // character data, skipped first "offest" lines + {0b01111000, 0b11111100, 0b11001100, 0b11001100, 0b11001100, 0b11111100, 0b01111000}, // 48 - 0 + {0b00110000, 0b01110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 49 - 1 + {0b01111000, 0b11111100, 0b00001100, 0b00111000, 0b01100000, 0b11111100, 0b11111100}, // 50 - 2 + {0b01111000, 0b11111100, 0b00001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 51 - 3 + {0b11001100, 0b11001100, 0b11111100, 0b01111100, 0b00001100, 0b00001100, 0b00001100}, // 52 - 4 + {0b11111100, 0b11111100, 0b11000000, 0b11111000, 0b00001100, 0b11111100, 0b11111000}, // 53 - 5 + {0b01111000, 0b11111100, 0b11000000, 0b11111000, 0b11001100, 0b11111100, 0b01111000}, // 54 - 6 + {0b11111100, 0b11111100, 0b00011000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 55 - 7 + {0b01111000, 0b11111100, 0b11001100, 0b01111000, 0b11001100, 0b11111100, 0b01111000}, // 56 - 8 + {0b01111000, 0b11111100, 0b11001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 57 - 9 + }}, + }; \ No newline at end of file From 3f6d8980bbfebe8b1c2c351481980ab30a8e4218 Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Sun, 14 Jan 2024 09:44:15 +0100 Subject: [PATCH 12/14] Fix on lowercase umlauts last minute feature of memory improvements had a bug causing lowercase umlauts not to be shown --- src/messages.cpp | 4 ++++ src/screen.cpp | 4 ++-- src/signs.cpp | 5 ++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/messages.cpp b/src/messages.cpp index 98faf9a..90aa6b4 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -117,6 +117,10 @@ void handleMessage(AsyncWebServerRequest *request) graph.push_back(std::stoi(token)); token = strtok(nullptr, ","); } + + //Uncomment this to thee what charcode comes in + // for(int i = 0;i -6 && xPos < ROWS) { // so are we somewhere on screen with the char? // ensure that we have a defined char, lets take the first - uint8_t currentChar = ( (text[strPos]= currentFont.offset)) ? text[strPos] : currentFont.offset; + uint8_t currentChar = ( ((text[strPos]-currentFont.offset)= currentFont.offset)) ? text[strPos] : currentFont.offset; // draw it - Screen.drawCharacter(xPos, 4, Screen.readBytes(currentFont.data[currentChar-currentFont.offset]), 8); + Screen.drawCharacter(xPos, 4, Screen.readBytes(currentFont.data[currentChar-currentFont.offset]), 8); } } } diff --git a/src/signs.cpp b/src/signs.cpp index 15467a4..fd80b71 100644 --- a/src/signs.cpp +++ b/src/signs.cpp @@ -50,7 +50,6 @@ std::vector> weatherIcons = { }; // system font based on https://github.com/MakeMagazinDE/Obegraensad by DR. ARMIN ZINK -// std::vector> system6x7 = std::vector fonts = { // index 0 - System font @@ -160,7 +159,7 @@ std::vector fonts = {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 129 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 130 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 131 - {0b10001000, 0b11111000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000}, // 132 - Ä + {0b10001000, 0b01110000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000}, // 132 - Ä {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 133 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 134 {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 135 @@ -220,7 +219,7 @@ std::vector fonts = }}, // index 1 - bold digits - {"boltnumber", // name + {"boldnumber", // name 6, // size x 7, // size y 48, // offset From e750b36797f581ae636e5eb5e5e3648864e6649f Mon Sep 17 00:00:00 2001 From: kohlsalem Date: Sun, 14 Jan 2024 10:03:52 +0100 Subject: [PATCH 13/14] Indicator for pending messages --- README.md | 2 +- include/messages.h | 3 +++ src/messages.cpp | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 10cefec..80cd146 100644 --- a/README.md +++ b/README.md @@ -220,7 +220,7 @@ http://your-server/message - `graph` (optional): A comma-separated list of integers representing a graph. The values should be in the range of 0 to 15 and will be visualized as a graph on the LED display. - `miny` (optional): scaling for lower end of the graph, defaults to 0 - `maxy` (optional): scaling for upper end of the graph, defaults to 15 -- `repeat` (optional): The number of times the message should be repeated. If not provided, the default is 1. Set this value to -1 to repeat infinitely. +- `repeat` (optional): The number of times the message should be repeated. If not provided, the default is 1. Set this value to -1 to repeat infinitely. While messages ar pending for display an indicator led in the upper left corner will flash. - `id` (optional): A unique identifier for the message. This can be used for later removal or modification of the message. - `delay` (optional): The number of ms of delay between every scroll move. Default is 50 ms. diff --git a/include/messages.h b/include/messages.h index 12fdc22..0d54dfa 100644 --- a/include/messages.h +++ b/include/messages.h @@ -22,6 +22,9 @@ class Messages_ Messages_() = default; std::vector messages; int previousMinute; + int previousSecond; + int indicatorPixel; + public: static Messages_ &getInstance(); diff --git a/src/messages.cpp b/src/messages.cpp index 90aa6b4..b47d8ca 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -81,6 +81,22 @@ void Messages_::scrollMessageEveryMinute() // Update the previous minute to the current minute previousMinute = timeinfo.tm_min; } + + if (timeinfo.tm_sec != previousSecond){ + if(messages.size()>0){ + indicatorPixel = previousSecond&0b00000001; //every other second, bit of a geek style + Screen.setPixel(0,0,indicatorPixel); + } else + { // if the indicator pixel was set, but no message exisits, reset it + if(indicatorPixel>0){ + indicatorPixel = 0; + Screen.setPixel(0,0,indicatorPixel); + } + } + + previousSecond = timeinfo.tm_sec; + } + } } From a29a5576eb2755f41972ac211d09da6563652460 Mon Sep 17 00:00:00 2001 From: ph1p Date: Mon, 15 Jan 2024 11:54:32 +0100 Subject: [PATCH 14/14] refactor: format code and change binary to hex --- frontend/package-lock.json | 3610 ++++++++++++++++++++-------- frontend/package.json | 13 +- platformio.ini | 8 +- src/messages.cpp | 29 +- src/plugins/TickingClockPlugin.cpp | 10 +- src/screen.cpp | 27 +- src/signs.cpp | 344 +-- src/webgui.cpp | 791 +++--- 8 files changed, 3281 insertions(+), 1551 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f9cd1e3..e062b5d 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -13,17 +13,17 @@ "@solid-primitives/intersection-observer": "^2.1.3", "@solid-primitives/timer": "^1.3.7", "@solid-primitives/websocket": "^1.2.0", - "solid-js": "^1.8.5" + "solid-js": "^1.8.11" }, "devDependencies": { "@gfx/zopfli": "^1.0.15", "@types/offscreencanvas": "^2019.7.3", "@vanilla-extract/css": "^1.14.0", - "@vanilla-extract/vite-plugin": "^3.9.0", - "typescript": "^5.2.2", - "vite": "^4.5.0", - "vite-plugin-singlefile": "^0.13.5", - "vite-plugin-solid": "^2.7.2" + "@vanilla-extract/vite-plugin": "^3.9.3", + "typescript": "^5.3.3", + "vite": "^5.0.11", + "vite-plugin-singlefile": "^1.0.0", + "vite-plugin-solid": "^2.8.0" } }, "node_modules/@ampproject/remapping": { @@ -664,6 +664,22 @@ "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==", "dev": true }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", + "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.17.6", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.6.tgz", @@ -1075,6 +1091,175 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", + "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", + "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", + "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", + "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", + "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", + "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", + "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", + "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", + "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", + "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", + "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", + "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", + "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@solid-primitives/event-listener": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@solid-primitives/event-listener/-/event-listener-2.3.0.tgz", @@ -1162,6 +1347,21 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.1.tgz", + "integrity": "sha512-DsXojJUES2M+FE8CpptJTKpg+r54moV9ZEncPstni1WHFmTcCzeFLnMFfyhCVS8XNOy/OQG+8lVxRLRrVHmV5A==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/offscreencanvas": { "version": "2019.7.3", "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", @@ -1169,9 +1369,9 @@ "dev": true }, "node_modules/@vanilla-extract/babel-plugin-debug-ids": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.2.tgz", - "integrity": "sha512-LjnbQWGeMwaydmovx8jWUR8BxLtLiPyq0xz5C8G5OvFhsuJxvavLdrBHNNizvr1dq7/3qZGlPv0znsvU4P44YA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.3.tgz", + "integrity": "sha512-vm4jYu1xhSa6ofQ9AhIpR3DkAp4c+eoR1Rpm8/TQI4DmWbmGbOjYRcqV0aWsfaIlNhN4kFuxFMKBNN9oG6iRzA==", "dev": true, "dependencies": { "@babel/core": "^7.20.7" @@ -1197,17 +1397,17 @@ } }, "node_modules/@vanilla-extract/integration": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.2.1.tgz", - "integrity": "sha512-+xYJz07G7TFAMZGrOqArOsURG+xcYvqctujEkANjw2McCBvGEK505RxQqOuNiA9Mi9hgGdNp2JedSa94f3eoLg==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.2.4.tgz", + "integrity": "sha512-+AfymNMVq9sEUe0OJpdCokmPZg4Zi6CqKaW/PnUOfDwEn53ighHOMOBl5hAgxYR8Kiz9NG43Bn00mkjWlFi+ng==", "dev": true, "dependencies": { "@babel/core": "^7.20.7", "@babel/plugin-syntax-typescript": "^7.20.0", "@vanilla-extract/babel-plugin-debug-ids": "^1.0.2", - "@vanilla-extract/css": "^1.10.0", + "@vanilla-extract/css": "^1.14.0", "esbuild": "0.17.6", - "eval": "0.1.6", + "eval": "0.1.8", "find-up": "^5.0.0", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", @@ -1217,958 +1417,1944 @@ "vite-node": "^0.28.5" } }, - "node_modules/@vanilla-extract/private": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz", - "integrity": "sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==", - "dev": true - }, - "node_modules/@vanilla-extract/vite-plugin": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.9.0.tgz", - "integrity": "sha512-Q2HYAyEJ93Uy7GHQPPiP8SXwPMHGpd4d0YnrIQqB0YZccYbGJR/WFIln9Dmbzx2pdngQUoOfhwEg6kJF8sQrog==", + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@vanilla-extract/integration": "^6.0.2", - "outdent": "^0.8.0", - "postcss": "^8.3.6", - "postcss-load-config": "^3.1.0" - }, - "peerDependencies": { - "vite": "^2.2.3 || ^3.0.0 || ^4.0.3" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "bin": { - "acorn": "bin/acorn" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.4.0" + "node": ">=12" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=12" } }, - "node_modules/babel-plugin-jsx-dom-expressions": { - "version": "0.37.8", - "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.37.8.tgz", - "integrity": "sha512-nVHH6g7541aaAQJAsyWHvjH7GCXZ+8tuF3Qu4y9W9aKwonRbcJL+yyMatDJLvjC54iIuGowiiZM6Rm3AVJczGg==", + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/helper-module-imports": "7.18.6", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7", - "html-entities": "2.3.3", - "validate-html-nesting": "^1.2.1" - }, - "peerDependencies": { - "@babel/core": "^7.20.12" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/babel-plugin-jsx-dom-expressions/node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/babel-preset-solid": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.8.4.tgz", - "integrity": "sha512-TfI09EOFHsbhVqoM+svop3zY4zOUIBlZsGU16Rgd4NsYVXw6lv2VEn7dmlpczMMQy0IeO3PFiXlMQZWutB+uAQ==", + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/vite": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", + "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@vanilla-extract/private": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz", + "integrity": "sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==", + "dev": true + }, + "node_modules/@vanilla-extract/vite-plugin": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.9.3.tgz", + "integrity": "sha512-bGyHG98OYTRs5roLRv7LDeyRnD72+vBLonk8cC9VG/xd6hsiHPPj5GyBwoKElT7DyDRfapxWLwLlhgYynrW2Fw==", + "dev": true, + "dependencies": { + "@vanilla-extract/integration": "^6.2.4", + "outdent": "^0.8.0", + "postcss": "^8.3.6", + "postcss-load-config": "^4.0.1" + }, + "peerDependencies": { + "vite": "^2.2.3 || ^3.0.0 || ^4.0.3 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-plugin-jsx-dom-expressions": { + "version": "0.37.8", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.37.8.tgz", + "integrity": "sha512-nVHH6g7541aaAQJAsyWHvjH7GCXZ+8tuF3Qu4y9W9aKwonRbcJL+yyMatDJLvjC54iIuGowiiZM6Rm3AVJczGg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.20.7", + "html-entities": "2.3.3", + "validate-html-nesting": "^1.2.1" + }, + "peerDependencies": { + "@babel/core": "^7.20.12" + } + }, + "node_modules/babel-plugin-jsx-dom-expressions/node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/babel-preset-solid": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.8.4.tgz", + "integrity": "sha512-TfI09EOFHsbhVqoM+svop3zY4zOUIBlZsGU16Rgd4NsYVXw6lv2VEn7dmlpczMMQy0IeO3PFiXlMQZWutB+uAQ==", + "dev": true, + "dependencies": { "babel-plugin-jsx-dom-expressions": "^0.37.8" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001561", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", + "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-object-diff": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.581", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz", + "integrity": "sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.6.tgz", + "integrity": "sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.6", + "@esbuild/android-arm64": "0.17.6", + "@esbuild/android-x64": "0.17.6", + "@esbuild/darwin-arm64": "0.17.6", + "@esbuild/darwin-x64": "0.17.6", + "@esbuild/freebsd-arm64": "0.17.6", + "@esbuild/freebsd-x64": "0.17.6", + "@esbuild/linux-arm": "0.17.6", + "@esbuild/linux-arm64": "0.17.6", + "@esbuild/linux-ia32": "0.17.6", + "@esbuild/linux-loong64": "0.17.6", + "@esbuild/linux-mips64el": "0.17.6", + "@esbuild/linux-ppc64": "0.17.6", + "@esbuild/linux-riscv64": "0.17.6", + "@esbuild/linux-s390x": "0.17.6", + "@esbuild/linux-x64": "0.17.6", + "@esbuild/netbsd-x64": "0.17.6", + "@esbuild/openbsd-x64": "0.17.6", + "@esbuild/sunos-x64": "0.17.6", + "@esbuild/win32-arm64": "0.17.6", + "@esbuild/win32-ia32": "0.17.6", + "@esbuild/win32-x64": "0.17.6" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "engines": { + "node": ">=12.13" }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, "bin": { - "browserslist": "cli.js" + "jsesc": "bin/jsesc" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=4" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", "dev": true, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001561", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", - "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/media-query-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz", + "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5" + } + }, + "node_modules/merge-anything": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.1.7.tgz", + "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", + "dev": true, + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mlly": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "node_modules/modern-ahocorasick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/modern-ahocorasick/-/modern-ahocorasick-1.0.0.tgz", + "integrity": "sha512-vg0ZzTD3tmcIPUMpuJKfcCpoxzsQu9ka/jAAGQLdrq2yLu/jUUMq/IWw9578q8QE0bNrQHonaFHmvqrhTGpk4g==", + "dev": true, + "hasInstallScript": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, { "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/outdent": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", + "dev": true + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { - "node": ">= 6" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14" } }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "ms": "2.1.2" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, "engines": { - "node": ">=6.0" + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { - "supports-color": { + "postcss": { + "optional": true + }, + "ts-node": { "optional": true } } }, - "node_modules/deep-object-diff": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", - "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==", + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.581", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz", - "integrity": "sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.6.tgz", - "integrity": "sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==", + "node_modules/rollup": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", + "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", "dev": true, - "hasInstallScript": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { - "esbuild": "bin/esbuild" + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=12" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.6", - "@esbuild/android-arm64": "0.17.6", - "@esbuild/android-x64": "0.17.6", - "@esbuild/darwin-arm64": "0.17.6", - "@esbuild/darwin-x64": "0.17.6", - "@esbuild/freebsd-arm64": "0.17.6", - "@esbuild/freebsd-x64": "0.17.6", - "@esbuild/linux-arm": "0.17.6", - "@esbuild/linux-arm64": "0.17.6", - "@esbuild/linux-ia32": "0.17.6", - "@esbuild/linux-loong64": "0.17.6", - "@esbuild/linux-mips64el": "0.17.6", - "@esbuild/linux-ppc64": "0.17.6", - "@esbuild/linux-riscv64": "0.17.6", - "@esbuild/linux-s390x": "0.17.6", - "@esbuild/linux-x64": "0.17.6", - "@esbuild/netbsd-x64": "0.17.6", - "@esbuild/openbsd-x64": "0.17.6", - "@esbuild/sunos-x64": "0.17.6", - "@esbuild/win32-arm64": "0.17.6", - "@esbuild/win32-ia32": "0.17.6", - "@esbuild/win32-x64": "0.17.6" + "@rollup/rollup-android-arm-eabi": "4.9.5", + "@rollup/rollup-android-arm64": "4.9.5", + "@rollup/rollup-darwin-arm64": "4.9.5", + "@rollup/rollup-darwin-x64": "4.9.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", + "@rollup/rollup-linux-arm64-gnu": "4.9.5", + "@rollup/rollup-linux-arm64-musl": "4.9.5", + "@rollup/rollup-linux-riscv64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-musl": "4.9.5", + "@rollup/rollup-win32-arm64-msvc": "4.9.5", + "@rollup/rollup-win32-ia32-msvc": "4.9.5", + "@rollup/rollup-win32-x64-msvc": "4.9.5", + "fsevents": "~2.3.2" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "engines": { - "node": ">=6" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, + "node_modules/seroval": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.0.4.tgz", + "integrity": "sha512-qQs/N+KfJu83rmszFQaTxcoJoPn6KNUruX4KmnmyD0oZkUoiNvJ1rpdYKDf4YHM05k+HOgCxa3yvf15QbVijGg==", "engines": { - "node": ">=0.8.0" + "node": ">=10" } }, - "node_modules/eval": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", - "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", - "dev": true, - "dependencies": { - "require-like": ">= 0.1.1" - }, + "node_modules/seroval-plugins": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.0.4.tgz", + "integrity": "sha512-DQ2IK6oQVvy8k+c2V5x5YCtUa/GGGsUwUBNN9UqohrZ0rWdUapBFpNMYP1bCyRHoxOJjdKGl+dieacFIpU/i1A==", "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "peerDependencies": { + "seroval": "^1.0" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, + "node_modules/solid-js": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.8.11.tgz", + "integrity": "sha512-WdwmER+TwBJiN4rVQTVBxocg+9pKlOs41KzPYntrC86xO5sek8TzBYozPEZPL1IRWDouf2lMrvSbIs3CanlPvQ==", "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "csstype": "^3.1.0", + "seroval": "^1.0.3", + "seroval-plugins": "^1.0.3" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/solid-refresh": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.5.3.tgz", + "integrity": "sha512-Otg5it5sjOdZbQZJnvo99TEBAr6J7PQ5AubZLNU6szZzg3RQQ5MX04oteBIIGDs0y2Qv8aXKm9e44V8z+UnFdw==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" + "@babel/generator": "^7.21.1", + "@babel/helper-module-imports": "^7.18.6", + "@babel/types": "^7.21.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "solid-js": "^1.3" } }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=0.10.0" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-what": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "node": ">=4" } }, - "node_modules/javascript-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", - "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "is-number": "^7.0.0" }, "engines": { - "node": ">=4" + "node": ">=8.0" } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, "bin": { - "json5": "lib/cli.js" + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=6" + "node": ">=14.17" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", "dev": true }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true, - "engines": { - "node": ">=10" - } + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "p-locate": "^5.0.0" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "engines": { - "node": ">=10" + "bin": { + "update-browserslist-db": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "node_modules/validate-html-nesting": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/validate-html-nesting/-/validate-html-nesting-1.2.2.tgz", + "integrity": "sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==", "dev": true }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/media-query-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz", - "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==", + "node_modules/vite": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", + "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.12.5" + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/merge-anything": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.1.7.tgz", - "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", + "node_modules/vite-node": { + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.28.5.tgz", + "integrity": "sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==", "dev": true, "dependencies": { - "is-what": "^4.1.8" + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.1.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "source-map": "^0.6.1", + "source-map-support": "^0.5.21", + "vite": "^3.0.0 || ^4.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=12.13" + "node": ">=v14.16.0" }, "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/vite-node/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8.6" + "node": ">=12" } }, - "node_modules/mlly": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.0.tgz", - "integrity": "sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==", + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "acorn": "^8.8.2", - "pathe": "^1.1.0", - "pkg-types": "^1.0.2", - "ufo": "^1.1.1" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/modern-ahocorasick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/modern-ahocorasick/-/modern-ahocorasick-1.0.0.tgz", - "integrity": "sha512-vg0ZzTD3tmcIPUMpuJKfcCpoxzsQu9ka/jAAGQLdrq2yLu/jUUMq/IWw9578q8QE0bNrQHonaFHmvqrhTGpk4g==", + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], "dev": true, - "hasInstallScript": true - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "optional": true, + "os": [ + "darwin" ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=12" } }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/outdent": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", - "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", - "dev": true - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/pathe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz", - "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=12" } }, - "node_modules/pkg-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.2.tgz", - "integrity": "sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==", + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.1.1", - "pathe": "^1.1.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "optional": true, + "os": [ + "linux" ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=12" } }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": ">=12" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=12" } }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/seroval": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/seroval/-/seroval-0.12.3.tgz", - "integrity": "sha512-5WDeMpv7rmEylsypRj1iwRVHE/QLsMLiZ+9savlNNQEVdgGia1iRMb7qyaAagY0wu/7+QTe6d2wldk/lgaLb6g==", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/solid-js": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.8.5.tgz", - "integrity": "sha512-xvtJvzJzWbsn35oKFhW9kNwaxG1Z/YLMsDp4tLVcYZTMPzvzQ8vEZuyDQ6nt7xDArVgZJ7TUFrJUwrui/oq53A==", - "dependencies": { - "csstype": "^3.1.0", - "seroval": "^0.12.0" + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/solid-refresh": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.5.3.tgz", - "integrity": "sha512-Otg5it5sjOdZbQZJnvo99TEBAr6J7PQ5AubZLNU6szZzg3RQQ5MX04oteBIIGDs0y2Qv8aXKm9e44V8z+UnFdw==", + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/generator": "^7.21.1", - "@babel/helper-module-imports": "^7.18.6", - "@babel/types": "^7.21.2" - }, - "peerDependencies": { - "solid-js": "^1.3" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8.0" + "node": ">=12" } }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, + "hasInstallScript": true, "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=14.17" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, - "node_modules/ufo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.1.tgz", - "integrity": "sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, + "node_modules/vite-node/node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, "bin": { - "update-browserslist-db": "cli.js" + "rollup": "dist/bin/rollup" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/validate-html-nesting": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/validate-html-nesting/-/validate-html-nesting-1.2.2.tgz", - "integrity": "sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==", - "dev": true - }, - "node_modules/vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "node_modules/vite-node/node_modules/vite": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", + "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -2220,70 +3406,45 @@ } } }, - "node_modules/vite-node": { - "version": "0.28.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.28.5.tgz", - "integrity": "sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==", - "dev": true, - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.1.0", - "pathe": "^1.1.0", - "picocolors": "^1.0.0", - "source-map": "^0.6.1", - "source-map-support": "^0.5.21", - "vite": "^3.0.0 || ^4.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": ">=v14.16.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/vite-plugin-singlefile": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.5.tgz", - "integrity": "sha512-y/aRGh8qHmw2f1IhaI/C6PJAaov47ESYDvUv1am1YHMhpY+19B5k5Odp8P+tgs+zhfvak6QB1ykrALQErEAo7g==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-1.0.0.tgz", + "integrity": "sha512-iVAxl0t7gndQrznI4kI14hqAGxhVL7FQndeTdvTIH5/CbwpR2asgD3XSTsd7iWC83YTCmwAmsHIQvKdIdnHu7w==", "dev": true, "dependencies": { "micromatch": "^4.0.5" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">18.0.0" }, "peerDependencies": { - "rollup": ">=2.79.0", - "vite": ">=3.2.0" + "rollup": "^4.9.5", + "vite": "^5.0.11" } }, "node_modules/vite-plugin-solid": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.7.2.tgz", - "integrity": "sha512-GV2SMLAibOoXe76i02AsjAg7sbm/0lngBlERvJKVN67HOrJsHcWgkt0R6sfGLDJuFkv2aBe14Zm4vJcNME+7zw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.8.0.tgz", + "integrity": "sha512-n5FAm7ZmTl94VWUoiJCgG7bouF2NlC9CA1wY/qbVnkFbYDWk++bFWyNoU48aLJ+lMtzNeYzJypJXOHzFKxL9xA==", "dev": true, "dependencies": { - "@babel/core": "^7.23.0", - "@babel/preset-typescript": "^7.23.0", - "@types/babel__core": "^7.20.2", - "babel-preset-solid": "^1.8.0", + "@babel/core": "^7.23.3", + "@babel/preset-typescript": "^7.23.3", + "@types/babel__core": "^7.20.4", + "babel-preset-solid": "^1.8.4", "merge-anything": "^5.1.7", "solid-refresh": "^0.5.3", - "vitefu": "^0.2.4" + "vitefu": "^0.2.5" }, "peerDependencies": { "solid-js": "^1.7.2", - "vite": "^3.0.0 || ^4.0.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" } }, "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", + "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", "cpu": [ "arm" ], @@ -2297,9 +3458,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", + "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", "cpu": [ "arm64" ], @@ -2313,9 +3474,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", + "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", "cpu": [ "x64" ], @@ -2329,9 +3490,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", + "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", "cpu": [ "arm64" ], @@ -2345,9 +3506,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", + "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", "cpu": [ "x64" ], @@ -2361,9 +3522,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", + "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", "cpu": [ "arm64" ], @@ -2377,9 +3538,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", + "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", "cpu": [ "x64" ], @@ -2393,9 +3554,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", + "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", "cpu": [ "arm" ], @@ -2409,9 +3570,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", + "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", "cpu": [ "arm64" ], @@ -2425,9 +3586,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", + "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", "cpu": [ "ia32" ], @@ -2441,9 +3602,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", + "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", "cpu": [ "loong64" ], @@ -2457,9 +3618,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", + "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", "cpu": [ "mips64el" ], @@ -2473,9 +3634,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", + "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", "cpu": [ "ppc64" ], @@ -2489,9 +3650,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", + "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", "cpu": [ "riscv64" ], @@ -2505,9 +3666,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", + "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", "cpu": [ "s390x" ], @@ -2521,9 +3682,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", "cpu": [ "x64" ], @@ -2537,9 +3698,9 @@ } }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", + "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", "cpu": [ "x64" ], @@ -2553,9 +3714,9 @@ } }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", + "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", "cpu": [ "x64" ], @@ -2569,9 +3730,9 @@ } }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", + "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", "cpu": [ "x64" ], @@ -2585,9 +3746,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", + "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", "cpu": [ "arm64" ], @@ -2601,9 +3762,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", + "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", "cpu": [ "ia32" ], @@ -2617,9 +3778,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", + "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", "cpu": [ "x64" ], @@ -2633,9 +3794,9 @@ } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", "dev": true, "hasInstallScript": true, "bin": { @@ -2645,37 +3806,38 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" } }, "node_modules/vitefu": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", - "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", "dev": true, "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" }, "peerDependenciesMeta": { "vite": { @@ -2690,12 +3852,12 @@ "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yocto-queue": { @@ -3193,6 +4355,13 @@ "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==", "dev": true }, + "@esbuild/aix-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", + "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "dev": true, + "optional": true + }, "@esbuild/android-arm": { "version": "0.17.6", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.6.tgz", @@ -3394,6 +4563,97 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", + "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", + "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", + "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", + "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", + "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", + "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", + "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", + "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", + "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", + "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", + "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", + "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", + "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "dev": true, + "optional": true + }, "@solid-primitives/event-listener": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@solid-primitives/event-listener/-/event-listener-2.3.0.tgz", @@ -3469,6 +4729,21 @@ "@babel/types": "^7.20.7" } }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "@types/node": { + "version": "20.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.1.tgz", + "integrity": "sha512-DsXojJUES2M+FE8CpptJTKpg+r54moV9ZEncPstni1WHFmTcCzeFLnMFfyhCVS8XNOy/OQG+8lVxRLRrVHmV5A==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, "@types/offscreencanvas": { "version": "2019.7.3", "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", @@ -3476,9 +4751,9 @@ "dev": true }, "@vanilla-extract/babel-plugin-debug-ids": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.2.tgz", - "integrity": "sha512-LjnbQWGeMwaydmovx8jWUR8BxLtLiPyq0xz5C8G5OvFhsuJxvavLdrBHNNizvr1dq7/3qZGlPv0znsvU4P44YA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.3.tgz", + "integrity": "sha512-vm4jYu1xhSa6ofQ9AhIpR3DkAp4c+eoR1Rpm8/TQI4DmWbmGbOjYRcqV0aWsfaIlNhN4kFuxFMKBNN9oG6iRzA==", "dev": true, "requires": { "@babel/core": "^7.20.7" @@ -3504,17 +4779,17 @@ } }, "@vanilla-extract/integration": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.2.1.tgz", - "integrity": "sha512-+xYJz07G7TFAMZGrOqArOsURG+xcYvqctujEkANjw2McCBvGEK505RxQqOuNiA9Mi9hgGdNp2JedSa94f3eoLg==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.2.4.tgz", + "integrity": "sha512-+AfymNMVq9sEUe0OJpdCokmPZg4Zi6CqKaW/PnUOfDwEn53ighHOMOBl5hAgxYR8Kiz9NG43Bn00mkjWlFi+ng==", "dev": true, "requires": { "@babel/core": "^7.20.7", "@babel/plugin-syntax-typescript": "^7.20.0", "@vanilla-extract/babel-plugin-debug-ids": "^1.0.2", - "@vanilla-extract/css": "^1.10.0", + "@vanilla-extract/css": "^1.14.0", "esbuild": "0.17.6", - "eval": "0.1.6", + "eval": "0.1.8", "find-up": "^5.0.0", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", @@ -3522,6 +4797,215 @@ "outdent": "^0.8.0", "vite": "^4.1.4", "vite-node": "^0.28.5" + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "dev": true, + "optional": true + }, + "rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "vite": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", + "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "dev": true, + "requires": { + "esbuild": "^0.18.10", + "fsevents": "~2.3.2", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "dependencies": { + "esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + } + } + } } }, "@vanilla-extract/private": { @@ -3531,21 +5015,21 @@ "dev": true }, "@vanilla-extract/vite-plugin": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.9.0.tgz", - "integrity": "sha512-Q2HYAyEJ93Uy7GHQPPiP8SXwPMHGpd4d0YnrIQqB0YZccYbGJR/WFIln9Dmbzx2pdngQUoOfhwEg6kJF8sQrog==", + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@vanilla-extract/vite-plugin/-/vite-plugin-3.9.3.tgz", + "integrity": "sha512-bGyHG98OYTRs5roLRv7LDeyRnD72+vBLonk8cC9VG/xd6hsiHPPj5GyBwoKElT7DyDRfapxWLwLlhgYynrW2Fw==", "dev": true, "requires": { - "@vanilla-extract/integration": "^6.0.2", + "@vanilla-extract/integration": "^6.2.4", "outdent": "^0.8.0", "postcss": "^8.3.6", - "postcss-load-config": "^3.1.0" + "postcss-load-config": "^4.0.1" } }, "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true }, "ansi-styles": { @@ -3753,11 +5237,12 @@ "dev": true }, "eval": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.6.tgz", - "integrity": "sha512-o0XUw+5OGkXw4pJZzQoXUk+H87DHuC+7ZE//oSrRGtatTmr12oTnLfg6QOq9DyTt0c/p4TwzgmkKrBzWTSizyQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "dev": true, "requires": { + "@types/node": "*", "require-like": ">= 0.1.1" } }, @@ -3781,9 +5266,9 @@ } }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "optional": true }, @@ -3854,9 +5339,9 @@ "dev": true }, "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", "dev": true }, "locate-path": { @@ -3912,15 +5397,15 @@ } }, "mlly": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.0.tgz", - "integrity": "sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", "dev": true, "requires": { - "acorn": "^8.8.2", - "pathe": "^1.1.0", - "pkg-types": "^1.0.2", - "ufo": "^1.1.1" + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" } }, "modern-ahocorasick": { @@ -3936,9 +5421,9 @@ "dev": true }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true }, "node-releases": { @@ -3978,9 +5463,9 @@ "dev": true }, "pathe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz", - "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, "picocolors": { @@ -3996,35 +5481,35 @@ "dev": true }, "pkg-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.2.tgz", - "integrity": "sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", "dev": true, "requires": { "jsonc-parser": "^3.2.0", - "mlly": "^1.1.1", + "mlly": "^1.2.0", "pathe": "^1.1.0" } }, "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", "dev": true, "requires": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "dev": true, "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" } }, "regenerator-runtime": { @@ -4040,11 +5525,25 @@ "dev": true }, "rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", + "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", "dev": true, "requires": { + "@rollup/rollup-android-arm-eabi": "4.9.5", + "@rollup/rollup-android-arm64": "4.9.5", + "@rollup/rollup-darwin-arm64": "4.9.5", + "@rollup/rollup-darwin-x64": "4.9.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", + "@rollup/rollup-linux-arm64-gnu": "4.9.5", + "@rollup/rollup-linux-arm64-musl": "4.9.5", + "@rollup/rollup-linux-riscv64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-musl": "4.9.5", + "@rollup/rollup-win32-arm64-msvc": "4.9.5", + "@rollup/rollup-win32-ia32-msvc": "4.9.5", + "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@types/estree": "1.0.5", "fsevents": "~2.3.2" } }, @@ -4055,17 +5554,24 @@ "dev": true }, "seroval": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/seroval/-/seroval-0.12.3.tgz", - "integrity": "sha512-5WDeMpv7rmEylsypRj1iwRVHE/QLsMLiZ+9savlNNQEVdgGia1iRMb7qyaAagY0wu/7+QTe6d2wldk/lgaLb6g==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.0.4.tgz", + "integrity": "sha512-qQs/N+KfJu83rmszFQaTxcoJoPn6KNUruX4KmnmyD0oZkUoiNvJ1rpdYKDf4YHM05k+HOgCxa3yvf15QbVijGg==" + }, + "seroval-plugins": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.0.4.tgz", + "integrity": "sha512-DQ2IK6oQVvy8k+c2V5x5YCtUa/GGGsUwUBNN9UqohrZ0rWdUapBFpNMYP1bCyRHoxOJjdKGl+dieacFIpU/i1A==", + "requires": {} }, "solid-js": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.8.5.tgz", - "integrity": "sha512-xvtJvzJzWbsn35oKFhW9kNwaxG1Z/YLMsDp4tLVcYZTMPzvzQ8vEZuyDQ6nt7xDArVgZJ7TUFrJUwrui/oq53A==", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.8.11.tgz", + "integrity": "sha512-WdwmER+TwBJiN4rVQTVBxocg+9pKlOs41KzPYntrC86xO5sek8TzBYozPEZPL1IRWDouf2lMrvSbIs3CanlPvQ==", "requires": { "csstype": "^3.1.0", - "seroval": "^0.12.0" + "seroval": "^1.0.3", + "seroval-plugins": "^1.0.3" } }, "solid-refresh": { @@ -4126,15 +5632,21 @@ } }, "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true }, "ufo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.1.tgz", - "integrity": "sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, "update-browserslist-db": { @@ -4154,15 +5666,218 @@ "dev": true }, "vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", + "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", "dev": true, "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", + "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", + "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", + "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", + "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", + "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", + "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", + "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", + "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", + "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", + "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", + "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", + "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", + "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", + "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", + "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", + "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", + "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", + "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", + "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", + "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", + "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "dev": true, + "optional": true + }, + "esbuild": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" + } + } + } + }, + "vite-node": { + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.28.5.tgz", + "integrity": "sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==", + "dev": true, + "requires": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.1.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "source-map": "^0.6.1", + "source-map-support": "^0.5.21", + "vite": "^3.0.0 || ^4.0.0" }, "dependencies": { "@esbuild/android-arm": { @@ -4348,53 +6063,58 @@ "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" } + }, + "rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "vite": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", + "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", + "dev": true, + "requires": { + "esbuild": "^0.18.10", + "fsevents": "~2.3.2", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + } } } }, - "vite-node": { - "version": "0.28.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.28.5.tgz", - "integrity": "sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==", - "dev": true, - "requires": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.1.0", - "pathe": "^1.1.0", - "picocolors": "^1.0.0", - "source-map": "^0.6.1", - "source-map-support": "^0.5.21", - "vite": "^3.0.0 || ^4.0.0" - } - }, "vite-plugin-singlefile": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-0.13.5.tgz", - "integrity": "sha512-y/aRGh8qHmw2f1IhaI/C6PJAaov47ESYDvUv1am1YHMhpY+19B5k5Odp8P+tgs+zhfvak6QB1ykrALQErEAo7g==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-singlefile/-/vite-plugin-singlefile-1.0.0.tgz", + "integrity": "sha512-iVAxl0t7gndQrznI4kI14hqAGxhVL7FQndeTdvTIH5/CbwpR2asgD3XSTsd7iWC83YTCmwAmsHIQvKdIdnHu7w==", "dev": true, "requires": { "micromatch": "^4.0.5" } }, "vite-plugin-solid": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.7.2.tgz", - "integrity": "sha512-GV2SMLAibOoXe76i02AsjAg7sbm/0lngBlERvJKVN67HOrJsHcWgkt0R6sfGLDJuFkv2aBe14Zm4vJcNME+7zw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.8.0.tgz", + "integrity": "sha512-n5FAm7ZmTl94VWUoiJCgG7bouF2NlC9CA1wY/qbVnkFbYDWk++bFWyNoU48aLJ+lMtzNeYzJypJXOHzFKxL9xA==", "dev": true, "requires": { - "@babel/core": "^7.23.0", - "@babel/preset-typescript": "^7.23.0", - "@types/babel__core": "^7.20.2", - "babel-preset-solid": "^1.8.0", + "@babel/core": "^7.23.3", + "@babel/preset-typescript": "^7.23.3", + "@types/babel__core": "^7.20.4", + "babel-preset-solid": "^1.8.4", "merge-anything": "^5.1.7", "solid-refresh": "^0.5.3", - "vitefu": "^0.2.4" + "vitefu": "^0.2.5" } }, "vitefu": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", - "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", "dev": true, "requires": {} }, @@ -4405,9 +6125,9 @@ "dev": true }, "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true }, "yocto-queue": { diff --git a/frontend/package.json b/frontend/package.json index 7f20d35..9e8ac8d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,6 @@ { "name": "frontend", "version": "0.0.0", - "description": "", "scripts": { "start": "vite", "dev": "vite", @@ -13,17 +12,17 @@ "@gfx/zopfli": "^1.0.15", "@types/offscreencanvas": "^2019.7.3", "@vanilla-extract/css": "^1.14.0", - "@vanilla-extract/vite-plugin": "^3.9.0", - "typescript": "^5.2.2", - "vite": "^4.5.0", - "vite-plugin-singlefile": "^0.13.5", - "vite-plugin-solid": "^2.7.2" + "@vanilla-extract/vite-plugin": "^3.9.3", + "typescript": "^5.3.3", + "vite": "^5.0.11", + "vite-plugin-singlefile": "^1.0.0", + "vite-plugin-solid": "^2.8.0" }, "dependencies": { "@solid-primitives/event-listener": "^2.3.0", "@solid-primitives/intersection-observer": "^2.1.3", "@solid-primitives/timer": "^1.3.7", "@solid-primitives/websocket": "^1.2.0", - "solid-js": "^1.8.5" + "solid-js": "^1.8.11" } } diff --git a/platformio.ini b/platformio.ini index f11b6c3..c425eac 100644 --- a/platformio.ini +++ b/platformio.ini @@ -20,11 +20,11 @@ lib_deps = https://github.com/tzapu/WiFiManager.git#v2.0.16-rc.2 monitor_speed = 115200 monitor_filters = esp32_exception_decoder -extra_scripts = upload.py +; extra_scripts = upload.py ; upload_protocol = custom -upload_protocol = espota -upload_url = http://192.168.178.141/update -upload_port = 192.168.178.141 +; upload_protocol = espota +; upload_url = http://192.168.178.141/update +; upload_port = 192.168.178.141 ;upload_port=COM4 [env:nodemcuv2] board = nodemcuv2 diff --git a/src/messages.cpp b/src/messages.cpp index b47d8ca..1b3c1a7 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -82,21 +82,24 @@ void Messages_::scrollMessageEveryMinute() previousMinute = timeinfo.tm_min; } - if (timeinfo.tm_sec != previousSecond){ - if(messages.size()>0){ - indicatorPixel = previousSecond&0b00000001; //every other second, bit of a geek style - Screen.setPixel(0,0,indicatorPixel); - } else - { // if the indicator pixel was set, but no message exisits, reset it - if(indicatorPixel>0){ - indicatorPixel = 0; - Screen.setPixel(0,0,indicatorPixel); + if (timeinfo.tm_sec != previousSecond) + { + if (messages.size() > 0) + { + indicatorPixel = previousSecond & 0b00000001; // every other second, bit of a geek style + Screen.setPixel(0, 0, indicatorPixel); + } + else + { // if the indicator pixel was set, but no message exisits, reset it + if (indicatorPixel > 0) + { + indicatorPixel = 0; + Screen.setPixel(0, 0, indicatorPixel); } } previousSecond = timeinfo.tm_sec; } - } } @@ -134,12 +137,12 @@ void handleMessage(AsyncWebServerRequest *request) token = strtok(nullptr, ","); } - //Uncomment this to thee what charcode comes in - // for(int i = 0;isend(200, "text/plain", "Message received"); } diff --git a/src/plugins/TickingClockPlugin.cpp b/src/plugins/TickingClockPlugin.cpp index a0cc2c1..b412d16 100644 --- a/src/plugins/TickingClockPlugin.cpp +++ b/src/plugins/TickingClockPlugin.cpp @@ -25,11 +25,11 @@ void TickingClockPlugin::loop() std::vector mm = {(timeinfo.tm_min - timeinfo.tm_min % 10) / 10, timeinfo.tm_min % 10}; Screen.clear(); - - Screen.drawCharacter(2, 0, Screen.readBytes(fonts[1].data[hh[0] ]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(9, 0, Screen.readBytes(fonts[1].data[hh[1] ]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(2, 9, Screen.readBytes(fonts[1].data[mm[0] ]), 8, Screen.getCurrentBrightness()); - Screen.drawCharacter(9, 9, Screen.readBytes(fonts[1].data[mm[1] ]), 8, Screen.getCurrentBrightness()); + + Screen.drawCharacter(2, 0, Screen.readBytes(fonts[1].data[hh[0]]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(9, 0, Screen.readBytes(fonts[1].data[hh[1]]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(2, 9, Screen.readBytes(fonts[1].data[mm[0]]), 8, Screen.getCurrentBrightness()); + Screen.drawCharacter(9, 9, Screen.readBytes(fonts[1].data[mm[1]]), 8, Screen.getCurrentBrightness()); previousMinutes = timeinfo.tm_min; previousHour = timeinfo.tm_hour; } diff --git a/src/screen.cpp b/src/screen.cpp index 8a71d72..3d6505b 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -301,34 +301,35 @@ void Screen_::drawWeather(int x, int y, int weather, uint8_t brightness) void Screen_::scrollText(std::string text, int delayTime, uint8_t brightness, uint8_t fontid) { - // lets determine the current font + // lets determine the current font font currentFont = (fontid < fonts.size()) ? fonts[fontid] : fonts[0]; - int textWidth = text.length() * (currentFont.sizeX+1); // charsize + space + int textWidth = text.length() * (currentFont.sizeX + 1); // charsize + space for (int i = -ROWS; i < textWidth; i++) - { // start with negarive screen size, so out of screen to the right - + { // start with negative screen size, so out of screen to the right + int skippedChars = 0; this->clear(); - + for (std::size_t strPos = 0; strPos < text.length(); strPos++) { // since i need the pos to calculate, this is the best way to iterate here - if(text[strPos] == 195){ - // we skipp the unicode char idicating german umlauts. yes, this is not a real unicode implementation. however. - skippedChars++; - } - else + if (text[strPos] == 195) + { + // we skip the unicode char indicating special characters + skippedChars++; + } + else { - int xPos = (strPos-skippedChars) * (currentFont.sizeX+1) - i; + int xPos = (strPos - skippedChars) * (currentFont.sizeX + 1) - i; if (xPos > -6 && xPos < ROWS) { // so are we somewhere on screen with the char? // ensure that we have a defined char, lets take the first - uint8_t currentChar = ( ((text[strPos]-currentFont.offset)= currentFont.offset)) ? text[strPos] : currentFont.offset; + uint8_t currentChar = (((text[strPos] - currentFont.offset) < currentFont.data.size()) && (text[strPos] >= currentFont.offset)) ? text[strPos] : currentFont.offset; // draw it - Screen.drawCharacter(xPos, 4, Screen.readBytes(currentFont.data[currentChar-currentFont.offset]), 8); + Screen.drawCharacter(xPos, 4, Screen.readBytes(currentFont.data[currentChar - currentFont.offset]), 8); } } } diff --git a/src/signs.cpp b/src/signs.cpp index fd80b71..45f4aa5 100644 --- a/src/signs.cpp +++ b/src/signs.cpp @@ -59,163 +59,173 @@ std::vector fonts = 32, // offset { // character data, skipped first "offest" lines - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 32 - BLANK - {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00000000, 0b00100000}, // 33 - ! - {0b01010000, 0b01010000, 0b01010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 34 - " - {0b01010000, 0b01010000, 0b11111000, 0b01010000, 0b11111000, 0b01010000, 0b01010000}, // 35 - # - {0b00100000, 0b01111000, 0b10100000, 0b01110000, 0b00101000, 0b11110000, 0b00100000}, // 36 - $ - {0b11000000, 0b11001000, 0b00010000, 0b00100000, 0b01000000, 0b10011000, 0b00011000}, // 37 - % - {0b01100000, 0b10010000, 0b10100000, 0b01000000, 0b10101000, 0b10010000, 0b01101000}, // 38 - & - {0b01100000, 0b00100000, 0b01000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 39 - ' - {0b00010000, 0b00100000, 0b01000000, 0b01000000, 0b01000000, 0b00100000, 0b00010000}, // 40 - ( - {0b01000000, 0b00100000, 0b00010000, 0b00010000, 0b00010000, 0b00100000, 0b01000000}, // 41 - ) - {0b00000000, 0b01010000, 0b00100000, 0b11111000, 0b00100000, 0b01010000, 0b00000000}, // 42 - * - {0b00000000, 0b00100000, 0b00100000, 0b11111000, 0b00100000, 0b00100000, 0b00000000}, // 43 - + - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // 44 - , - {0b00000000, 0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b00000000, 0b00000000}, // 45 - - - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b01100000, 0b01100000}, // 46 - . - {0b00000000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b00000000}, // 47 - / - {0b00110000, 0b01111000, 0b01001000, 0b01001000, 0b01001000, 0b01111000, 0b00110000}, // 48 - 0 - {0b00110000, 0b01110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 49 - 1 - {0b00110000, 0b01111000, 0b00001000, 0b00100000, 0b01000000, 0b01111000, 0b01111000}, // 50 - 2 - {0b00110000, 0b01111000, 0b00001000, 0b00111000, 0b00001000, 0b01111000, 0b00110000}, // 51 - 3 - {0b01001000, 0b01001000, 0b01111000, 0b00111000, 0b00001000, 0b00001000, 0b00001000}, // 52 - 4 - {0b01111000, 0b01111000, 0b01000000, 0b01110000, 0b00001000, 0b01111000, 0b01110000}, // 53 - 5 - {0b00110000, 0b01111000, 0b01000000, 0b01110000, 0b01001000, 0b01111000, 0b00110000}, // 54 - 6 - {0b01111000, 0b01111000, 0b00010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // 55 - 7 - {0b00110000, 0b01111000, 0b01001000, 0b00110000, 0b01001000, 0b01111000, 0b00110000}, // 56 - 8 - {0b00110000, 0b01111000, 0b01001000, 0b00111000, 0b00001000, 0b01111000, 0b00110000}, // 57 - 9 - {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b01100000, 0b00000000}, // 58 - : - {0b00000000, 0b01100000, 0b01100000, 0b00000000, 0b01100000, 0b00100000, 0b01000000}, // 59 - ; - {0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b00100000, 0b00010000, 0b00001000}, // 60 - < - {0b00000000, 0b00000000, 0b11111000, 0b00000000, 0b11111000, 0b00000000, 0b00000000}, // 61 - = - {0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00100000, 0b01000000, 0b10000000}, // 62 - > - {0b01110000, 0b10001000, 0b00001000, 0b00010000, 0b00100000, 0b00000000, 0b00100000}, // 63 - ? - {0b01110000, 0b10001000, 0b00001000, 0b01101000, 0b10101000, 0b10101000, 0b01110000}, // 64 - @ - {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000}, // 65 - A - {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10001000, 0b10001000, 0b11110000}, // 66 - B - {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // 67 - C - {0b11100000, 0b10010000, 0b10001000, 0b10001000, 0b10001000, 0b10010000, 0b11100000}, // 68 - D - {0b11111000, 0b10000000, 0b10000000, 0b11110000, 0b10000000, 0b10000000, 0b11111000}, // 69 - E - {0b11111000, 0b10000000, 0b10000000, 0b11100000, 0b10000000, 0b10000000, 0b10000000}, // 70 - F - {0b01110000, 0b10001000, 0b10000000, 0b10000000, 0b10011000, 0b10001000, 0b01110000}, // 71 - G - {0b10001000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000, 0b10001000}, // 72 - H - {0b01110000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // 73 - I - {0b00111000, 0b00010000, 0b00010000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // 74 - J - {0b10001000, 0b10010000, 0b10100000, 0b11000000, 0b10100000, 0b10010000, 0b10001000}, // 75 - K - {0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b10000000, 0b11111000}, // 76 - L - {0b10001000, 0b11011000, 0b10101000, 0b10001000, 0b10001000, 0b10001000, 0b10001000}, // 77 - M - {0b10001000, 0b10001000, 0b11001000, 0b10101000, 0b10011000, 0b10001000, 0b10001000}, // 78 - N - {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 79 - O - {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10000000, 0b10000000, 0b10000000}, // 80 - P - {0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10010000, 0b01101000}, // 81 - Q - {0b11110000, 0b10001000, 0b10001000, 0b11110000, 0b10100000, 0b10010000, 0b10001000}, // 82 - R - {0b01111000, 0b10000000, 0b10000000, 0b01110000, 0b00001000, 0b00001000, 0b11110000}, // 83 - S - {0b11111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // 84 - T - {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 85 - U - {0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // 86 - V - {0b10001000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b11011000, 0b10001000}, // 87 - W - {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000, 0b10001000}, // 88 - X - {0b10001000, 0b10001000, 0b01010000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // 89 - Y - {0b11111000, 0b00001000, 0b00010000, 0b00100000, 0b01000000, 0b10000000, 0b11111000}, // 90 - Z - {0b00111000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00111000}, // 91 - [ - {0b00000000, 0b10000000, 0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000000}, // 92 - " - {0b11100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b11100000}, // 93 - ] - {0b00100000, 0b01010000, 0b10001000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 94 - ^ - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11111000}, // 95 - _ - {0b01000000, 0b00100000, 0b00010000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 96 - ` - {0b00000000, 0b00000000, 0b01110000, 0b00001000, 0b01111000, 0b10001000, 0b01111000}, // 97 - a - {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b11110000}, // 98 - b - {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b10000000, 0b10001000, 0b01110000}, // 99 - c - {0b00001000, 0b00001000, 0b01101000, 0b10011000, 0b10001000, 0b10001000, 0b01111000}, // 100 - d - {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b11111000, 0b10000000, 0b01110000}, // 101 - e - {0b00110000, 0b01001000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01000000}, // 102 - f - {0b00000000, 0b00000000, 0b01111000, 0b10001000, 0b01111000, 0b00001000, 0b00110000}, // 103 - g - {0b10000000, 0b10000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // 104 - h - {0b00100000, 0b00000000, 0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // 105 - i - {0b00010000, 0b00000000, 0b00110000, 0b00010000, 0b00010000, 0b10010000, 0b01100000}, // 106 - j - {0b01000000, 0b01000000, 0b01001000, 0b01010000, 0b01100000, 0b01010000, 0b01001000}, // 107 - k - {0b01100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b01110000}, // 108 - l - {0b00000000, 0b00000000, 0b11010000, 0b10101000, 0b10101000, 0b10001000, 0b10001000}, // 109 - m - {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10001000, 0b10001000, 0b10001000}, // 110 - n - {0b00000000, 0b00000000, 0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 111 - o - {0b00000000, 0b00000000, 0b11110000, 0b10001000, 0b11110000, 0b10000000, 0b10000000}, // 112 - p - {0b00000000, 0b00000000, 0b01101000, 0b10011000, 0b01111000, 0b00001000, 0b00001000}, // 113 - q - {0b00000000, 0b00000000, 0b10110000, 0b11001000, 0b10000000, 0b10000000, 0b10000000}, // 114 - r - {0b00000000, 0b00000000, 0b01110000, 0b10000000, 0b01110000, 0b00001000, 0b11110000}, // 115 - s - {0b01000000, 0b01000000, 0b11100000, 0b01000000, 0b01000000, 0b01001000, 0b00110000}, // 116 - t - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b10011000, 0b01101000}, // 117 - u - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b01010000, 0b00100000}, // 118 - v - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b10101000, 0b10101000, 0b01010000}, // 119 - w - {0b00000000, 0b00000000, 0b10001000, 0b01010000, 0b00100000, 0b01010000, 0b10001000}, // 120 - x - {0b00000000, 0b00000000, 0b10001000, 0b10001000, 0b01111000, 0b00001000, 0b01110000}, // 121 - y - {0b00000000, 0b00000000, 0b11111000, 0b00010000, 0b00100000, 0b01000000, 0b11111000}, // 122 - z - {0b00010000, 0b00100000, 0b00100000, 0b01000000, 0b00100000, 0b00100000, 0b00010000}, // 123 - { - {0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000, 0b00100000}, // 124 - | - {0b01000000, 0b00100000, 0b00100000, 0b00010000, 0b00100000, 0b00100000, 0b01000000}, // 125 - } - {0b00000000, 0b00100000, 0b00010000, 0b11111000, 0b00010000, 0b00100000, 0b00000000}, // 126 - -> - {0b00000000, 0b00100000, 0b01000000, 0b11111000, 0b01000000, 0b00100000, 0b00000000}, // 127 - <- - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 128 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 129 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 130 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 131 - {0b10001000, 0b01110000, 0b10001000, 0b10001000, 0b11111000, 0b10001000, 0b10001000}, // 132 - Ä - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 133 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 134 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 135 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 136 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 137 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 138 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 139 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 140 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 141 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 142 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 143 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 144 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 145 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 146 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 147 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 148 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 149 - {0b10001000, 0b00000000, 0b11111000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 150 - Ö - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 151 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 152 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 153 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 154 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 155 - {0b10001000, 0b00000000, 0b10001000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 156 - Ü - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 157 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 158 - {0b01110000, 0b10001000, 0b10001000, 0b11110000, 0b10001000, 0b10001000, 0b10110000}, // 159 - ß - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 160 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 161 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 162 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 163 - {0b00000000, 0b10001000, 0b01110000, 0b00001000, 0b01111000, 0b10001000, 0b01111000}, // 164 - ä - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 165 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 166 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 167 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 168 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 169 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 170 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 171 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 172 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 173 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 174 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 175 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 176 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 177 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 178 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 179 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 180 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 181 - {0b00000000, 0b10001000, 0b01110000, 0b10001000, 0b10001000, 0b10001000, 0b01110000}, // 182 - ö - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 183 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 184 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 185 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 186 - {0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 187 - {0b00000000, 0b10001000, 0b00000000, 0b10001000, 0b10001000, 0b10011000, 0b01101000}, // 188 - ü + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 32 - BLANK + {0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x20}, // 33 - ! + {0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00}, // 34 - " + {0x50, 0x50, 0xF8, 0x50, 0xF8, 0x50, 0x50}, // 35 - # + {0x20, 0x78, 0xA0, 0x70, 0x28, 0xF0, 0x20}, // 36 - $ + {0xC0, 0xC8, 0x10, 0x20, 0x40, 0x98, 0x18}, // 37 - % + {0x60, 0x90, 0xA0, 0x40, 0xAA, 0x90, 0x68}, // 38 - & + {0x60, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00}, // 39 - ' + {0x10, 0x20, 0x40, 0x40, 0x40, 0x20, 0x10}, // 40 - ( + {0x40, 0x20, 0x10, 0x10, 0x10, 0x20, 0x40}, // 41 - ) + {0x00, 0x50, 0x20, 0xF8, 0x20, 0x50, 0x00}, // 42 - * + {0x00, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00}, // 43 - + + {0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x40}, // 44 - , + {0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00}, // 45 - - + {0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60}, // 46 - . + {0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00}, // 47 - / + {0x30, 0x78, 0x48, 0x48, 0x48, 0x78, 0x30}, // 48 - 0 + {0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30}, // 49 - 1 + {0x30, 0x78, 0x08, 0x20, 0x40, 0x78, 0x78}, // 50 - 2 + {0x30, 0x78, 0x08, 0x38, 0x08, 0x78, 0x30}, // 51 - 3 + {0x48, 0x48, 0x78, 0x38, 0x08, 0x08, 0x08}, // 52 - 4 + {0x78, 0x78, 0x40, 0x70, 0x08, 0x78, 0x70}, // 53 - 5 + {0x30, 0x78, 0x40, 0x70, 0x48, 0x78, 0x30}, // 54 - 6 + {0x78, 0x78, 0x10, 0x20, 0x20, 0x20, 0x20}, // 55 - + {0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60}, // 46 - . + {0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00}, // 47 - / + {0x30, 0x78, 0x48, 0x48, 0x48, 0x78, 0x30}, // 48 - 0 + {0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30}, // 49 - 1 + {0x30, 0x78, 0x08, 0x20, 0x40, 0x78, 0x78}, // 50 - 2 + {0x30, 0x78, 0x08, 0x38, 0x08, 0x78, 0x30}, // 51 - 3 + {0x48, 0x48, 0x78, 0x38, 0x08, 0x08, 0x08}, // 52 - 4 + {0x78, 0x78, 0x40, 0x70, 0x08, 0x78, 0x70}, // 53 - 5 + {0x30, 0x78, 0x40, 0x70, 0x48, 0x78, 0x30}, // 54 - 6 + {0x78, 0x78, 0x10, 0x20, 0x20, 0x20, 0x20}, // 55 - 7 + {0x30, 0x78, 0x48, 0x30, 0x48, 0x78, 0x30}, // 56 - 8 + {0x30, 0x78, 0x48, 0x38, 0x08, 0x78, 0x30}, // 57 - 9 + {0x00, 0x60, 0x60, 0x00, 0x60, 0x60, 0x00}, // 58 - : + {0x00, 0x60, 0x60, 0x00, 0x60, 0x20, 0x40}, // 59 - ; + {0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08}, // 60 - < + {0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00}, // 61 - = + {0x80, 0x40, 0x20, 0x10, 0x20, 0x40, 0x80}, // 62 - > + {0x70, 0x88, 0x08, 0x10, 0x20, 0x00, 0x20}, // 63 - ? + {0x70, 0x88, 0x08, 0x68, 0xA8, 0xA8, 0x70}, // 64 - @ + {0x70, 0x88, 0x88, 0x88, 0xF8, 0x88, 0x88}, // 65 - A + {0xF0, 0x88, 0x88, 0xF0, 0x88, 0x88, 0xF0}, // 66 - B + {0x70, 0x88, 0x80, 0x80, 0x80, 0x88, 0x70}, // 67 - C + {0xE0, 0x90, 0x88, 0x88, 0x88, 0x90, 0xE0}, // 68 - D + {0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0xF8}, // 69 - E + {0xF8, 0x80, 0x80, 0xE0, 0x80, 0x80, 0x80}, // 70 - F + {0x70, 0x88, 0x80, 0x80, 0x98, 0x88, 0x70}, // 71 - G + {0x88, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x88}, // 72 - H + {0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70}, // 73 - I + {0x38, 0x10, 0x10, 0x10, 0x10, 0x90, 0x60}, // 74 - J + {0x88, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x88}, // 75 - K + {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF8}, // 76 - L + {0x88, 0xD8, 0xA8, 0x88, 0x88, 0x88, 0x88}, // 77 - M + {0x88, 0x88, 0xC8, 0xA8, 0x98, 0x88, 0x88}, // 78 - N + {0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70}, // 79 - O + {0xF0, 0x88, 0x88, 0xF0, 0x80, 0x80, 0x80}, // 80 - P + {0x70, 0x88, 0x88, 0x88, 0xA8, 0x90, 0x68}, // 81 - Q + {0xF0, 0x88, 0x88, 0xF0, 0xA0, 0x90, 0x88}, // 82 - R + {0x7C, 0x80, 0x80, 0x70, 0x08, 0x08, 0xF0}, // 83 - S + {0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}, // 84 - T + {0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70}, // 85 - U + {0x88, 0x88, 0x88, 0x88, 0x88, 0x50, 0x20}, // 86 - V + {0x88, 0x88, 0x88, 0xA8, 0xA8, 0xD8, 0x88}, // 87 - W + {0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88}, // 88 - X + {0x88, 0x88, 0x50, 0x20, 0x20, 0x20, 0x20}, // 89 - Y + {0xF8, 0x08, 0x10, 0x20, 0x40, 0x80, 0xF8}, // 90 - Z + {0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38}, // 91 - [ + {0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00}, // 92 - " + {0xE0, 0x20, 0x20, 0x20, 0x20, 0x20, 0xE0}, // 93 - ] + {0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00}, // 94 - ^ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8}, // 95 - _ + {0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00}, // 96 - ` + {0x00, 0x00, 0x70, 0x08, 0x3C, 0x88, 0x78}, // 97 - a + {0x80, 0x80, 0xB0, 0xC8, 0x88, 0x88, 0xF0}, // 98 - b + {0x00, 0x00, 0x70, 0x80, 0x80, 0x88, 0x70}, // 99 - c + {0x08, 0x08, 0x68, 0x98, 0x88, 0x88, 0x78}, // 100 - d + {0x00, 0x00, 0x70, 0x88, 0xF8, 0x80, 0x70}, // 101 - e + {0x30, 0x48, 0x40, 0xE0, 0x40, 0x40, 0x40}, // 102 - f + {0x00, 0x00, 0x78, 0x88, 0x78, 0x08, 0x30}, // 103 - g + {0x80, 0x80, 0xB0, 0xC8, 0x88, 0x88, 0x88}, // 104 - h + {0x20, 0x00, 0x60, 0x20, 0x20, 0x20, 0x70}, // 105 - i + {0x10, 0x00, 0x30, 0x10, 0x10, 0x90, 0x60}, // 106 - j + {0x40, 0x40, 0x44, 0x48, 0x70, 0x48, 0x44}, // 107 - k + {0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70}, // 108 - l + {0x00, 0x00, 0xD0, 0xA8, 0xA8, 0x88, 0x88}, // 109 - m + {0x00, 0x00, 0xB0, 0xC8, 0x88, 0x88, 0x88}, // 110 - n + {0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70}, // 111 - o + {0x00, 0x00, 0xF0, 0x88, 0xF0, 0x80, 0x80}, // 112 - p + {0x00, 0x00, 0x68, 0x98, 0x78, 0x08, 0x08}, // 113 - q + {0x00, 0x00, 0xB0, 0xC8, 0x80, 0x80, 0x80}, // 114 - r + {0x00, 0x00, 0x70, 0x80, 0x70, 0x08, 0xF0}, // 115 - s + {0x40, 0x40, 0xE0, 0x40, 0x40, 0x48, 0x30}, // 116 - t + {0x00, 0x00, 0x88, 0x88, 0x88, 0x98, 0x68}, // 117 - u + {0x00, 0x00, 0x88, 0x88, 0x88, 0x50, 0x20}, // 118 - v + {0x00, 0x00, 0x88, 0x88, 0xA8, 0xA8, 0x50}, // 119 - w + {0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88}, // 120 - x + {0x00, 0x00, 0x88, 0x88, 0x78, 0x08, 0x70}, // 121 - y + {0x00, 0x00, 0xF8, 0x10, 0x20, 0x40, 0xF8}, // 122 - z + {0x10, 0x20, 0x20, 0x40, 0x20, 0x20, 0x10}, // 123 - { + {0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}, // 124 - | + {0x40, 0x20, 0x20, 0x10, 0x20, 0x20, 0x40}, // 125 - } + {0x00, 0x20, 0x10, 0xF8, 0x10, 0x20, 0x00}, // 126 - -> + {0x00, 0x20, 0x40, 0xF8, 0x40, 0x20, 0x00}, // 127 - <- + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 128 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 129 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 130 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 131 + {0x88, 0x70, 0x88, 0x88, 0xF8, 0x88, 0x88}, // 132 - Ä + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 133 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 134 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 135 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 136 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 137 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 138 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 139 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 140 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 141 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 142 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 143 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 144 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 145 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 146 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 147 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 148 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 149 + {0x88, 0x00, 0xF8, 0x88, 0x88, 0x88, 0x70}, // 150 - Ö + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 151 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 152 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 153 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 154 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 155 + {0x88, 0x00, 0x88, 0x88, 0x88, 0x88, 0x70}, // 156 - Ü + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 157 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 158 + {0x70, 0x88, 0x88, 0xF8, 0x88, 0x88, 0xB8}, // 159 - ß + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 160 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 161 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 162 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 163 + {0x00, 0x88, 0x70, 0x08, 0x78, 0x88, 0x78}, // 164 - ä + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 165 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 166 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 167 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 168 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 169 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 170 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 171 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 172 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 173 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 174 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 175 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 176 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 177 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 178 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 179 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 180 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 181 + {0x00, 0x88, 0x70, 0x88, 0x88, 0x88, 0x70}, // 182 - ö + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 183 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 184 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 185 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 186 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 187 + {0x00, 0x88, 0x00, 0x88, 0x88, 0x98, 0x68}, // 188 - ü }}, // index 1 - bold digits @@ -225,16 +235,16 @@ std::vector fonts = 48, // offset { // character data, skipped first "offest" lines - {0b01111000, 0b11111100, 0b11001100, 0b11001100, 0b11001100, 0b11111100, 0b01111000}, // 48 - 0 - {0b00110000, 0b01110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 49 - 1 - {0b01111000, 0b11111100, 0b00001100, 0b00111000, 0b01100000, 0b11111100, 0b11111100}, // 50 - 2 - {0b01111000, 0b11111100, 0b00001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 51 - 3 - {0b11001100, 0b11001100, 0b11111100, 0b01111100, 0b00001100, 0b00001100, 0b00001100}, // 52 - 4 - {0b11111100, 0b11111100, 0b11000000, 0b11111000, 0b00001100, 0b11111100, 0b11111000}, // 53 - 5 - {0b01111000, 0b11111100, 0b11000000, 0b11111000, 0b11001100, 0b11111100, 0b01111000}, // 54 - 6 - {0b11111100, 0b11111100, 0b00011000, 0b00110000, 0b00110000, 0b00110000, 0b00110000}, // 55 - 7 - {0b01111000, 0b11111100, 0b11001100, 0b01111000, 0b11001100, 0b11111100, 0b01111000}, // 56 - 8 - {0b01111000, 0b11111100, 0b11001100, 0b01111100, 0b00001100, 0b11111100, 0b01111000}, // 57 - 9 + {0x78, 0xFC, 0xCC, 0xCC, 0xCC, 0xFC, 0x78}, // 48 - 0 + {0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30}, // 49 - 1 + {0x78, 0xFC, 0x0C, 0x38, 0x60, 0xFC, 0xFC}, // 50 - 2 + {0x78, 0xFC, 0x0C, 0x7C, 0x0C, 0xFC, 0x78}, // 51 - 3 + {0xCC, 0xCC, 0xFC, 0x7C, 0x0C, 0x0C, 0x0C}, // 52 - 4 + {0xFC, 0xFC, 0xC0, 0xF8, 0x0C, 0xFC, 0xF8}, // 53 - 5 + {0x78, 0xFC, 0xC0, 0xF8, 0xCC, 0xFC, 0x78}, // 54 - 6 + {0xFC, 0xFC, 0x18, 0x30, 0x30, 0x30, 0x30}, // 55 - 7 + {0x78, 0xFC, 0xCC, 0x78, 0xCC, 0xFC, 0x78}, // 56 - 8 + {0x78, 0xFC, 0xCC, 0x7C, 0x0C, 0xFC, 0x78} // 57 - 9 }}, }; \ No newline at end of file diff --git a/src/webgui.cpp b/src/webgui.cpp index 8fa6cde..879234f 100644 --- a/src/webgui.cpp +++ b/src/webgui.cpp @@ -1,404 +1,403 @@ #include "webgui.h" -#include "screen.h" #ifdef ENABLE_SERVER #include -const uint32_t GUI_HTML_SIZE = 11775; -const uint8_t GUI_HTML[] PROGMEM = {31,139,8,0,0,0,0,0,2,3,108,16,87,98,220,42,240,127,79,161,199,75,79,36,220,59,235,222,123,183, -63,49,26,45,216,48,200,48,218,250,155,155,229,98,217,154,14,211,251,204,218,127,59,231,219,55,143,23,187,137, -38,103,235,181,181,1,75,172,196,134,96,128,172,94,75,146,53,13,50,31,8,125,209,1,201,68,105,25,34,144, -96,21,21,233,18,75,248,175,78,148,14,4,107,26,104,149,62,16,75,148,71,2,236,7,183,76,78,90,228,208, -52,10,210,161,242,37,49,104,200,72,155,70,37,45,136,233,127,150,34,13,14,82,229,173,15,191,84,251,127,249, -105,41,95,154,249,153,97,13,190,244,165,193,11,96,5,139,212,177,16,53,0,177,177,89,7,40,4,211,68,101, -92,225,92,229,248,28,51,101,125,149,23,86,6,200,148,119,92,62,203,54,183,230,41,242,194,35,165,178,5,209, -59,224,11,217,76,54,205,85,140,92,90,155,57,131,89,95,158,148,53,72,208,8,134,58,253,158,90,206,79,207, -164,167,119,139,199,75,159,59,159,27,39,135,91,254,110,103,126,217,94,30,62,26,117,181,48,111,228,107,245,210, -109,22,28,91,50,238,77,225,171,190,144,157,249,22,95,182,71,238,238,116,70,159,238,40,60,158,62,199,211,253, -237,252,238,248,179,185,12,71,139,182,123,113,116,153,79,183,132,152,116,84,193,199,232,131,105,24,20,76,162,199, -142,243,85,156,120,3,20,16,2,132,210,91,163,250,67,161,79,39,166,81,200,228,98,100,200,66,253,124,107,119, -255,234,219,215,179,235,205,157,100,219,35,5,111,215,248,200,53,10,139,42,152,146,18,234,148,32,152,243,121,101, -129,253,58,66,189,246,161,168,80,145,241,248,225,99,79,121,140,253,96,145,123,85,57,64,202,84,0,73,176,107, -97,160,125,96,223,73,117,18,229,182,113,100,127,197,82,77,105,129,50,204,177,247,221,164,17,149,115,204,140,95, -124,100,55,71,101,31,75,149,165,200,86,140,49,13,106,0,48,30,143,172,127,127,221,0,65,82,178,243,206,58, -196,6,208,23,250,66,19,20,185,105,202,19,3,245,133,178,46,83,43,230,102,51,151,216,118,77,225,98,199,48, -235,164,173,17,185,41,170,41,231,6,92,107,116,182,106,12,11,114,204,65,179,58,232,69,253,214,130,121,120,15, -53,148,174,49,103,117,205,254,68,210,114,10,135,61,86,139,63,113,110,153,225,153,134,251,131,203,214,21,164,253, -245,210,130,249,6,134,25,249,98,51,200,80,36,195,112,212,84,37,222,8,232,136,242,70,213,21,109,96,202,7, -196,154,16,85,82,84,21,84,87,77,5,150,215,137,43,190,94,21,119,158,230,226,252,234,237,116,54,171,105,239, -82,238,105,132,11,150,213,124,203,147,38,104,193,226,174,196,166,23,150,78,142,133,109,151,206,0,32,184,229,89, -180,251,129,102,38,154,94,201,205,54,11,134,58,48,73,31,156,179,25,83,195,72,142,86,184,48,73,12,144,119, -20,51,1,119,119,74,238,227,16,149,15,130,107,31,4,180,161,214,98,154,26,168,64,83,78,219,233,92,37,163, -161,156,42,93,214,109,5,211,244,9,101,140,225,167,52,205,157,114,211,116,111,210,162,69,143,66,240,77,133,218, -246,86,176,100,5,244,147,73,96,29,99,133,96,57,57,206,162,113,52,121,125,5,174,188,65,52,170,8,66,241, -237,150,51,222,97,124,4,201,64,56,46,95,144,211,156,56,3,249,254,225,110,217,212,108,106,113,227,213,145,51, -69,137,17,44,126,145,27,248,173,69,125,210,143,176,205,106,112,7,175,64,190,131,142,205,175,242,68,188,149,127, -22,23,32,55,205,189,134,42,213,109,93,139,178,134,66,183,107,219,141,168,152,253,238,194,128,176,140,7,183,217, -183,194,28,44,37,193,158,177,1,15,139,47,225,113,17,30,175,195,3,64,30,15,129,240,137,148,143,161,160,229, -23,97,229,82,24,9,73,13,250,43,150,95,41,143,133,146,14,159,223,26,85,29,28,207,109,234,68,45,205,252, -2,210,255,94,81,69,238,121,170,180,218,138,6,89,64,202,200,108,140,126,111,253,175,6,140,105,206,179,165,140, -202,103,206,60,108,186,232,252,131,53,98,114,204,183,43,165,139,186,126,216,32,134,88,74,187,29,28,250,123,216, -141,147,110,126,189,252,21,74,151,20,214,170,175,154,109,182,226,23,92,73,127,201,226,78,55,223,138,186,133,20, -68,151,63,166,83,61,14,223,215,141,235,119,115,183,46,76,225,26,147,186,36,248,240,241,49,152,99,139,246,194, -236,103,148,231,148,245,24,155,81,25,204,80,102,164,97,58,241,146,56,23,215,192,180,48,156,119,217,150,223,66, -178,84,186,98,154,11,187,24,54,113,69,155,16,58,58,197,202,27,240,51,147,19,241,43,207,62,50,203,7,92, -7,17,25,131,233,51,100,207,146,176,137,126,124,156,232,196,128,174,192,112,212,203,38,45,238,82,162,49,197,235, -249,235,100,221,218,27,100,155,238,242,126,21,89,107,169,159,51,167,30,204,57,8,60,22,199,113,127,7,54,233, -109,27,66,15,39,198,214,141,147,131,125,165,222,179,175,32,149,68,52,212,88,187,223,80,32,31,34,3,112,175, -163,213,91,6,62,179,191,72,233,165,240,14,17,250,188,117,242,75,246,52,196,128,141,195,203,141,66,235,220,203, -115,49,90,129,143,164,125,24,169,178,236,36,62,62,178,101,18,179,162,155,155,143,102,114,88,164,195,48,184,128, -130,4,6,182,63,1,27,216,14,211,255,14,187,57,27,203,77,151,104,211,104,255,141,194,220,20,239,76,243,77, -161,219,211,191,1,5,90,5,171,162,173,221,167,16,252,163,253,253,2,227,77,204,102,203,152,184,35,48,135,68, -85,139,73,95,11,246,22,82,72,198,236,71,17,237,121,71,187,191,194,129,208,248,32,75,54,192,28,227,188,143, -25,157,184,230,204,152,226,65,210,106,159,2,154,245,24,126,53,81,214,63,49,36,176,34,217,73,48,111,110,23, -105,190,216,10,61,10,4,96,62,16,220,141,178,137,109,90,83,2,245,12,126,228,10,7,28,215,134,145,148,242, -87,254,209,79,240,12,106,11,157,2,32,47,178,174,138,254,225,213,254,28,112,40,232,176,188,194,150,66,141,247, -200,180,54,196,254,124,119,216,85,214,244,56,251,18,21,154,179,8,134,64,232,152,199,73,74,150,33,66,210,1, -89,230,132,184,216,69,164,200,226,98,79,5,182,59,14,204,190,236,161,141,228,68,142,81,219,163,19,18,188,203, -68,230,95,22,79,25,224,244,83,226,5,223,118,222,243,248,223,118,195,227,186,47,98,53,144,179,33,32,116,14, -103,19,24,85,136,199,199,157,33,179,194,113,170,104,29,141,116,2,6,13,103,51,120,98,247,217,140,60,216,53, -108,36,207,224,113,104,78,159,34,102,230,80,158,12,77,210,8,33,55,11,58,2,97,54,51,144,152,86,107,165, -191,102,181,31,85,202,174,27,11,85,114,83,88,166,184,96,245,124,162,18,247,158,130,43,69,40,196,156,239,151, -214,173,129,249,69,48,183,226,233,235,8,9,53,222,192,37,224,20,23,84,78,58,106,140,80,10,183,139,78,205, -23,39,240,207,220,221,152,230,254,224,66,230,11,65,13,234,27,99,26,179,165,224,68,15,15,118,254,24,138,34, -25,116,165,99,191,163,129,193,80,19,151,34,244,0,0,88,28,151,18,196,91,242,77,103,92,97,185,8,103,238, -136,233,219,93,231,249,98,106,37,73,96,142,111,203,194,55,78,125,97,1,191,109,242,87,220,12,50,247,109,196, -108,214,1,9,58,230,77,129,84,26,120,92,244,169,71,163,118,93,33,85,117,230,164,62,60,17,175,1,89,111, -217,100,52,255,248,56,26,156,74,77,182,30,205,132,66,49,155,77,123,19,79,21,106,53,247,33,104,121,26,195, -200,238,202,26,213,250,155,110,191,194,162,238,227,38,122,165,83,100,225,29,109,69,164,29,218,158,216,40,117,169, -17,7,125,218,62,215,70,133,22,197,117,93,211,178,111,171,150,67,229,13,136,100,212,84,111,179,39,103,208,114, -34,229,5,217,123,25,12,57,239,158,125,216,117,99,153,171,5,31,183,198,63,119,177,2,125,97,60,142,17,179, -51,251,54,158,172,159,145,160,91,106,237,26,180,69,169,183,163,81,162,244,79,69,93,47,177,25,230,145,102,180, -10,171,21,148,67,149,139,1,73,197,204,191,190,101,12,100,8,6,223,192,124,223,229,128,196,188,211,15,11,125, -207,48,166,187,150,174,47,75,153,126,129,201,175,143,142,56,41,46,93,174,23,2,118,78,2,8,199,192,193,222, -158,227,185,244,244,88,0,225,242,227,69,60,24,198,189,233,31,225,212,166,212,29,119,35,65,167,201,73,134,251, -96,148,193,212,146,225,196,113,250,26,7,2,224,240,208,231,84,148,8,195,73,248,51,248,214,177,75,50,203,55, -26,89,132,46,159,247,77,63,224,194,160,5,209,64,80,2,173,248,14,216,69,196,228,2,162,131,163,237,95,103, -129,153,112,123,181,243,21,48,199,119,27,174,119,158,111,52,178,67,179,162,43,98,37,117,135,135,28,3,42,119, -139,17,197,103,79,225,177,133,70,124,162,125,74,55,152,154,200,179,208,184,206,33,215,135,135,11,105,211,159,105, -119,3,165,254,142,168,96,250,232,193,227,33,24,200,253,167,176,119,94,101,122,84,249,173,236,151,49,60,40,194, -109,28,71,20,35,109,224,156,25,10,155,185,197,164,115,20,164,118,28,164,118,55,72,103,51,210,61,53,20,79, -179,217,103,127,144,109,71,142,186,124,214,160,79,14,41,55,82,85,203,17,2,89,75,7,181,48,42,58,72,190, -21,122,231,224,209,120,240,68,72,232,189,131,71,243,113,228,232,193,95,33,207,163,21,124,122,62,177,225,72,169, -161,183,105,214,140,211,233,50,234,87,226,172,145,35,241,36,192,224,129,218,49,27,170,172,233,176,235,17,246,136, -75,102,79,35,13,157,177,99,49,121,141,241,34,12,182,136,82,137,61,98,154,172,113,175,40,181,59,112,130,229, -157,236,134,67,197,112,84,49,28,86,12,13,17,151,98,45,27,31,84,129,79,44,229,145,213,48,243,12,183,97, -17,185,225,62,134,113,224,216,135,238,224,143,191,140,27,118,172,80,26,49,116,9,205,42,28,255,115,72,251,86, -32,190,158,130,164,107,78,131,237,202,20,151,167,31,245,173,70,173,15,128,112,166,98,83,22,173,165,151,130,81, -230,188,246,167,157,92,242,77,104,49,72,232,104,185,137,213,100,16,48,126,255,157,196,76,142,5,143,240,25,247, -231,196,110,27,15,124,120,63,200,23,79,242,51,230,229,184,30,16,175,92,163,233,159,188,16,132,162,159,20,235, -117,253,192,28,29,235,97,134,217,161,13,141,192,168,13,253,155,223,107,111,210,56,207,108,136,122,19,203,238,149, -175,129,70,222,250,39,235,143,98,185,73,146,164,31,9,122,193,139,173,174,184,2,143,108,19,127,55,103,64,115, -206,69,120,139,226,194,108,183,97,83,245,112,119,180,234,206,202,41,207,6,143,255,55,37,22,124,236,12,27,2, -23,90,21,185,217,198,214,58,95,8,67,63,138,126,106,121,44,26,233,250,70,114,158,47,124,59,17,55,250,193, -235,252,23,223,128,18,228,121,20,116,2,61,62,34,121,43,202,136,89,228,103,176,16,104,144,136,85,201,162,99, -43,30,196,181,184,17,119,226,155,120,35,206,197,153,184,39,239,87,190,161,168,39,248,139,137,74,34,130,74,131, -134,94,57,92,107,112,192,169,54,69,139,224,28,98,213,128,120,120,210,202,79,236,18,157,160,8,188,28,97,49, -50,112,45,79,134,243,187,38,145,193,126,70,82,106,132,120,169,184,40,209,148,229,105,149,149,104,67,155,151,11, -89,224,15,114,47,137,251,138,103,181,172,182,196,197,211,222,236,210,222,237,14,73,227,111,59,83,92,188,193,157, -156,203,203,194,221,208,151,0,86,139,138,103,111,78,207,103,51,155,191,89,160,82,5,62,178,55,40,219,135,253, -185,172,143,78,196,153,172,176,60,156,191,144,111,102,179,51,252,37,228,243,128,124,182,200,206,143,142,196,25,86, -141,27,28,72,131,11,226,142,32,69,144,215,128,70,13,142,2,203,7,175,208,101,177,22,215,35,213,206,14,79, -104,235,103,89,137,252,179,18,217,221,135,141,183,242,33,249,10,142,221,115,113,77,54,104,135,203,191,163,147,180, -21,15,137,165,85,81,6,238,45,82,183,167,242,60,107,113,11,247,210,230,237,66,148,3,139,114,18,169,103,51, -130,143,78,230,236,134,216,26,66,188,35,72,17,228,245,166,81,131,35,82,140,100,143,100,241,148,208,88,144,89, -162,204,232,177,242,64,97,87,62,103,222,95,196,89,40,130,136,115,8,32,26,17,103,65,16,67,78,60,29,124, -107,164,73,108,173,74,96,199,2,253,76,167,83,17,39,250,106,97,198,87,231,24,188,190,228,121,41,149,104,186, -138,148,99,156,47,228,239,200,63,38,133,23,124,45,28,43,252,78,122,110,97,98,231,176,119,255,109,166,226,79, -131,113,84,124,55,55,67,5,105,99,118,70,188,118,156,153,168,117,59,186,216,237,171,242,119,210,48,10,37,233, -255,101,6,174,98,6,174,246,51,176,145,24,100,198,251,204,18,130,148,53,32,57,33,179,231,100,113,81,96,50, -22,167,81,205,172,64,15,23,167,195,203,187,205,139,5,170,219,226,99,94,227,143,223,24,141,120,90,188,144,3, -30,134,67,65,170,149,60,68,12,242,180,99,158,138,104,7,87,201,58,218,69,69,32,170,32,44,130,49,34,196, -56,94,26,62,142,139,18,195,105,67,108,229,42,11,17,81,137,7,138,8,175,93,148,84,19,194,131,112,172,18, -197,78,8,124,221,57,124,130,195,128,97,223,136,33,193,187,243,225,3,72,144,47,254,254,222,21,53,28,24,40, -170,131,149,105,238,14,78,127,216,192,246,69,242,247,65,23,237,198,23,110,195,97,130,153,130,230,223,196,113,234, -133,244,30,219,70,37,95,49,112,44,172,65,81,222,8,232,143,45,225,226,205,236,248,254,243,87,248,127,138,115, -255,43,113,255,49,150,6,201,45,60,64,213,95,40,66,114,127,131,132,129,74,196,79,46,204,10,131,139,110,110, -165,148,38,157,224,99,130,89,61,104,240,228,182,17,115,101,212,224,15,42,69,146,231,111,252,77,60,76,143,231, -193,133,134,161,204,52,102,223,228,150,154,234,208,74,125,0,54,125,127,211,220,79,123,45,130,234,91,170,79,177, -86,140,172,21,183,20,30,35,115,88,215,55,230,244,30,25,219,110,166,68,141,98,85,151,118,248,152,205,80,25, -149,159,248,49,62,210,73,24,76,104,192,103,51,149,255,217,47,225,67,88,217,181,44,195,206,41,248,95,13,71, -188,146,150,237,55,95,138,211,61,149,191,76,232,123,184,26,19,186,62,85,49,249,234,161,135,107,164,194,174,220, -111,154,204,221,196,122,132,219,152,208,74,231,217,188,22,141,160,241,162,179,74,142,23,138,219,125,15,235,231,189, -153,43,129,228,11,105,130,75,213,233,49,127,98,218,206,100,133,108,190,231,229,98,215,203,197,190,151,11,52,108, -221,123,249,150,25,158,31,83,153,82,35,95,95,210,91,250,224,236,166,119,118,241,125,215,26,55,238,241,187,42, -160,156,236,240,27,39,243,41,110,162,185,95,181,117,109,75,3,160,167,98,90,216,7,93,210,179,117,205,170,41, -91,219,193,235,186,120,64,176,188,129,242,22,42,130,194,231,123,90,239,46,238,9,82,182,88,214,126,29,93,120, -167,27,108,97,21,189,184,226,196,141,170,42,47,66,233,10,28,24,236,103,194,130,178,119,197,26,159,117,211,208, -227,14,89,169,117,13,30,116,158,151,110,194,247,107,2,199,44,155,181,103,72,186,89,165,107,165,105,146,106,91, -163,235,7,2,209,191,202,64,229,65,122,55,244,160,133,226,174,6,107,61,88,67,73,50,22,162,118,190,191,121, -15,142,229,211,178,46,172,165,111,233,136,67,93,120,228,123,77,124,195,222,174,154,79,131,34,202,98,135,228,181, -187,244,138,70,165,206,59,165,176,185,111,28,117,38,99,33,74,107,48,191,124,184,188,64,108,234,250,95,133,191, -155,224,200,175,124,192,41,132,99,84,77,145,188,112,114,247,91,154,31,197,191,61,176,112,21,179,233,149,79,195, -62,166,130,254,102,243,83,99,82,82,124,186,229,162,253,159,243,73,199,182,216,245,105,186,249,33,125,98,138,151, -31,63,124,184,190,74,79,196,249,213,187,143,31,210,147,173,240,238,37,220,104,165,243,203,159,105,62,58,149,150, -70,134,123,255,234,175,231,239,60,225,200,173,132,179,107,209,79,231,175,223,92,19,86,116,55,161,12,62,138,226, -197,135,55,159,63,156,253,245,205,25,162,238,52,98,110,247,59,88,235,114,88,236,37,174,198,196,109,188,97,166, -115,157,187,197,92,39,63,164,33,123,82,221,229,83,53,118,232,18,208,26,160,244,186,245,142,171,85,121,75,57, -177,172,35,216,189,222,221,129,110,113,228,211,75,233,8,53,158,42,82,99,249,170,154,123,29,160,214,231,69,211, -90,160,185,8,223,53,223,32,194,68,28,65,12,244,8,123,194,117,163,80,172,33,210,97,68,196,195,8,201,135, -1,49,24,70,158,133,107,90,204,124,93,69,144,168,35,108,93,97,28,69,231,141,147,155,223,209,59,183,169,255, -223,19,254,237,233,254,254,62,185,255,135,164,49,95,127,60,249,183,127,251,183,31,253,234,84,252,126,87,63,135, -242,249,242,130,208,254,245,71,141,193,102,215,69,9,211,237,224,177,175,110,247,67,143,142,45,150,145,46,130,74, -218,240,238,71,221,174,116,185,193,98,159,104,180,248,123,181,68,209,95,69,43,41,182,67,83,87,159,154,199,199, -230,84,101,225,18,34,175,233,252,210,121,179,64,9,135,135,162,193,187,83,242,151,210,45,108,61,129,231,23,144, -20,2,25,55,248,42,165,142,142,252,133,19,157,125,49,156,74,169,78,237,188,153,35,179,61,5,82,34,109,22, -105,17,84,240,210,233,118,219,130,113,47,125,244,48,157,163,228,133,40,249,54,190,124,42,228,221,240,168,115,198, -217,164,197,47,89,45,125,38,242,106,211,55,44,122,38,198,135,4,221,112,161,238,145,26,87,6,157,103,51,100, -79,195,176,151,94,97,28,31,29,153,29,85,179,231,245,66,118,248,24,35,114,177,143,137,188,20,237,0,145,205, -130,36,47,252,94,124,19,211,242,77,27,95,41,51,242,228,74,54,193,24,43,50,70,235,223,217,116,190,90,136, -21,30,246,219,168,95,75,175,132,97,183,100,238,50,124,139,225,8,54,167,229,108,86,158,42,190,9,220,106,81, -201,19,241,16,120,30,30,174,78,205,108,134,172,103,179,9,99,15,145,15,242,231,60,126,231,120,152,72,89,30, -86,60,227,21,218,141,46,24,94,148,71,77,180,205,181,36,169,209,95,229,247,252,117,221,249,11,208,11,88,168, -74,248,207,222,174,116,177,109,28,73,255,239,167,80,216,222,25,114,2,201,146,29,103,186,169,208,90,59,113,119, -231,206,196,233,83,227,77,104,17,178,152,166,72,133,132,36,187,21,189,193,190,192,254,218,87,220,71,216,250,112, -16,160,44,121,238,233,195,38,129,2,80,40,20,10,117,129,126,12,185,221,164,154,6,169,87,71,150,218,101,91, -27,87,206,13,143,188,247,123,79,126,122,255,228,236,197,217,183,39,239,206,60,187,13,166,162,14,33,173,214,27, -206,165,31,252,148,148,136,50,74,153,136,162,58,41,110,64,93,135,231,190,96,224,12,209,25,167,101,37,36,114, -3,76,95,11,52,218,87,107,86,169,24,137,54,10,75,9,238,28,76,145,231,57,54,199,172,25,186,51,202,174, -163,11,103,59,243,242,4,159,206,50,28,23,214,180,233,212,167,97,196,89,62,200,148,43,44,119,241,117,30,195, -109,245,107,36,27,13,108,66,80,61,122,58,69,138,31,178,228,252,138,116,204,10,10,93,128,108,160,32,4,156, -83,24,32,71,51,231,18,148,234,13,118,169,45,142,82,55,210,117,165,92,156,203,52,39,233,218,49,3,218,99, -133,44,123,126,65,189,203,223,230,164,176,234,109,21,117,157,124,41,56,160,251,149,85,113,211,136,15,43,56,226, -85,60,24,158,120,228,251,209,35,19,120,56,91,208,88,72,213,227,68,57,63,101,239,69,195,231,62,226,54,7, -71,165,56,112,205,106,39,66,148,233,229,92,32,18,19,114,236,56,167,132,185,1,203,155,154,219,130,85,181,171, -151,87,231,104,101,123,114,75,89,229,244,182,103,50,172,118,161,163,245,21,116,85,107,29,110,188,120,230,160,35, -109,172,166,5,145,7,3,159,15,63,236,237,237,173,196,250,3,36,79,247,130,213,5,79,98,17,163,16,246,74, -216,0,171,101,229,102,119,214,134,67,87,125,126,155,234,130,161,38,162,125,87,118,70,164,77,19,126,24,128,165, -129,222,236,91,219,184,36,94,58,238,27,99,68,26,237,140,142,254,74,155,241,172,108,20,230,42,248,151,50,117, -152,165,210,211,82,26,70,74,31,101,253,212,181,149,74,146,193,253,123,5,157,119,50,119,50,39,141,61,205,73, -237,253,252,89,12,11,48,232,12,204,82,200,200,99,194,169,103,222,146,39,225,218,118,94,237,236,188,162,206,89, -76,118,23,250,218,62,138,62,117,98,58,183,98,103,180,110,192,100,77,92,251,183,156,236,155,203,250,192,199,185, -33,2,3,49,144,140,173,82,174,137,85,68,223,137,181,161,172,111,67,10,194,198,44,76,243,10,217,212,80,173, -35,209,183,122,158,129,34,43,215,2,228,145,113,178,35,54,42,23,136,9,108,102,60,169,92,73,150,42,242,195, -141,152,7,130,8,17,233,36,129,74,51,55,165,80,205,120,41,96,222,214,148,37,48,219,140,38,22,161,33,43, -233,24,66,21,112,192,78,178,45,89,73,40,160,239,210,166,58,57,187,10,116,2,78,216,23,150,99,109,98,46, -137,55,29,118,168,77,212,232,71,180,169,95,153,173,9,2,166,128,5,114,112,73,177,192,47,159,215,197,11,189, -42,200,214,43,165,12,101,165,197,101,106,100,206,166,47,10,101,14,211,159,55,246,113,238,184,121,239,85,152,191, -116,26,154,69,188,231,216,207,102,25,37,254,172,162,94,251,175,144,66,45,223,17,9,164,146,134,204,169,241,173, -24,104,194,210,136,120,124,101,151,209,205,168,78,115,149,122,125,207,151,207,130,246,191,246,253,91,43,44,48,58, -97,191,132,98,181,196,132,51,38,35,221,40,96,57,82,124,55,58,21,219,250,89,209,178,52,87,33,176,250,166, -217,90,80,61,26,3,21,206,40,14,57,27,166,126,71,20,47,138,37,47,31,199,21,247,3,163,143,248,251,109, -127,24,183,127,187,8,246,175,24,214,3,41,179,4,250,253,108,102,64,29,178,205,248,102,34,169,232,208,22,153, -82,127,213,44,75,133,191,255,231,234,254,190,61,201,74,153,234,107,211,159,72,151,43,73,70,104,57,14,209,71, -67,93,93,101,220,71,6,84,83,0,114,187,66,76,171,113,152,104,140,32,145,220,204,32,156,222,238,106,142,74, -54,128,125,234,250,122,156,26,102,233,194,228,4,83,213,50,160,110,69,188,237,5,41,201,39,55,89,67,212,78, -218,195,0,64,69,30,122,134,14,227,200,212,30,6,125,98,85,115,134,53,37,252,152,70,101,57,106,111,9,255, -49,230,126,123,164,94,87,15,53,138,103,132,35,223,54,34,193,220,57,36,118,227,238,81,81,187,101,224,3,61, -238,150,241,14,130,38,39,177,36,74,132,84,70,198,146,166,247,18,18,115,166,217,77,116,59,183,146,78,198,176, -234,239,192,23,65,13,63,33,210,35,37,71,30,236,64,50,9,24,245,74,106,21,52,244,109,248,30,73,124,99, -33,74,34,145,60,9,76,221,17,77,222,46,162,63,138,54,27,205,72,160,134,30,244,168,56,26,169,137,136,128, -94,239,149,132,129,63,143,198,2,74,178,185,69,17,0,176,136,178,26,16,239,25,29,50,121,145,112,0,116,244, -21,131,202,247,218,30,85,143,224,34,141,28,108,10,153,35,109,185,19,167,45,94,172,67,101,0,141,136,52,167, -140,228,94,65,255,199,3,62,60,23,52,24,41,37,164,162,204,169,129,81,79,234,213,41,33,147,225,66,187,126, -61,246,61,154,207,113,187,247,187,223,77,196,80,232,157,137,50,162,60,29,49,131,27,69,86,169,157,73,90,197, -4,70,199,61,10,182,156,184,239,27,158,127,169,32,113,121,11,101,253,65,167,26,169,244,73,36,41,190,137,17, -41,105,190,251,52,46,245,14,18,150,87,92,72,225,96,94,72,196,19,107,106,21,70,42,6,246,104,228,204,83, -64,30,195,232,227,244,106,94,194,141,136,43,40,210,251,6,7,45,219,217,118,52,47,75,98,173,119,187,186,160, -82,155,11,77,71,185,81,211,225,16,202,251,86,194,193,199,35,93,247,180,18,121,199,184,50,93,29,240,131,213, -35,1,88,218,108,230,74,105,127,57,43,25,15,194,250,77,102,33,142,144,90,145,157,206,47,169,59,45,130,214, -121,148,119,222,239,77,138,74,208,14,232,204,98,76,0,230,5,222,80,234,8,247,31,173,120,84,17,104,71,111, -177,7,99,63,160,46,253,90,30,230,181,186,84,95,70,49,199,41,116,185,26,113,192,243,136,248,15,106,172,250, -217,192,134,179,52,170,213,35,98,96,249,150,207,167,151,188,244,112,84,186,239,154,255,69,113,46,161,97,99,101, -74,156,23,74,127,38,22,47,228,246,121,167,110,54,29,14,138,78,66,212,140,68,88,108,218,138,208,192,164,25, -38,144,239,253,86,137,114,86,104,145,0,141,193,163,1,111,107,112,3,48,169,181,9,77,255,40,117,77,89,97, -165,189,210,216,244,212,46,139,2,185,51,94,96,198,52,185,220,106,174,91,52,17,165,22,233,105,10,90,1,119, -137,138,230,18,21,81,65,0,74,251,42,148,113,164,140,237,252,118,86,139,8,106,13,27,241,205,24,219,103,211, -62,65,171,152,251,133,228,143,50,104,162,228,12,3,217,239,12,84,184,113,92,204,204,78,150,101,53,227,40,74, -199,131,220,129,30,92,42,205,189,10,194,43,117,188,22,65,232,19,102,212,62,96,170,50,192,12,11,71,116,155, -21,151,67,109,78,65,22,214,131,218,149,22,65,95,61,170,36,66,179,238,102,177,242,8,12,128,132,110,215,161, -193,145,183,195,243,68,190,193,184,221,240,198,8,230,130,3,79,177,222,34,7,99,163,145,152,236,29,210,25,107, -77,71,89,67,98,211,26,50,12,48,76,245,90,229,120,154,203,115,210,47,12,218,244,64,135,130,254,221,11,104, -7,225,224,49,204,18,88,135,179,187,83,2,174,50,144,138,96,135,161,74,36,47,163,88,173,76,76,199,84,89, -195,205,155,44,171,226,146,127,145,65,117,103,155,131,12,138,144,140,181,141,226,56,24,196,33,130,212,52,172,90, -163,26,91,134,75,66,238,225,53,138,148,100,192,76,98,68,194,92,89,128,119,108,86,122,30,13,116,31,113,16, -234,167,93,210,97,20,4,245,10,150,142,237,168,87,80,121,9,87,77,127,139,216,240,183,108,122,244,196,176,106, -106,168,111,155,214,138,73,105,113,162,129,77,47,89,237,12,35,21,127,23,226,158,39,119,175,193,69,241,79,234, -50,90,230,38,27,103,72,246,203,40,207,102,229,154,6,230,16,42,76,113,28,21,86,124,131,172,188,127,15,174, -207,108,16,15,54,246,66,137,173,187,49,243,18,138,66,12,222,171,125,146,138,147,104,33,215,234,113,75,11,115, -37,173,188,208,118,11,217,206,188,246,2,230,59,189,128,42,212,65,187,80,234,24,196,135,41,226,63,121,71,70, -75,124,153,82,154,143,38,113,126,197,163,74,135,192,43,173,77,104,202,215,132,54,229,29,244,81,13,58,112,252, -164,210,223,246,13,21,188,229,113,194,203,126,218,41,233,225,164,194,1,254,253,219,23,126,41,175,75,228,184,17, -219,116,91,162,221,211,105,76,90,104,239,33,235,61,36,91,191,83,149,163,8,237,171,121,38,88,182,165,85,44, -91,189,30,143,85,36,245,113,156,47,226,74,183,135,207,89,114,199,53,205,250,32,161,41,199,131,78,82,198,75, -53,72,198,186,244,175,30,202,164,226,196,3,180,146,0,192,215,119,64,176,175,107,109,221,100,60,226,22,167,202, -69,155,203,109,100,120,124,116,63,122,96,128,147,72,214,33,131,232,190,121,186,223,115,158,15,46,30,69,135,95, -29,14,122,33,165,57,235,141,71,44,64,250,254,26,255,176,51,97,238,171,214,74,211,144,66,155,28,57,56,190, -12,150,187,4,73,193,161,248,17,165,144,27,248,17,197,107,87,144,146,244,236,61,220,63,144,2,212,178,125,218, -207,168,184,157,130,237,157,138,130,224,139,71,162,95,80,25,238,238,164,127,232,61,188,159,177,12,191,124,130,239, -181,145,207,228,212,152,66,11,144,109,3,200,36,64,106,111,30,174,217,41,55,243,196,166,73,230,164,59,251,82, -1,179,211,75,85,82,222,56,43,144,19,184,47,234,230,144,251,100,41,224,151,244,98,224,193,100,144,178,124,205, -80,118,34,55,200,41,132,212,87,65,135,194,163,190,136,142,105,223,86,252,41,109,140,250,65,116,62,22,105,14, -81,65,102,154,163,87,193,90,12,228,189,221,103,145,87,141,242,238,213,199,158,199,246,184,121,233,122,236,177,204, -131,16,108,206,49,210,95,200,176,149,17,2,206,22,18,118,51,183,118,192,67,62,64,62,42,41,33,47,68,244, -88,12,8,8,183,11,7,184,185,24,242,240,93,223,222,115,20,218,195,107,82,164,27,9,191,175,54,98,174,216, -48,63,242,248,87,36,23,86,242,141,38,141,32,253,168,113,65,222,199,161,214,184,36,63,111,201,211,50,151,177, -156,185,17,9,131,142,63,39,200,53,227,65,95,101,184,85,80,226,169,73,78,61,250,129,19,253,45,125,146,152, -85,103,158,27,52,11,72,27,233,158,195,179,69,57,149,131,175,104,94,133,52,233,225,151,147,69,107,35,43,196, -192,224,103,118,238,156,251,150,27,70,200,239,152,251,35,182,90,164,85,10,131,228,87,12,64,167,86,168,219,205, -37,4,17,220,78,62,191,170,219,23,117,46,74,204,230,72,8,227,131,142,254,142,133,188,39,57,24,220,147,153, -152,153,79,245,129,10,168,213,109,221,188,110,45,117,7,152,209,40,8,5,119,179,150,18,121,236,39,116,146,140, -73,137,167,255,201,62,151,134,120,234,39,4,205,198,81,2,77,85,81,85,87,7,44,94,175,193,131,191,10,138, -86,245,198,215,159,142,62,30,16,27,190,118,94,15,61,246,198,121,37,190,124,233,188,30,152,131,242,156,71,51, -223,123,148,164,139,99,249,195,163,17,193,139,74,171,182,14,94,98,32,164,146,243,106,82,100,73,216,249,122,29, -40,79,101,192,134,37,75,65,29,16,35,139,10,71,8,221,191,199,149,116,43,144,156,170,158,229,142,163,53,25, -99,54,8,174,14,94,73,11,6,250,198,200,201,168,42,242,115,46,94,112,162,131,125,246,87,210,246,14,11,121, -93,107,94,133,49,17,70,87,147,68,40,211,107,64,59,175,36,171,217,220,248,98,93,162,23,209,57,156,42,56, -178,173,78,74,56,138,141,52,132,185,187,107,7,83,238,207,113,114,139,136,216,231,182,163,199,68,237,51,30,35, -66,47,135,75,65,150,117,64,224,123,123,117,80,63,114,170,216,30,113,207,175,68,198,115,250,125,229,127,228,108, -117,69,132,71,62,157,53,156,21,233,214,204,120,43,67,77,192,38,31,201,41,221,68,110,172,206,76,39,217,141, -45,199,15,175,14,59,210,119,43,124,174,124,28,56,251,200,21,4,244,19,160,111,83,25,212,4,110,1,50,154, -82,87,78,41,33,102,51,94,235,61,255,134,145,241,254,90,172,91,123,43,205,16,205,134,23,3,47,38,18,19, -209,66,207,91,127,8,104,60,98,47,26,215,118,81,160,139,55,178,139,138,196,31,233,47,109,124,121,6,13,84, -183,198,101,48,240,204,83,221,89,33,59,235,195,177,101,38,125,43,55,227,66,201,244,39,114,139,44,46,31,60, -152,30,116,205,22,121,39,228,22,161,40,153,40,114,108,144,55,17,111,210,94,68,239,132,77,74,221,243,5,123, -66,211,223,19,244,128,251,237,210,57,136,144,220,102,94,158,0,102,114,224,143,114,224,203,108,250,112,116,77,91, -245,212,121,165,125,253,214,121,173,119,238,15,10,173,105,156,230,199,143,148,224,166,135,253,250,105,92,20,52,59, -224,251,243,109,124,127,16,80,242,34,55,132,139,115,160,145,132,64,243,160,145,131,90,209,195,121,60,190,43,141, -114,48,213,106,172,132,140,114,98,132,156,125,148,188,157,155,185,43,69,61,160,170,138,157,202,170,74,87,41,124, -93,162,188,229,228,20,56,252,234,227,215,61,162,193,47,194,188,16,5,172,131,198,70,37,237,102,185,197,235,10, -128,142,80,127,171,67,84,125,164,192,244,19,56,87,255,156,222,27,65,118,58,182,230,56,96,131,250,210,107,74, -165,164,237,171,10,225,84,100,20,32,17,80,208,116,231,196,137,219,84,130,129,192,157,216,240,21,253,112,46,254, -138,70,36,96,88,177,18,146,214,112,154,193,79,5,94,228,129,240,73,68,170,9,244,31,171,42,234,243,254,242, -188,160,12,66,165,10,48,121,251,141,231,137,154,125,85,119,170,74,17,86,173,164,210,126,115,174,174,79,246,6, -37,46,158,230,245,125,231,234,54,161,117,86,96,125,79,187,159,215,215,202,74,220,101,155,164,99,104,3,107,160, -203,190,113,76,149,33,161,44,143,88,103,72,2,146,151,175,138,138,235,21,178,231,195,157,67,231,62,46,80,235, -166,145,79,90,178,84,30,43,245,196,114,255,128,132,212,182,46,100,3,211,199,97,0,94,100,207,106,138,174,214, -84,94,103,64,17,38,101,202,201,202,236,237,119,89,105,60,125,48,9,148,38,61,28,218,238,48,120,187,221,58, -166,24,91,197,197,187,116,138,156,49,191,80,122,79,124,243,249,243,33,63,12,214,228,54,54,167,147,108,130,139, -116,14,57,30,29,224,93,246,137,96,219,70,22,225,39,197,10,180,44,180,15,180,222,21,22,68,232,172,230,68, -210,118,202,91,147,6,77,230,1,49,37,180,16,115,112,175,228,40,161,172,195,49,3,219,221,12,173,224,217,102, -63,22,56,147,12,130,163,119,231,104,76,109,194,93,29,68,25,108,73,65,224,35,210,209,84,70,238,72,186,183, -231,195,158,124,161,95,232,94,117,179,117,4,240,112,56,167,222,98,205,228,210,102,30,116,64,58,89,226,203,89, -187,138,173,12,65,198,195,185,137,35,239,240,152,35,54,182,226,57,153,213,174,151,91,102,179,24,161,136,62,220, -189,141,2,201,194,216,226,120,177,57,207,116,170,127,103,56,204,221,176,207,204,214,111,94,28,169,12,3,200,29, -148,16,119,67,180,243,206,171,215,175,206,34,15,118,173,71,156,253,227,249,233,211,87,39,111,127,142,188,101,69, -195,198,229,13,74,191,127,243,228,228,29,65,169,235,172,40,121,241,250,228,201,211,87,223,70,30,44,106,120,112, -25,15,2,63,225,200,122,48,220,240,92,30,51,70,55,252,129,71,207,192,126,41,143,190,19,62,157,201,31,150, -248,198,218,222,74,167,225,100,197,40,198,156,149,35,125,255,195,122,89,125,8,216,183,91,118,186,74,116,53,34, -173,75,143,36,35,241,8,35,109,88,176,24,207,61,122,156,179,145,129,24,179,68,66,208,26,219,251,80,7,71, -15,131,11,165,86,46,217,75,162,209,75,34,14,110,245,236,0,5,111,101,126,23,64,19,54,5,80,162,232,23, -176,69,244,13,137,106,142,171,95,67,239,177,218,68,146,44,230,69,230,48,63,129,97,99,234,236,187,73,102,126, -26,125,143,78,152,55,229,85,21,95,33,209,170,169,241,47,163,103,231,175,95,117,164,169,233,63,37,109,70,234, -68,159,63,123,171,53,193,86,203,20,183,194,151,29,190,80,233,76,113,197,73,221,25,23,94,248,73,119,51,53, -57,195,50,64,83,17,254,193,112,217,81,58,49,246,5,53,46,11,33,215,33,96,35,122,187,44,211,171,137,200, -9,31,232,104,129,150,201,159,63,103,84,55,203,230,87,105,78,21,230,145,172,144,184,46,39,123,217,247,40,61, -152,183,164,55,8,243,239,113,72,198,194,71,92,143,162,95,201,238,229,120,201,78,9,221,211,0,125,99,138,180, -163,124,245,132,11,56,151,37,217,159,235,154,207,78,34,189,124,171,220,95,201,47,36,44,89,50,47,229,44,194, -151,56,49,172,228,148,2,90,113,16,53,169,147,45,174,252,31,120,199,124,55,71,233,209,146,66,181,34,189,50, -100,9,43,102,105,18,206,153,212,70,149,205,16,142,25,41,143,85,120,195,52,101,194,84,63,133,5,112,120,107, -186,40,241,118,106,123,25,225,253,169,211,81,130,130,23,232,235,53,158,222,168,78,98,86,221,84,130,79,207,149, -9,51,65,213,185,91,50,85,178,43,229,82,76,49,195,106,69,142,122,30,46,154,37,104,113,54,92,248,193,5, -19,69,92,137,240,100,189,102,152,185,209,50,235,201,15,175,252,95,20,81,150,19,167,152,82,135,252,224,86,19, -195,169,207,27,122,237,146,253,2,149,141,126,75,105,7,214,197,74,209,250,210,58,178,199,155,247,78,46,168,116, -205,126,225,17,202,191,227,180,58,1,251,73,52,237,77,226,29,18,43,127,82,165,177,250,116,227,151,251,210,91, -89,148,199,250,55,116,88,113,203,78,229,185,45,82,151,9,80,42,80,250,251,71,105,75,134,122,113,169,169,45, -191,231,214,162,7,185,252,188,157,241,177,240,142,127,31,176,252,47,195,98,125,21,112,149,187,130,176,116,6,135, -51,85,127,55,177,196,38,105,77,211,60,234,182,166,241,117,116,112,116,4,232,226,142,129,224,54,109,203,52,73, -53,78,118,7,172,40,227,106,34,161,70,119,245,152,21,179,217,77,59,73,171,95,37,108,124,215,52,249,184,228, -186,207,185,157,211,93,75,49,86,96,197,12,44,136,217,37,185,235,141,229,209,47,56,33,32,231,141,91,160,138, -20,111,156,65,1,119,246,26,129,241,90,84,201,123,135,101,164,77,91,62,80,167,180,20,149,42,190,152,142,111, -252,149,148,138,180,215,136,111,198,48,16,83,53,244,181,128,174,176,66,43,181,231,20,47,14,154,163,65,44,225, -210,227,8,214,42,4,165,103,238,222,172,32,149,194,209,58,0,199,102,232,211,237,108,139,136,51,167,8,188,140, -200,144,67,103,184,250,15,2,81,67,185,23,125,79,185,162,91,178,194,200,206,53,43,104,146,8,65,105,109,114, -28,241,129,67,133,207,159,201,1,28,141,6,227,99,56,131,199,247,233,255,71,20,253,59,12,199,237,30,186,118, -100,16,60,69,119,19,202,83,108,236,177,36,45,149,204,8,71,3,79,49,117,232,201,141,0,135,24,139,35,34, -31,77,65,74,58,208,67,61,128,34,108,174,235,172,196,164,122,251,2,24,35,34,182,139,152,22,225,184,33,198, -212,233,161,196,142,189,120,186,170,187,249,89,117,163,205,197,186,198,61,70,71,209,79,84,193,136,84,174,17,155, -68,99,231,213,138,174,17,219,227,176,58,199,236,45,253,62,167,223,154,65,54,165,41,210,96,104,70,70,38,42, -171,212,162,246,39,72,203,245,166,192,252,91,49,255,217,96,190,27,85,160,184,155,156,106,121,20,21,119,227,50, -230,170,185,113,137,108,237,226,94,221,5,246,64,3,4,7,161,186,150,172,0,140,211,198,129,170,64,40,227,160, -11,19,233,68,242,228,45,180,196,84,152,227,240,246,150,74,112,155,26,255,221,69,242,97,147,116,60,191,147,116, -207,168,146,156,85,82,36,71,24,210,164,72,221,79,58,141,100,21,253,173,178,216,167,92,40,77,236,92,108,117, -190,25,82,201,169,26,50,99,58,64,204,14,48,206,237,81,121,238,223,72,254,74,58,184,79,99,220,88,55,106, -204,40,233,164,196,100,55,198,199,117,238,143,104,240,55,108,85,228,143,17,126,11,101,183,216,140,188,172,210,74, -180,213,240,77,193,162,166,210,154,66,53,171,8,103,146,50,245,85,192,222,81,183,235,162,234,109,0,172,3,25, -217,55,104,141,53,90,150,39,204,122,176,38,233,43,170,105,210,122,59,238,5,132,254,14,166,20,244,188,54,8, -236,108,222,221,213,60,119,155,111,69,178,252,59,249,163,142,252,108,229,147,160,15,214,117,245,61,226,27,54,7, -243,220,166,162,149,141,187,40,57,223,141,164,37,236,63,182,253,135,183,232,154,250,187,168,90,104,170,54,154,100, -59,128,179,109,192,114,118,150,61,207,227,5,79,90,154,142,173,10,18,95,179,37,179,124,237,237,148,162,163,191, -122,8,217,117,11,230,43,79,156,17,80,176,187,251,88,117,127,129,33,198,106,129,240,130,50,237,38,150,236,97, -156,194,147,60,242,174,151,179,222,87,221,67,143,93,213,47,71,30,155,214,47,15,60,118,83,191,244,60,246,158, -155,151,218,141,60,203,183,105,190,215,188,169,249,30,227,36,164,242,51,238,106,155,203,191,74,39,188,116,70,152, -200,184,251,177,122,169,102,113,126,188,79,253,236,89,136,199,37,7,233,240,217,115,49,33,165,161,165,191,129,126, -175,245,127,255,251,63,255,77,176,139,221,99,66,34,85,114,200,243,59,128,224,88,151,11,1,192,247,119,0,206, -103,53,216,181,66,48,61,6,9,238,86,43,173,243,96,120,177,221,123,208,85,65,185,185,94,128,145,234,110,222, -112,194,169,34,218,219,163,178,200,178,119,133,191,18,197,44,236,50,168,70,97,93,254,163,252,138,253,37,159,196, -139,20,119,121,171,105,81,136,137,7,61,224,0,162,118,28,105,153,61,161,83,97,98,111,153,79,148,47,12,103, -221,100,56,177,159,213,188,8,66,91,181,219,65,49,162,9,91,95,193,166,138,55,9,2,168,110,73,52,145,67, -79,163,227,169,241,155,249,11,118,6,125,155,206,246,9,96,110,180,70,123,167,170,168,151,129,41,157,184,10,171, -218,83,192,164,118,92,41,5,26,3,157,8,127,10,55,174,49,222,39,145,123,74,18,22,121,162,240,201,155,201, -186,39,121,58,141,85,62,84,64,186,121,210,71,30,235,157,72,25,133,84,235,163,19,169,173,190,118,25,99,98, -210,48,212,235,2,1,106,8,94,77,224,83,238,47,76,164,255,44,58,254,208,189,222,91,213,178,254,108,123,148, -31,121,35,179,56,57,199,237,90,255,128,121,93,146,37,31,234,201,78,119,102,213,196,94,208,159,54,239,116,121, -216,215,30,243,36,5,97,44,239,207,178,56,205,251,230,79,43,200,191,172,192,188,251,60,31,21,9,255,254,237, -211,199,72,234,205,209,221,135,74,36,97,184,144,31,185,127,228,62,167,185,56,62,110,141,75,92,213,109,69,20, -254,186,197,24,246,226,129,183,127,197,60,207,41,184,64,193,218,45,249,243,16,69,43,154,99,255,139,47,82,200, -235,244,55,222,138,244,0,29,188,209,185,47,107,70,197,60,23,84,213,165,215,113,203,151,128,199,173,110,240,197, -74,254,9,129,77,36,91,151,169,0,134,231,146,163,164,47,251,244,70,16,35,168,174,135,178,187,11,234,91,182, -166,53,108,249,24,37,149,35,208,175,71,232,160,198,160,133,84,21,9,41,71,195,63,166,103,184,87,210,107,158, -157,40,7,140,159,50,217,82,126,207,66,194,174,229,16,22,17,130,42,125,93,39,177,184,127,95,99,129,121,169, -105,30,71,146,18,27,67,90,26,152,158,241,83,250,241,253,7,221,46,245,41,131,142,155,108,80,11,67,230,197, -102,19,116,70,179,153,7,80,92,176,80,223,160,165,94,34,47,47,112,203,190,102,178,203,34,185,105,36,87,78, -209,198,100,106,77,109,190,152,81,33,158,242,250,179,65,112,238,4,43,105,127,202,28,7,210,81,252,2,90,73, -12,135,234,168,214,231,214,25,199,78,234,26,22,55,17,94,136,39,218,76,195,201,5,46,153,211,213,236,201,113, -68,239,246,115,61,212,134,6,158,214,193,131,69,68,243,174,135,154,50,144,196,224,229,214,44,84,78,236,6,106, -11,139,24,14,231,93,10,208,191,192,154,156,68,179,28,212,140,38,174,53,185,136,166,91,85,180,9,123,47,173, -201,169,182,38,167,59,173,73,154,209,100,183,53,121,205,255,113,107,114,18,157,81,47,155,184,157,211,111,23,106, -170,93,48,247,238,217,229,51,141,80,78,43,56,112,225,23,232,21,142,240,249,70,196,247,108,51,226,123,70,115, -12,231,209,130,200,177,32,37,8,67,47,118,172,28,184,113,247,42,193,90,189,109,134,166,126,176,211,248,108,58, -147,238,166,228,246,204,138,166,77,231,63,101,39,27,105,21,203,232,18,124,241,50,90,186,124,113,26,189,116,95, -43,30,157,58,239,150,223,93,160,61,242,135,79,37,121,94,222,86,108,19,255,100,151,114,190,212,202,240,41,24, -238,148,93,161,11,250,77,159,129,163,113,241,92,113,201,125,118,93,107,227,106,201,118,81,245,233,223,64,85,107, -222,127,146,138,198,55,68,161,111,232,75,117,195,79,10,240,34,210,41,60,159,116,12,226,46,165,229,27,40,45, -13,199,128,237,245,27,21,54,248,145,179,223,56,77,232,55,36,209,158,12,32,130,62,93,132,63,242,192,177,252, -150,216,83,218,117,176,192,115,216,100,222,189,134,169,186,96,147,92,195,225,255,187,182,228,240,177,223,220,92,106, -219,128,115,221,237,50,65,166,76,211,196,26,239,88,191,197,54,99,230,245,14,224,243,109,192,55,59,128,223,27, -59,70,206,105,59,226,85,173,140,222,66,255,22,19,230,234,184,216,28,205,8,144,107,135,166,38,47,103,202,62, -184,154,252,222,74,32,59,167,34,29,218,83,31,141,241,212,105,72,104,238,192,114,55,121,33,28,209,168,182,205, -216,137,107,17,12,57,19,208,242,111,69,30,201,28,10,152,130,108,220,193,252,175,47,247,161,10,81,160,109,223, -99,149,172,23,219,91,111,30,164,10,104,75,194,0,160,85,96,140,122,100,42,213,235,157,219,198,13,81,223,221, -236,202,175,4,91,237,146,141,73,206,86,119,73,183,82,108,59,40,149,135,192,51,62,124,111,119,251,51,217,191, -177,129,167,202,46,186,242,191,69,183,59,154,156,152,38,86,83,33,80,173,11,159,222,60,77,72,31,134,126,3, -245,238,209,190,250,227,82,230,47,77,65,223,57,254,226,15,171,203,226,186,77,58,22,190,206,114,89,148,9,47, -219,84,178,14,75,218,147,171,118,91,165,251,116,195,86,175,115,212,151,127,167,107,28,79,211,236,38,252,142,103, -11,46,210,81,204,78,202,52,206,88,21,231,85,187,226,101,58,86,96,80,219,194,222,195,217,181,122,93,114,248, -99,66,82,69,250,211,184,132,25,209,237,207,104,49,105,88,122,2,169,175,74,82,234,18,245,183,199,66,253,23, -199,116,87,55,185,152,240,42,173,66,104,101,125,104,240,109,165,62,162,53,98,32,83,26,236,5,191,74,47,211, -44,21,55,253,137,26,172,215,237,254,71,127,9,179,81,62,174,241,25,40,6,77,142,125,73,84,89,109,135,218, -130,222,90,69,182,86,186,128,192,48,43,59,73,62,93,119,116,142,212,74,34,23,103,233,85,30,142,100,90,159, -3,120,192,167,125,61,189,241,120,172,230,33,74,162,27,62,34,21,206,113,17,25,145,230,6,250,90,33,13,199, -25,191,238,127,156,87,130,4,120,91,171,34,102,4,57,92,59,21,124,90,233,34,131,207,193,106,86,84,169,12, -57,140,73,55,79,250,210,164,238,29,17,254,36,30,212,131,153,213,87,179,235,86,239,128,10,220,197,176,216,106, -222,40,227,36,157,87,88,50,176,205,36,166,253,21,126,217,237,118,15,91,221,22,186,147,63,250,191,181,85,150, -232,215,95,235,9,3,100,253,159,83,158,164,113,203,167,160,92,91,17,188,245,224,143,68,203,96,181,177,50,6, -37,203,43,235,117,71,231,118,175,12,69,174,202,52,169,145,63,196,208,7,212,151,75,188,191,133,94,58,141,124, -117,21,207,212,250,186,132,191,3,115,131,150,101,14,96,210,64,188,78,255,181,139,81,242,44,70,178,101,95,185, -54,218,85,30,207,154,92,99,218,183,240,241,185,62,144,160,103,253,102,80,83,223,6,107,95,102,148,81,166,57, -120,20,103,35,255,240,33,161,214,250,3,5,222,75,191,222,193,65,96,72,35,97,142,14,182,194,108,89,252,94, -175,167,23,95,181,236,61,216,214,176,165,206,31,172,115,191,152,197,35,218,134,33,73,12,176,183,158,179,46,109, -117,14,43,135,38,117,210,232,74,167,130,182,165,211,65,109,117,219,211,225,61,21,157,141,115,225,54,214,41,168, -43,3,215,179,149,189,38,163,224,71,219,124,119,167,93,22,203,138,22,97,198,99,33,239,168,140,203,160,9,129, -201,207,167,249,38,144,43,39,92,70,115,37,131,69,225,192,48,133,94,150,173,4,119,249,204,54,61,92,41,38, -37,201,51,54,44,97,199,222,178,74,7,7,7,253,219,236,229,144,159,14,180,86,231,160,114,134,232,168,132,223, -213,214,253,238,192,133,241,152,134,95,153,77,228,121,102,186,109,200,144,134,148,146,172,120,199,110,185,107,47,52, -89,222,206,118,177,108,48,174,127,23,139,183,246,91,119,113,119,64,69,232,113,242,207,225,243,184,154,241,145,104, -203,252,152,176,243,71,218,248,216,237,38,117,121,101,137,185,101,180,110,239,232,171,248,210,12,216,117,57,72,201, -208,157,199,195,230,241,42,101,128,166,208,193,3,20,112,129,125,84,97,79,160,71,42,26,205,203,138,70,213,91, -172,113,34,255,177,219,117,144,14,53,79,216,113,229,19,182,196,207,126,155,56,56,112,129,39,248,84,158,217,124, -68,1,212,233,132,233,237,92,213,224,246,45,252,186,93,96,219,147,184,117,0,202,64,70,31,18,157,182,8,114, -119,87,186,132,234,216,179,23,75,231,32,218,138,87,91,229,169,36,255,28,74,134,44,172,113,149,69,170,54,225, -163,66,37,71,181,197,132,20,120,25,137,223,24,73,115,117,91,30,188,15,44,210,206,198,222,185,210,22,203,131, -191,40,204,72,58,129,181,155,7,224,186,163,227,31,174,174,115,155,236,6,172,183,114,143,35,248,26,194,235,214, -52,206,19,40,174,55,205,181,195,15,36,185,44,67,26,190,149,23,203,50,158,245,137,167,46,127,77,69,27,108, -129,186,182,234,15,75,39,63,149,216,175,43,174,67,108,114,185,146,95,29,53,145,118,119,254,182,21,182,204,160, -182,41,224,90,237,214,46,145,64,85,71,128,184,223,242,21,200,254,65,176,69,50,24,26,108,215,152,160,238,8, -81,76,37,219,53,9,129,41,96,191,26,180,119,235,29,102,136,195,191,69,73,252,103,232,130,58,60,182,186,179, -61,196,5,241,62,23,75,206,115,211,230,232,223,140,42,172,20,109,152,144,137,178,143,0,154,124,130,106,168,237, -150,188,208,102,204,207,197,188,149,115,158,180,68,209,226,57,116,136,214,179,120,17,159,203,90,20,150,115,245,39, -211,90,164,82,118,30,237,155,134,170,31,196,223,90,105,18,73,251,136,174,108,32,28,167,156,207,114,100,57,32, -33,163,254,78,243,255,3,204,150,151,42,184,121,0,0}; +const uint32_t GUI_HTML_SIZE = 11786; +const uint8_t GUI_HTML[] PROGMEM = {31,139,8,0,0,0,0,0,2,3,108,16,71,98,27,33,240,238,87,16,114,84,118,113,239,200,189,247,110,31, +49,59,43,176,97,144,97,84,207,249,89,62,22,117,41,5,166,247,153,237,111,135,55,7,143,111,183,71,204,144, +119,213,185,237,62,99,78,97,77,114,64,94,157,99,108,219,128,42,250,66,79,244,64,138,105,163,98,2,146,188, +65,101,182,206,153,152,117,162,242,32,121,211,66,171,30,34,113,166,3,18,96,47,184,101,11,50,178,128,166,213, +144,13,148,31,204,162,37,171,92,150,180,114,32,23,254,91,138,12,120,200,116,112,33,206,84,251,190,241,190,94, +172,47,78,51,156,197,207,158,212,127,17,156,228,137,58,14,146,1,32,62,50,155,8,165,228,134,168,158,54,133, +208,5,126,164,92,187,208,40,74,167,34,228,58,120,161,62,84,91,56,251,158,68,217,107,148,169,22,164,224,65, +172,230,139,249,130,208,41,9,229,92,238,45,230,61,121,92,214,34,65,45,90,234,244,122,26,181,178,176,152,93, +61,175,93,172,87,58,149,218,229,217,126,120,62,92,217,112,119,103,111,86,223,175,174,88,245,213,248,236,54,75, +129,45,149,142,231,241,203,220,170,206,74,75,108,184,115,255,124,181,104,174,14,53,94,44,220,224,213,201,65,241, +124,81,177,119,241,124,205,117,111,207,239,138,133,150,148,227,142,58,134,148,66,180,53,139,146,43,12,216,241,161, +49,153,39,66,9,49,66,172,7,103,117,111,40,12,217,216,52,12,25,95,140,44,57,168,222,236,31,157,220,255, +250,121,253,176,119,200,14,2,82,12,110,91,12,93,195,176,164,163,173,19,163,78,29,36,247,225,55,169,78,218, +220,54,174,228,247,253,21,150,42,165,71,148,97,142,253,246,38,141,168,252,98,207,140,119,124,100,114,85,118,85, +170,12,69,182,98,76,104,80,3,128,113,52,178,254,251,118,3,4,65,201,206,158,95,72,28,141,238,70,223,0, +89,181,53,140,135,44,188,252,187,100,217,170,210,202,70,37,108,83,54,202,32,176,168,154,178,189,7,101,211,82, +67,97,225,162,6,234,37,99,82,211,152,165,26,234,43,105,108,46,151,137,157,76,108,106,218,21,153,139,25,182, +147,142,218,10,129,155,162,26,51,166,193,182,90,229,203,70,39,158,142,62,104,150,7,61,169,63,90,208,235,183, +80,67,105,27,125,86,215,201,95,136,218,140,204,97,15,213,252,47,140,153,68,179,92,193,195,193,117,107,11,226, +254,118,97,64,127,5,157,104,241,114,19,105,72,162,161,25,114,42,83,39,4,33,198,229,157,172,43,218,192,152, +69,192,154,0,101,90,84,21,84,55,77,5,134,213,169,45,62,223,20,247,110,205,213,229,205,47,227,201,164,166, +189,11,177,199,17,78,152,164,102,91,150,54,158,139,36,236,138,111,122,98,217,232,152,155,118,97,53,0,54,183, +44,15,114,63,80,137,14,162,151,98,179,205,189,160,14,116,218,27,231,100,146,200,216,19,131,25,198,117,26,12, +228,181,179,25,130,221,27,18,251,48,180,202,25,193,173,183,67,33,198,173,129,163,82,67,5,202,202,162,54,227, +169,76,7,93,49,150,170,172,219,10,198,217,222,202,161,13,239,175,105,238,165,29,103,123,131,166,184,135,35,111, +124,99,46,183,189,20,12,73,65,46,19,157,194,42,216,10,181,197,232,56,15,194,33,73,229,75,176,229,29,130, +221,105,88,114,201,182,91,150,176,14,226,61,136,4,184,101,226,37,8,33,44,255,4,226,237,250,126,209,212,201, +216,52,181,172,142,172,46,74,180,96,254,179,216,192,31,109,81,155,236,61,108,243,26,236,193,25,136,215,208,161, +249,93,156,240,95,196,95,249,37,136,77,243,160,160,202,84,91,215,188,172,161,80,237,202,116,189,70,89,248,102, +125,135,160,180,107,110,243,175,133,62,88,8,106,59,196,26,92,155,255,209,189,191,249,215,165,127,157,251,23,128, +56,142,6,241,129,54,17,76,66,137,111,220,136,5,215,2,210,26,212,103,123,39,132,56,230,82,88,124,127,109, +100,117,112,60,53,153,229,181,208,211,75,200,254,123,134,37,169,233,41,243,114,203,27,68,1,89,66,226,75,232, +249,197,61,21,160,109,51,150,47,68,96,62,183,122,189,233,172,244,207,164,225,163,99,182,93,74,133,225,117,189, +65,8,190,16,102,27,21,123,225,119,99,133,157,222,46,126,135,210,166,133,49,242,179,74,54,91,254,51,206,100, +63,231,97,167,155,175,69,221,66,6,188,243,35,221,177,30,186,111,235,198,246,187,185,95,21,186,176,141,206,108, +234,117,249,248,232,197,177,69,121,97,20,72,200,223,201,251,209,70,3,51,232,169,137,22,58,81,169,163,196,24, +191,133,68,113,205,88,231,117,179,47,144,46,164,170,18,197,184,153,199,77,220,208,38,184,10,74,49,226,14,220, +200,232,132,255,206,242,247,137,97,17,214,66,0,70,163,250,21,242,103,151,36,35,245,248,56,82,232,152,170,2, +205,144,47,147,182,184,75,129,194,228,231,211,243,116,213,154,59,68,155,237,226,62,11,168,149,80,207,137,83,69, +113,70,130,199,252,152,133,168,98,210,94,182,222,244,220,64,148,110,24,140,242,21,106,79,190,156,88,226,65,80, +67,238,126,68,130,44,90,6,224,94,7,179,95,18,112,30,254,77,8,71,133,117,128,208,251,175,21,223,242,167, +38,6,201,208,188,236,192,180,174,28,61,27,172,21,216,128,218,187,1,43,139,142,226,227,99,178,72,131,87,116, +99,211,193,200,12,230,89,236,122,21,144,145,64,68,251,111,144,68,180,113,248,103,216,245,217,16,118,58,71,27, +7,249,111,36,250,38,127,173,155,175,18,213,158,129,37,67,171,96,89,180,181,253,224,141,127,176,191,95,96,184, +137,201,100,17,28,119,208,156,65,42,171,249,168,143,5,123,19,25,164,67,244,3,139,118,184,131,220,207,176,195, +21,190,72,146,13,36,54,97,172,183,25,149,218,230,76,235,98,45,104,182,119,1,149,244,16,110,54,149,198,189, +209,36,48,34,153,145,23,239,204,204,179,217,124,203,213,192,16,32,113,134,96,239,164,73,77,211,234,18,168,118, +112,61,91,88,160,116,29,123,168,167,223,217,123,55,192,114,168,13,116,12,128,184,204,187,40,250,167,99,251,163, +135,33,163,195,240,10,91,50,53,214,3,211,92,180,253,233,110,183,139,172,217,113,254,45,48,52,77,66,211,27, +66,135,60,12,146,179,68,11,201,34,176,152,17,224,124,23,144,44,139,241,61,22,146,221,190,71,246,109,15,108, +64,39,96,12,220,30,157,16,225,93,36,98,246,109,254,20,1,14,63,93,60,103,219,78,123,14,254,235,174,121, +220,246,65,172,6,82,54,120,128,78,225,201,8,6,17,2,3,217,176,155,24,110,25,69,180,110,141,176,28,34, +135,147,9,60,145,251,100,66,26,236,10,55,151,52,49,29,234,211,167,128,185,62,20,39,177,88,26,0,204,244, +156,82,32,76,38,26,82,221,42,37,213,231,188,118,189,74,154,85,99,160,74,239,10,147,72,198,147,122,58,146, +169,125,75,198,149,97,203,219,28,213,77,40,103,13,211,75,47,110,201,178,243,208,226,114,184,129,107,192,33,198, +41,156,116,171,209,66,201,220,46,59,54,95,158,192,63,49,123,167,155,135,131,75,49,155,115,42,84,47,180,110, +244,150,140,19,53,28,229,252,222,7,69,18,232,82,133,186,71,161,240,99,76,4,200,127,34,109,116,226,68,225, +198,229,63,237,170,169,91,163,197,130,75,23,75,23,2,92,40,53,130,240,39,184,180,44,168,124,170,251,176,2, +110,211,164,173,176,21,36,228,138,136,201,164,107,164,168,150,139,2,87,41,96,97,210,57,30,245,218,85,133,171, +170,51,43,212,225,9,63,135,164,30,70,107,201,23,66,111,147,209,0,238,241,113,208,57,21,138,36,63,24,241, +97,99,50,25,247,2,31,75,228,114,234,12,210,176,44,24,149,217,165,61,144,73,151,246,20,55,184,151,97,105, +189,84,25,162,112,106,55,60,172,13,69,80,44,155,58,71,9,157,222,137,159,43,170,124,193,98,187,26,106,209, +23,89,139,24,135,61,32,9,57,83,219,252,73,70,90,96,232,190,36,249,47,188,96,167,221,187,55,194,174,47, +102,114,206,184,28,168,190,179,28,232,195,228,113,176,159,157,209,95,66,158,253,136,11,186,169,214,172,64,25,164, +250,101,208,75,165,250,17,213,182,192,18,153,133,53,131,89,88,46,161,12,177,40,154,39,133,54,119,168,203,19, +16,222,56,92,57,243,125,149,3,46,102,29,127,24,246,123,132,193,249,149,176,125,144,202,213,75,12,5,234,232, +136,17,227,194,206,212,156,195,78,94,0,159,20,14,246,246,28,178,212,211,36,1,220,206,142,231,33,77,12,43, +213,63,125,14,39,71,30,214,38,158,167,209,73,142,251,72,200,159,169,64,195,129,227,236,28,59,28,224,240,208, +249,88,160,72,107,130,200,193,21,146,157,211,25,44,219,16,133,175,249,89,127,4,0,156,136,92,208,26,240,76, +160,20,95,67,114,25,32,25,135,160,224,32,251,243,220,35,227,118,47,146,158,65,98,217,110,249,245,218,225,13, +66,182,40,86,84,69,136,171,246,240,144,161,65,205,236,124,176,226,87,183,194,65,115,133,240,180,246,233,186,40, +106,90,158,251,50,118,10,51,117,120,56,23,38,251,137,118,23,87,170,231,73,125,244,162,15,26,60,142,198,64, +234,63,133,189,236,149,171,65,30,48,162,159,70,243,32,11,55,161,31,64,180,48,30,115,174,201,108,166,6,157, +206,146,145,154,161,145,154,93,35,157,76,136,247,76,147,61,77,38,31,93,90,219,14,20,117,253,172,64,159,164, +44,59,96,85,137,1,0,73,75,121,182,208,42,186,150,248,133,171,157,52,164,48,13,133,22,87,123,105,72,177, +161,229,168,168,47,239,231,65,10,206,61,159,200,112,192,84,172,116,154,85,194,56,73,52,6,190,48,170,197,128, +60,17,208,152,94,59,100,49,202,234,14,186,30,64,15,176,228,230,52,172,161,140,59,36,51,171,209,94,184,198, +130,81,72,190,183,152,6,107,220,43,82,237,18,144,151,188,21,93,55,70,12,75,17,195,98,196,80,16,96,201, +214,242,97,226,242,120,66,40,15,168,226,200,51,216,226,36,98,195,125,196,190,199,216,155,110,212,199,191,15,203, +119,140,80,10,33,84,9,205,210,23,3,83,200,250,194,32,28,86,65,208,229,167,198,226,101,140,211,227,247,234, +139,106,30,112,49,193,140,249,166,44,90,67,71,132,129,231,156,187,108,39,22,108,227,10,14,79,52,78,55,33, +154,68,2,195,211,240,40,120,114,8,120,4,159,48,151,39,118,139,122,96,241,180,48,155,63,241,207,224,151,195, +120,64,184,102,10,69,255,228,120,224,131,126,90,172,86,245,58,177,148,214,253,72,98,98,81,26,26,131,162,20, +44,237,181,23,105,24,79,140,183,122,29,194,238,141,139,129,90,124,113,239,164,79,197,98,147,166,105,223,227,116, +220,11,133,47,191,1,7,108,82,119,99,167,65,49,198,184,63,83,49,174,183,219,238,154,48,222,40,45,187,92, +57,102,121,140,152,255,77,136,5,103,59,113,67,214,250,82,69,108,182,161,208,198,140,162,233,33,233,81,139,99, +222,8,219,151,149,211,217,220,149,19,97,163,239,28,207,191,186,114,148,90,14,71,65,25,232,241,17,151,183,188, +12,144,197,236,19,204,57,10,36,64,85,162,232,208,242,53,191,229,119,252,158,191,229,175,248,21,255,196,31,72, +251,149,43,40,234,17,62,209,81,137,132,103,41,114,232,152,195,185,6,59,140,98,83,144,8,142,33,84,13,8, +135,153,86,124,72,174,81,9,146,154,215,3,168,132,4,92,139,147,152,191,107,34,233,229,167,5,185,134,183,151, +138,241,18,69,89,158,86,121,137,50,52,179,114,46,10,124,32,246,146,176,47,49,69,139,106,75,88,220,218,187, +221,181,247,187,93,226,248,237,206,16,227,175,112,39,87,226,186,176,119,244,125,32,169,121,197,242,87,167,87,147, +137,153,189,154,35,83,5,190,242,87,72,219,153,253,149,168,143,78,248,39,81,97,120,184,122,41,94,77,38,159, +240,73,192,87,30,248,211,60,191,58,58,226,159,48,106,220,97,71,104,156,224,247,212,146,212,114,28,80,175,193, +158,71,185,118,12,93,23,43,126,59,96,237,211,225,9,109,253,83,94,34,254,188,68,116,15,126,227,173,88,167, +159,193,38,15,140,223,146,12,218,120,21,120,116,146,181,124,157,26,154,229,165,199,222,226,234,246,84,92,229,45, +110,225,65,152,89,59,231,101,68,81,142,194,234,201,132,218,71,39,211,228,142,208,106,2,188,167,150,164,150,227, +155,122,13,246,136,49,162,61,160,197,50,2,75,60,205,18,105,6,141,149,7,18,171,242,105,226,244,69,152,185, +164,22,97,246,6,68,61,194,204,169,149,32,38,150,69,221,106,161,83,83,203,18,146,99,142,122,166,236,84,132, +129,62,90,232,225,133,58,26,175,11,121,142,74,197,155,46,34,205,208,206,231,226,2,241,7,167,112,132,111,185, +77,10,183,147,30,155,31,216,73,246,234,191,245,84,124,52,104,71,197,119,125,211,71,144,54,120,103,128,107,135, +158,137,92,183,131,107,222,62,42,127,199,13,3,81,162,254,95,122,224,50,120,224,114,223,3,27,129,70,166,157, +206,12,1,8,81,3,46,39,224,228,57,90,140,23,232,140,197,105,96,51,47,80,195,197,105,60,202,155,89,65, +215,81,45,190,166,53,62,220,198,168,199,178,226,165,136,112,104,14,5,177,86,50,111,49,136,211,12,113,74,90, +27,85,37,234,32,23,25,26,129,5,110,176,25,44,130,15,237,165,97,67,187,40,209,156,54,132,86,44,115,111, +17,21,95,147,69,56,238,2,165,154,0,214,220,38,21,47,118,76,224,243,78,242,241,10,131,4,235,70,52,9, +214,229,135,119,32,64,188,252,237,173,45,106,56,208,80,84,7,75,221,220,31,156,190,216,192,246,101,250,91,228, +197,216,225,245,91,76,38,232,41,40,254,77,232,103,142,72,175,177,109,127,225,150,88,155,248,57,192,147,57,135, +62,109,113,27,238,105,135,183,161,191,195,255,147,156,250,95,145,251,143,33,53,72,191,192,26,170,254,122,17,210, +135,59,92,232,87,241,240,33,38,49,92,227,164,157,210,197,172,206,70,248,26,161,87,71,14,158,220,61,162,175, +12,10,252,200,82,88,242,252,253,191,14,201,244,120,234,85,168,19,164,153,5,239,27,125,161,162,218,151,82,239, +32,25,191,189,107,30,198,61,23,158,245,45,197,167,16,43,6,210,10,91,242,175,129,56,180,237,11,115,58,71, +134,178,59,145,188,70,178,72,95,206,78,156,231,225,43,27,249,206,136,58,120,6,145,179,191,186,41,124,113,35, +186,42,37,110,150,236,253,44,102,117,41,76,178,95,111,73,70,23,85,116,127,16,207,216,53,250,112,125,42,131, +191,213,177,108,107,132,196,66,220,237,147,36,220,132,16,132,156,143,104,166,83,230,172,230,13,167,254,188,19,196, +12,111,20,183,251,74,85,207,43,112,38,57,46,159,11,237,181,40,79,143,217,19,105,118,82,42,68,243,61,197, +22,187,138,45,246,21,91,160,96,235,94,177,95,18,205,102,199,20,153,228,64,189,215,116,48,143,250,109,122,253, +22,223,215,166,180,195,178,126,219,137,205,138,14,190,182,98,54,198,77,52,15,75,172,212,76,169,1,212,152,143, +11,179,86,37,189,91,219,44,155,178,53,93,123,85,23,107,108,150,119,80,126,129,138,90,254,59,62,205,119,55, +247,212,146,166,88,212,110,30,85,120,175,26,172,90,37,157,85,113,224,78,86,149,35,33,85,5,22,52,150,48, +52,65,125,208,150,222,230,190,88,225,187,110,26,122,221,35,74,185,170,193,53,173,195,169,26,255,65,155,154,67, +212,205,202,33,38,30,141,84,181,84,52,72,97,173,81,245,154,154,168,103,169,161,114,77,58,22,186,166,129,226, +190,6,99,92,179,134,146,104,204,121,105,93,105,243,22,108,50,27,151,117,97,12,125,92,71,24,42,192,3,222, +91,143,151,246,120,211,124,136,140,72,131,197,145,227,238,58,48,234,152,186,236,152,194,186,190,182,115,198,139,33, +17,169,80,0,63,191,187,190,66,104,42,248,95,249,255,79,176,231,102,222,225,16,182,131,117,141,113,121,107,197, +238,71,53,215,11,255,65,36,254,22,102,211,51,159,249,125,140,57,253,119,243,99,163,51,98,124,188,101,124,249, +63,199,147,13,101,177,171,219,108,243,34,123,34,138,191,189,127,247,238,246,38,59,225,151,55,175,223,191,203,78, +182,220,169,151,96,131,148,46,175,127,162,241,160,84,55,21,5,247,246,213,155,203,215,110,97,84,171,131,217,149, +232,135,203,243,139,91,130,10,234,38,144,168,163,64,158,191,187,248,248,238,236,205,197,25,130,14,115,109,101,119, +63,136,45,237,12,230,123,14,172,208,129,27,39,152,241,84,205,236,124,170,210,23,153,247,162,76,117,126,117,55, +84,232,2,80,26,32,213,170,117,138,195,36,255,133,124,99,81,135,102,119,178,187,7,213,98,207,185,153,84,161, +213,184,85,97,53,134,177,170,121,80,190,213,58,191,104,90,3,52,22,218,247,205,87,8,109,90,28,154,104,232, +161,237,22,174,26,137,100,53,45,141,61,90,28,123,180,60,118,16,65,236,57,20,182,105,49,2,168,42,52,105, +117,104,27,91,104,75,214,249,217,138,205,55,250,43,38,115,63,66,225,127,80,15,15,15,233,195,223,167,141,254, +252,195,201,191,254,235,191,254,224,102,199,252,219,125,253,28,200,199,235,43,2,251,151,31,20,26,155,89,21,37, +140,183,81,99,247,118,247,139,143,10,213,149,22,54,52,165,48,116,236,243,133,174,176,51,141,65,63,85,40,241, +183,114,129,164,63,243,86,144,109,251,122,174,62,197,47,67,205,169,204,253,253,195,172,166,60,166,102,205,28,41, +28,30,242,6,175,77,73,95,82,181,176,117,11,28,62,15,36,177,145,51,141,167,40,121,116,228,238,154,40,7, +6,115,42,133,60,53,211,102,138,200,246,24,200,104,105,51,207,10,207,130,163,78,23,219,6,180,253,155,179,158, +68,205,144,50,134,35,182,13,231,78,137,184,27,22,120,206,89,50,106,241,147,86,75,223,139,28,219,244,49,139, +222,169,118,38,65,151,91,200,123,88,141,51,145,231,201,4,209,83,215,239,37,50,108,103,71,71,122,135,213,252, +121,190,16,29,190,134,128,140,239,67,34,46,73,59,64,96,61,39,202,115,183,23,87,191,180,108,211,134,211,164, +187,186,94,138,198,11,99,73,194,104,221,113,77,205,150,115,190,196,164,191,13,252,181,116,26,244,187,37,113,151, +254,51,12,195,102,115,90,226,185,240,84,178,141,199,86,243,74,156,240,181,199,121,120,184,60,213,147,9,162,198, +187,164,36,89,247,120,150,40,181,240,137,99,141,73,183,60,172,88,206,42,148,27,162,172,94,150,71,77,144,205, +173,32,170,65,95,229,247,244,117,219,233,11,80,11,24,168,74,120,69,113,123,87,106,29,72,175,29,55,26,213, +182,13,183,56,107,16,227,79,47,206,63,126,58,191,184,186,248,233,236,221,197,56,186,193,218,246,95,143,54,219, +189,123,165,15,137,196,98,66,11,201,173,16,253,95,114,83,68,157,125,77,44,199,55,183,233,82,106,99,29,115, +83,218,126,23,208,184,98,91,110,186,207,35,254,60,168,29,248,32,49,137,241,120,112,220,88,61,255,101,111,80, +6,215,223,253,81,207,194,61,202,200,66,172,108,234,180,207,134,2,184,154,214,254,22,76,13,249,29,52,179,231, +230,183,92,10,59,141,127,6,245,212,229,61,253,243,71,191,205,37,6,107,77,67,133,29,163,223,130,88,70,112, +131,65,70,63,109,42,112,160,56,31,184,147,113,24,133,43,7,103,46,127,187,249,32,21,70,215,52,16,140,105, +197,206,214,48,71,236,238,29,50,69,44,115,141,56,30,252,56,69,119,207,185,137,165,174,20,48,51,243,92,117, +31,134,17,141,162,31,0,177,201,45,53,46,190,34,45,250,119,15,80,114,137,228,23,118,231,186,189,132,160,33, +213,253,74,2,157,169,157,89,171,229,162,181,144,88,150,1,121,92,28,161,5,3,37,247,214,198,54,230,123,88, +110,222,210,170,33,166,56,202,205,0,219,139,240,171,213,247,216,233,234,21,66,213,87,29,194,70,4,15,3,118, +220,241,106,247,36,161,216,52,129,217,111,47,94,188,216,216,237,111,20,121,142,231,188,31,56,47,108,225,6,49, +238,101,59,96,125,172,220,71,23,143,111,132,42,135,167,82,183,156,102,4,250,157,78,75,172,170,145,63,34,192, +37,11,241,224,185,53,67,17,47,226,205,77,32,103,66,117,134,169,223,116,39,120,174,119,6,149,255,238,39,185, +79,102,210,93,178,232,96,72,242,180,206,229,240,204,164,49,6,231,163,6,243,157,251,153,82,97,229,46,21,150, +189,143,143,118,214,144,129,174,200,88,26,247,209,177,2,196,12,7,46,19,110,35,114,243,93,228,6,145,243,2, +207,95,132,235,121,42,93,214,41,48,111,21,3,106,199,140,187,153,162,191,218,82,3,107,9,9,223,229,13,203, +2,196,212,25,182,255,7,27,77,197,230,241,51,155,27,203,227,215,4,27,63,87,132,229,134,126,175,166,210,90, +216,60,214,121,1,106,50,73,34,128,18,225,126,93,33,207,78,65,220,98,203,82,203,137,95,115,233,197,79,55, +136,138,89,20,132,232,254,15,48,157,113,191,214,205,10,180,93,39,50,74,22,193,226,50,220,152,160,133,92,99, +26,162,41,226,129,60,41,174,228,250,63,123,187,210,253,182,113,36,255,189,159,66,102,123,127,67,78,32,89,146, +227,76,154,10,173,141,221,103,38,215,68,233,233,67,147,77,104,9,178,152,150,72,133,164,124,140,90,111,176,47, +176,159,246,21,247,17,246,95,85,4,9,234,154,123,250,176,73,160,0,20,10,133,66,93,160,129,2,245,141,244, +210,109,58,13,136,78,132,19,237,139,146,99,173,76,93,136,183,34,226,80,154,170,193,15,212,166,124,85,85,13, +4,163,0,231,148,148,11,197,130,126,185,186,44,190,49,91,240,8,162,139,101,168,74,43,92,230,70,230,108,185, +161,80,102,49,253,77,109,31,199,150,135,247,40,163,249,179,191,208,44,226,145,101,71,155,101,100,252,85,134,94, +123,47,41,167,154,223,41,8,136,146,154,204,49,248,2,22,52,161,35,2,60,190,170,150,209,78,177,142,98,201, +197,62,114,249,57,199,254,47,220,254,149,21,230,25,157,176,151,146,98,117,75,19,158,41,14,114,83,129,138,41, +231,119,163,211,124,87,63,43,44,75,125,21,188,74,223,52,91,139,85,15,123,160,196,26,165,154,228,93,205,228, +111,229,201,243,228,86,167,151,97,134,35,223,232,35,238,73,211,29,134,205,63,191,243,78,174,21,173,7,229,206, +2,244,251,197,194,128,218,130,95,111,102,148,230,45,108,145,57,250,203,22,179,40,119,79,254,148,61,56,169,78, +178,148,115,126,171,60,40,232,114,41,100,68,33,199,73,244,97,168,235,235,153,118,57,21,202,22,128,183,186,90, +33,85,168,113,52,209,144,227,67,180,153,65,56,179,221,101,142,34,27,136,125,202,250,114,156,18,230,202,134,137, +1,147,149,50,160,108,5,222,118,188,8,242,201,206,211,200,75,255,236,169,71,64,73,236,59,134,14,147,192,212, +158,122,61,176,170,57,195,234,18,126,130,81,85,140,218,109,225,63,161,185,111,143,212,105,23,67,141,194,5,112, +212,187,70,4,204,193,33,177,27,15,140,138,218,93,3,119,139,113,119,140,215,245,234,156,4,197,122,154,179,50, +50,97,154,30,141,33,230,76,179,251,96,59,201,18,39,163,159,245,246,225,139,120,134,59,6,233,41,27,135,15, +118,66,114,236,41,244,10,181,138,52,244,93,248,158,49,190,33,84,6,144,136,79,2,83,119,134,201,87,139,136, +8,207,102,163,5,4,42,26,97,235,135,65,40,19,201,61,188,30,165,192,0,81,168,113,78,74,178,185,86,65, +53,110,18,140,74,64,122,159,225,144,137,161,5,18,64,171,184,115,144,185,78,211,65,245,8,189,228,129,133,77, +194,201,210,21,119,226,28,164,23,203,161,210,135,70,68,154,211,12,114,47,193,255,33,242,82,238,114,12,6,165, +4,42,202,18,13,140,122,82,174,78,74,50,153,92,105,119,175,38,174,131,249,156,55,59,160,88,62,204,101,103, +114,25,40,143,35,166,191,16,178,178,118,198,180,90,2,12,199,61,10,118,157,184,95,213,156,254,172,32,105,190, +150,178,254,80,100,25,73,30,37,101,43,190,14,41,72,82,127,119,49,46,122,39,18,166,48,179,88,56,152,23, +136,120,176,102,161,194,136,98,96,14,56,58,205,5,200,81,52,250,36,186,94,166,228,78,164,59,41,146,193,22, +227,232,221,219,118,180,76,83,176,214,219,125,93,160,180,74,138,198,81,110,212,116,114,8,197,189,74,194,193,199, +35,233,57,88,137,184,101,92,154,182,14,248,161,210,35,9,48,173,210,154,51,209,254,98,136,48,237,249,229,27, +39,36,142,40,171,98,118,177,188,66,119,133,8,90,199,240,95,188,63,158,38,25,78,34,36,212,132,52,1,50, +47,232,141,74,45,225,254,67,37,30,37,248,108,235,45,229,193,216,243,208,165,91,202,195,184,84,151,202,219,41, +230,56,37,93,174,68,156,224,117,0,254,35,53,86,126,214,176,209,144,234,165,122,4,6,230,183,120,57,191,210, +169,67,71,165,253,94,240,127,158,12,24,154,108,172,153,136,243,68,244,103,176,120,194,219,231,173,92,117,58,237, +39,173,49,168,89,100,59,201,75,0,155,36,217,180,28,161,143,137,253,150,83,26,248,27,17,236,42,41,4,4, +233,15,14,134,223,214,231,250,96,89,219,130,148,1,124,42,181,13,219,188,146,253,162,191,21,19,189,74,18,74, +162,113,60,51,166,73,241,150,153,239,208,75,68,73,42,38,157,99,61,236,5,75,234,11,150,4,9,0,68,23, +75,196,84,18,211,59,222,78,111,201,189,74,223,30,66,219,166,205,180,105,173,80,171,80,187,9,115,75,234,213, +81,178,134,161,147,192,26,40,177,3,186,52,179,106,178,106,86,178,145,80,58,236,199,22,116,255,138,245,120,0, +250,115,57,108,19,88,212,192,12,237,61,37,149,30,205,48,177,4,185,89,127,30,106,115,10,92,88,13,90,174, +52,108,102,121,148,108,66,179,238,102,177,240,0,6,160,60,111,219,189,161,41,129,71,199,99,126,35,83,119,195, +55,147,43,27,156,240,204,215,59,164,98,104,244,19,147,198,3,13,178,212,123,196,54,202,55,109,35,195,0,195, +168,88,171,152,158,150,124,106,186,137,65,27,15,56,34,138,223,29,143,246,19,142,33,195,44,94,229,126,182,247, +141,167,37,21,41,241,246,152,173,32,121,26,132,178,50,33,14,173,180,132,91,214,89,86,2,148,127,145,65,139, +206,54,7,233,39,62,76,183,141,226,208,235,135,62,69,171,49,172,172,81,137,173,74,49,87,251,40,27,5,34, +39,104,38,33,197,199,108,201,64,239,180,89,241,60,234,75,31,232,220,47,158,246,73,7,196,234,203,21,76,45, +19,187,88,65,241,25,174,234,222,151,124,195,251,178,233,223,203,135,89,93,95,125,83,183,93,76,110,139,21,35, +172,251,204,74,215,24,20,254,125,136,59,14,239,94,131,139,240,79,100,51,218,204,206,58,158,81,214,223,12,9, +55,43,219,80,48,71,82,98,138,195,32,177,132,57,16,213,189,35,114,132,206,250,97,127,99,47,164,180,117,55, +102,158,146,218,128,149,73,42,15,165,112,18,22,114,45,143,219,45,140,133,10,45,127,77,87,13,47,52,196,232, +233,227,143,95,116,58,142,186,204,205,75,215,144,229,125,30,232,210,99,24,239,245,24,74,88,4,123,148,245,17, +112,105,68,177,162,184,197,145,21,151,51,79,227,209,52,140,175,117,144,21,145,242,172,208,60,138,117,41,151,193, +148,183,168,143,172,223,34,39,81,196,190,185,175,81,240,70,135,99,157,246,162,86,138,135,167,25,29,246,223,191, +121,238,166,124,199,34,166,235,180,117,23,39,181,251,110,30,66,99,237,60,82,157,71,240,11,180,178,116,20,80, +251,108,57,195,97,187,163,85,200,173,94,77,38,18,125,189,12,227,155,48,43,218,195,63,45,188,115,135,89,119, +199,152,114,216,111,141,211,240,86,6,153,169,54,254,45,134,50,25,59,128,64,43,6,32,124,93,11,132,118,125, +169,217,155,196,72,90,23,73,89,91,242,38,51,59,96,244,32,120,104,128,199,129,212,33,209,232,129,121,122,208, +177,158,187,239,158,4,167,143,79,251,29,31,217,208,197,182,4,131,192,54,88,211,63,234,105,110,46,187,150,10, +214,16,97,80,77,169,58,46,7,216,109,130,68,196,191,244,3,79,9,214,131,189,66,107,91,204,66,182,118,30, +157,116,89,188,86,155,34,234,205,80,220,140,104,83,88,21,9,224,147,39,121,47,65,25,93,248,137,126,219,121, +244,96,166,102,244,203,237,156,53,41,233,201,42,151,34,83,57,219,174,156,113,101,84,93,83,92,171,55,218,204, +143,182,210,120,9,253,218,21,37,173,156,86,36,57,123,147,89,66,41,131,39,121,217,156,78,3,88,19,244,75, +50,163,240,96,18,76,85,188,86,84,246,29,111,140,55,36,186,30,123,45,132,80,161,155,156,99,55,103,250,59, +108,136,242,33,111,125,76,162,152,4,8,76,57,75,247,34,139,210,227,203,190,207,160,13,141,226,246,245,71,108, +192,99,109,94,218,142,122,78,57,19,73,174,150,154,70,250,11,9,184,28,69,208,106,192,176,155,169,183,125,237, +235,62,165,171,66,53,121,153,7,207,243,62,128,232,42,98,31,215,28,209,204,127,219,171,110,215,229,133,23,216, +100,80,215,242,129,95,109,196,101,105,163,252,160,195,95,40,247,48,227,55,76,154,2,249,163,218,173,122,151,142, +186,218,205,250,101,131,207,208,152,227,61,75,35,10,250,45,119,9,200,181,130,185,47,9,112,25,41,250,104,18, +163,71,104,172,21,158,169,11,57,138,148,251,216,160,153,144,148,17,23,30,158,173,124,11,30,124,133,121,37,108, +246,147,239,142,139,214,70,70,228,125,131,159,217,177,75,237,86,220,48,162,92,144,165,59,82,171,155,40,139,200, +104,249,133,6,192,89,230,23,237,150,12,1,130,87,147,143,175,203,246,73,153,183,18,170,37,229,139,233,126,171, +248,248,5,95,170,236,247,143,56,81,115,230,162,222,147,160,91,217,214,78,251,46,164,109,159,102,52,242,124,204, +211,18,90,99,86,6,198,56,95,38,208,213,241,63,108,120,54,214,35,119,12,104,53,9,198,164,191,10,85,139, +106,79,133,107,62,5,94,231,136,104,117,38,119,159,206,62,118,193,134,47,172,215,83,71,125,105,189,130,47,223, +90,175,229,57,113,163,131,133,235,60,25,71,55,231,252,195,193,136,196,139,162,107,87,78,96,48,16,101,154,235, +108,154,32,76,212,250,98,237,137,55,211,83,195,84,69,68,29,34,198,44,72,44,225,243,224,72,139,84,75,40, +119,85,158,121,199,97,77,38,52,27,10,192,246,95,178,149,67,90,200,200,74,184,74,226,129,206,159,107,208,161, +122,118,87,108,159,251,9,223,230,90,102,126,8,194,20,213,144,8,105,116,7,104,251,21,50,90,45,141,191,214, +38,122,18,112,60,23,7,185,165,169,2,199,124,35,85,97,105,239,218,254,92,187,75,58,207,243,0,236,179,237, +12,50,145,125,152,54,20,197,151,12,36,34,203,218,3,248,241,113,25,248,15,172,42,117,12,238,121,13,50,222, +224,247,181,251,81,171,21,54,84,131,210,237,42,227,90,72,183,86,198,163,233,23,4,172,241,145,76,233,62,176, +227,121,102,58,227,253,216,106,250,225,148,161,73,124,236,194,213,226,7,161,51,15,238,34,66,127,12,244,173,116, +7,153,192,22,160,194,148,218,60,165,49,152,205,120,182,143,221,123,5,3,255,69,190,110,28,175,10,134,168,55, +124,215,119,66,144,24,68,243,17,10,253,224,97,60,176,23,198,173,186,72,168,139,47,185,139,12,226,15,122,75, +147,62,87,67,13,164,91,227,86,232,59,230,169,236,44,225,206,122,228,252,50,147,222,202,223,120,39,50,253,35, +111,145,155,171,135,15,231,221,182,217,34,23,57,111,17,68,210,242,36,166,13,242,58,208,117,218,231,193,69,94, +229,172,30,187,185,250,136,233,15,114,60,208,101,120,118,32,222,224,101,51,135,47,7,102,50,240,27,30,248,106, +54,127,52,186,107,35,11,199,122,197,190,254,217,122,45,119,238,15,130,214,60,140,226,243,39,34,184,241,112,82, +62,77,146,4,179,35,124,127,218,198,247,135,156,148,187,192,14,243,210,57,80,75,84,192,60,48,178,87,42,120, +116,30,79,14,101,89,246,231,133,114,203,144,65,12,70,136,213,27,230,237,216,204,93,212,119,15,85,25,102,73, +85,89,81,37,248,26,162,84,183,243,172,216,164,140,189,39,246,7,0,28,146,238,78,183,168,124,179,192,244,227, +89,247,112,173,222,107,161,246,1,246,58,29,161,94,121,11,54,66,41,180,124,169,200,173,138,89,112,14,36,73, +245,146,206,193,107,187,14,253,126,14,234,120,62,194,42,214,248,159,138,241,77,174,58,244,28,146,165,134,151,12, +126,18,126,97,145,255,117,30,72,19,104,56,182,18,40,39,250,213,32,65,62,161,28,246,138,175,191,193,80,151, +217,103,101,167,82,74,193,213,140,213,241,251,129,220,159,236,244,83,186,121,26,151,215,159,179,109,66,23,185,129, +229,181,237,94,92,222,43,75,233,50,219,52,154,208,121,191,38,116,213,51,203,8,25,2,101,62,68,173,33,1, +196,183,175,146,76,23,43,100,157,0,135,134,142,93,186,79,93,52,13,92,232,191,172,30,102,242,164,98,183,11, +49,180,171,11,110,96,250,56,229,59,217,234,219,146,162,171,53,202,203,60,40,96,146,70,26,214,101,231,4,6, +173,241,247,145,178,47,58,242,112,104,119,183,202,154,205,198,57,34,109,80,83,222,70,115,202,28,115,19,209,108, +194,251,95,127,61,213,167,222,26,206,99,115,254,136,188,197,113,110,145,227,73,151,222,185,79,10,185,109,228,18, +126,45,172,128,101,193,62,40,52,43,63,1,161,103,37,39,66,159,73,183,39,13,154,44,61,48,37,233,25,230, +104,94,241,40,190,212,65,56,144,205,110,134,22,120,181,217,79,5,60,19,6,193,225,186,119,52,37,155,112,95, +7,193,140,172,196,28,224,80,210,150,146,159,59,98,39,247,114,216,225,23,252,162,238,165,155,157,35,16,15,251, +75,244,22,10,147,75,150,32,52,81,106,71,37,46,207,218,82,93,37,16,25,14,151,38,154,188,199,111,78,17, +178,149,142,97,48,219,190,110,206,105,49,98,143,250,176,247,54,21,8,11,99,139,211,75,149,1,141,115,251,247, +134,195,236,13,251,173,217,250,245,155,35,153,97,0,222,65,99,141,150,152,163,110,189,124,245,242,171,192,33,139, +213,1,103,255,48,184,248,238,229,211,55,63,5,206,109,134,97,195,244,158,74,191,127,253,229,211,183,128,146,251, +172,84,242,252,213,211,47,191,123,249,77,224,144,173,12,161,142,50,207,115,199,154,114,31,12,55,124,195,7,137, +209,254,254,168,131,111,137,253,34,220,73,205,93,156,186,31,110,233,211,107,199,171,34,25,103,150,140,66,154,179, +184,211,79,62,172,111,179,15,158,250,113,199,78,151,116,87,35,210,218,120,132,140,164,71,50,195,134,80,161,232, +185,131,71,196,35,13,196,68,141,25,2,107,92,93,136,234,158,61,242,222,137,226,120,171,94,128,70,47,64,28, +186,214,179,15,20,188,53,67,119,0,154,170,57,1,141,133,126,56,147,131,103,16,213,154,238,126,13,157,75,217, +68,76,22,243,194,153,204,95,26,211,133,234,236,119,73,105,126,30,124,162,78,148,51,215,89,22,94,83,186,85, +93,167,191,13,158,13,94,189,108,177,49,233,62,135,190,66,90,15,18,52,156,213,26,176,217,109,68,215,194,111, +91,250,70,146,154,194,76,67,161,153,36,142,255,117,209,205,220,100,14,115,152,38,3,254,222,240,182,37,90,47, +237,11,52,78,147,156,215,1,22,8,222,174,210,232,122,154,199,192,135,180,48,175,144,201,191,254,58,67,221,98, +182,188,142,98,84,152,71,216,25,161,41,71,251,247,174,131,36,97,221,16,63,15,230,223,209,36,25,19,151,162, +123,136,129,141,247,47,199,11,117,1,116,47,60,234,155,166,136,29,229,202,19,221,192,185,74,97,97,174,75,62, +123,31,20,203,183,138,221,21,127,34,225,86,141,151,41,207,194,127,1,65,102,73,78,22,208,194,65,104,82,166, +92,92,187,127,212,45,243,25,29,209,148,153,66,165,170,188,50,100,241,51,85,209,196,95,42,214,55,197,42,240, +39,10,234,97,230,223,171,130,50,126,84,60,249,9,225,240,198,116,145,210,219,69,213,203,136,222,191,179,58,26, +83,193,115,234,235,21,61,189,150,78,66,149,221,67,84,205,7,98,164,76,169,106,96,151,204,69,118,69,154,197, +148,50,172,150,196,242,109,146,129,93,34,45,46,135,3,215,67,186,99,18,102,185,255,30,94,32,154,185,209,35, +203,201,15,175,221,159,133,40,183,83,171,24,9,68,174,183,213,196,112,234,55,53,205,245,86,93,146,82,134,223, +44,237,136,117,105,165,176,190,88,71,245,116,243,22,202,59,148,174,213,207,58,160,242,223,107,172,142,167,254,144, +215,45,74,240,14,233,160,82,26,202,23,29,63,63,97,63,100,146,158,23,191,1,161,227,45,75,52,183,138,228, +74,1,149,198,84,250,155,39,81,131,3,190,116,171,169,201,159,121,107,224,129,151,95,55,103,122,146,59,231,191, +1,75,253,101,88,90,95,1,78,99,91,16,38,214,224,236,38,149,207,41,166,180,73,26,243,40,14,218,141,121, +120,23,116,207,206,8,122,118,96,32,114,136,54,57,89,82,198,25,29,128,205,211,48,155,50,84,120,168,199,89, +178,88,220,55,97,234,252,194,176,203,3,176,160,119,170,139,62,39,214,156,14,44,197,88,192,146,5,177,32,205, +110,26,219,126,86,29,252,76,39,4,201,121,99,248,103,129,240,198,83,82,192,173,189,6,48,93,138,42,190,120, +152,6,133,241,170,251,114,74,179,168,148,184,98,52,185,119,87,44,21,177,215,192,55,19,50,1,35,25,250,125, +78,186,194,138,90,201,158,19,94,236,215,71,35,177,68,183,30,71,100,143,146,160,116,204,77,156,21,73,37,127, +180,246,136,99,103,212,167,221,217,14,17,103,78,17,242,35,82,158,28,117,70,119,255,137,64,104,200,123,209,117, +196,201,220,224,10,35,59,215,42,193,36,17,101,48,218,228,36,64,131,146,10,8,226,192,181,139,248,203,228,156, +220,188,147,7,248,255,9,162,126,167,254,164,217,161,174,45,25,68,190,160,195,132,114,132,141,29,53,142,82,145, +25,254,168,239,8,83,251,14,111,4,114,121,169,48,0,249,48,5,145,116,160,135,60,16,69,212,178,168,171,36, +38,234,171,23,130,49,34,98,183,136,105,0,199,13,49,38,167,135,136,157,234,230,233,170,236,230,39,233,166,48, +8,203,26,251,24,29,5,127,64,133,2,169,108,51,117,28,76,172,215,74,116,141,224,133,37,187,114,162,46,240, +251,6,191,11,6,217,148,166,148,12,131,25,25,153,40,118,103,133,218,79,36,45,215,27,2,243,111,198,92,199, +130,249,1,84,9,197,253,228,148,229,17,42,238,199,101,162,165,185,113,122,236,236,226,168,236,130,246,64,13,132, +14,66,185,151,44,0,198,45,99,65,101,68,40,227,130,243,199,236,38,114,208,14,28,103,42,204,113,184,189,165, +198,116,157,154,254,59,68,242,97,157,116,249,97,210,61,67,37,220,81,44,146,3,26,210,36,74,61,24,183,106, +41,43,197,167,203,66,247,30,195,10,177,179,124,167,123,205,144,138,167,106,200,76,211,177,17,131,103,205,250,244, +221,141,123,207,252,53,110,209,173,26,227,168,186,151,49,225,131,139,192,100,247,133,23,11,131,143,48,248,107,181, +74,226,75,10,172,249,220,45,109,70,157,102,48,107,154,50,124,93,176,200,84,26,115,82,205,50,224,12,41,83, +94,12,236,156,181,219,54,170,206,6,0,246,52,233,78,6,173,73,129,86,197,19,102,61,84,157,244,41,106,234, +180,222,141,123,66,66,127,15,83,198,120,94,27,4,246,54,111,239,107,158,89,205,119,35,153,252,157,252,81,198, +118,118,242,137,215,35,214,181,245,61,240,141,90,18,243,108,83,177,146,141,251,40,57,57,140,164,16,246,31,219, +254,195,45,186,70,238,62,170,206,10,170,214,154,204,246,0,143,118,1,243,236,42,246,28,192,199,61,110,20,116, +108,100,36,241,11,182,84,21,95,59,123,165,104,248,215,14,33,93,55,200,124,213,99,107,4,42,216,223,253,82, +186,127,71,67,76,100,129,232,5,101,198,17,204,236,97,220,190,215,113,224,220,221,46,58,143,219,136,154,204,203, +151,51,71,221,151,47,15,29,181,40,95,224,147,189,211,230,165,116,20,223,198,187,52,223,175,116,93,243,61,167, +147,16,229,151,218,214,54,175,254,42,157,240,216,26,97,202,17,245,115,121,201,22,97,124,126,130,126,6,21,196, +101,170,137,116,244,53,244,124,10,165,161,81,124,26,253,168,241,127,255,251,63,255,13,216,155,3,99,130,255,50, +30,242,238,0,16,185,206,105,33,24,240,171,3,128,203,69,9,118,41,8,70,52,233,247,135,213,202,202,121,48, +124,183,219,123,208,150,176,219,178,88,128,145,116,183,172,57,225,164,8,123,123,148,38,179,217,219,4,182,39,242, +85,219,138,84,35,191,44,255,129,63,110,127,165,167,225,77,68,55,122,179,57,206,168,169,67,122,64,151,68,237, +36,40,100,246,20,167,194,180,186,115,62,21,95,24,157,117,211,225,180,250,202,38,238,194,72,213,97,7,197,8, +19,182,124,5,27,42,222,212,195,63,107,202,15,230,161,231,193,249,220,248,205,220,129,186,4,66,151,56,219,167, +4,115,95,104,180,7,85,197,98,25,148,232,196,153,159,149,158,2,197,218,113,38,10,52,13,244,93,238,206,201, +141,107,140,247,105,96,159,146,192,34,30,11,62,113,61,101,247,105,28,205,67,201,131,242,160,155,143,123,200,102, +61,140,148,81,72,229,183,63,101,109,245,149,205,24,83,147,96,33,175,3,10,65,147,224,45,8,140,88,254,192, +196,242,47,241,21,142,246,221,241,170,148,245,151,187,227,248,148,17,178,8,199,3,186,99,235,118,149,211,134,44, +249,80,78,118,190,55,95,38,132,255,102,94,191,217,229,208,190,118,148,195,20,36,99,249,4,249,63,81,220,51, +127,113,129,255,224,130,114,30,232,120,132,163,252,251,55,223,93,82,106,111,76,221,125,200,242,177,239,223,240,183, +239,159,216,207,81,156,159,159,55,38,41,104,155,53,2,4,184,54,25,195,186,126,224,224,222,129,227,88,5,239, +168,96,109,151,252,105,72,69,43,204,177,247,217,103,17,201,235,232,207,26,253,202,0,45,122,195,185,207,53,163, +100,25,231,168,106,227,117,210,112,25,240,28,73,88,159,173,248,47,11,108,34,217,184,138,114,194,112,192,28,197, +190,236,139,251,28,140,32,93,15,185,187,119,232,155,91,99,13,27,46,141,18,241,8,248,245,132,58,40,49,104, +80,18,10,67,202,104,248,199,244,76,238,149,232,78,207,158,138,3,198,141,20,183,228,175,91,48,236,90,134,40, +17,1,84,234,74,157,76,10,183,67,5,132,230,37,211,60,15,152,18,27,67,218,52,144,158,233,39,251,241,221, +135,237,54,250,228,176,226,38,27,148,194,80,57,161,217,4,173,209,98,225,0,84,110,80,81,144,18,43,194,127, +223,129,238,218,151,76,118,149,140,239,107,73,149,115,106,99,114,176,230,85,158,152,81,33,158,107,183,252,114,9, +133,91,86,108,127,114,22,3,116,20,55,65,145,10,201,161,58,42,245,185,245,76,211,78,106,27,22,55,49,92, +18,79,216,76,195,41,68,150,154,226,130,246,244,60,192,123,245,189,30,180,193,192,243,50,120,48,8,48,239,114, +168,185,34,146,24,188,236,154,129,228,194,110,160,54,48,136,201,249,191,79,1,250,231,91,147,152,251,109,76,212, +12,166,182,53,57,8,230,59,85,180,169,186,99,107,114,94,88,147,243,189,214,36,102,52,221,111,77,126,165,255, +113,107,114,26,92,162,151,77,220,110,240,219,134,154,23,46,152,163,163,106,249,76,35,42,199,10,246,109,248,1, +245,74,142,240,229,70,76,247,114,51,166,123,137,57,34,210,50,0,57,6,80,130,104,232,193,158,149,35,110,220, +191,74,100,173,110,155,161,208,90,247,26,159,117,103,210,97,74,238,206,157,168,219,116,46,62,116,7,18,212,157, +245,199,196,23,47,130,91,155,47,46,130,23,246,107,166,131,11,235,189,226,119,27,232,24,254,240,123,38,207,139, +109,197,118,236,190,223,167,156,95,21,202,240,5,49,220,133,154,83,23,248,141,239,192,97,92,122,206,52,115,95, +181,174,165,113,117,171,246,81,245,249,223,64,213,202,188,255,196,138,198,215,160,208,215,248,84,221,240,147,0,190, +11,138,36,157,79,69,12,226,144,210,242,181,40,45,182,99,160,236,245,107,9,27,252,160,21,164,46,194,230,148, +60,251,190,79,34,232,211,59,255,7,237,89,150,223,45,239,41,113,29,12,232,217,175,51,239,192,54,85,137,31, +227,2,142,254,63,180,37,135,216,38,246,230,50,219,6,156,107,111,151,41,229,194,212,77,172,201,158,245,187,217, +101,204,188,218,3,124,183,11,248,126,15,240,87,198,142,225,57,237,70,60,43,149,209,45,244,183,152,48,150,227, +98,115,52,35,64,46,45,154,154,204,155,185,250,96,107,242,184,169,67,249,55,25,116,104,71,62,29,227,200,105, +8,52,5,203,191,129,188,16,142,210,200,216,102,234,169,109,17,12,181,202,73,203,223,138,60,194,28,242,148,64, +214,110,98,254,215,231,39,164,10,33,208,118,2,37,151,235,243,221,173,55,15,82,1,218,145,48,64,208,18,24, +67,143,74,146,185,222,218,109,236,16,245,225,102,215,110,154,171,213,62,217,56,141,213,234,144,116,139,242,93,7, +165,120,8,28,227,195,119,246,183,127,207,253,27,27,248,94,236,162,107,247,71,116,187,175,201,83,211,164,210,84, +0,90,232,194,23,247,223,141,161,15,147,126,67,234,221,147,19,249,155,83,230,15,80,145,190,115,254,217,111,87, +87,201,93,19,58,22,100,131,127,149,164,208,201,154,40,89,251,41,246,228,170,217,148,164,245,182,223,232,180,206, +122,252,231,187,38,225,60,154,221,251,223,234,217,141,206,163,81,136,139,16,81,56,83,89,24,103,205,76,167,209, +68,192,72,109,243,59,143,22,119,242,122,171,201,31,227,67,21,233,205,195,148,204,136,118,111,129,197,196,176,120, +34,82,95,167,80,234,198,242,39,201,252,226,15,145,21,93,221,199,249,84,103,81,230,147,86,214,35,13,190,41, +234,35,181,166,24,200,28,131,61,215,215,209,85,52,139,242,251,222,84,6,235,180,219,255,209,227,191,137,198,143, +107,250,24,148,34,77,78,125,14,170,172,118,67,237,64,111,45,145,173,85,81,0,48,204,202,154,164,158,175,91, +69,166,255,138,145,11,103,72,7,241,71,156,184,103,1,118,245,188,87,76,111,50,153,200,60,242,20,116,163,79, +73,249,75,186,142,76,145,230,26,250,133,66,234,79,102,250,174,247,113,153,229,16,224,205,66,21,49,35,240,112, +205,40,215,243,172,40,50,248,116,87,139,36,139,56,228,48,129,110,62,238,177,73,221,57,3,254,16,15,242,96, +102,245,120,113,215,232,116,81,96,45,134,133,109,193,27,105,56,142,150,25,168,195,108,51,13,177,191,252,207,219, +237,246,105,163,221,160,238,248,71,239,207,77,201,3,253,226,11,51,97,128,172,255,115,174,199,81,216,112,17,148, +107,10,193,27,15,127,7,90,122,171,141,149,49,40,85,188,178,94,183,138,236,237,149,161,200,117,26,141,75,228, +79,105,232,46,250,178,137,247,183,208,75,122,239,172,174,195,133,172,175,77,248,3,152,27,180,74,156,153,8,53, +196,203,4,223,106,49,82,152,42,148,78,217,19,215,70,51,139,195,69,157,107,76,251,6,125,138,174,71,72,224, +89,222,74,212,228,11,97,205,171,25,50,202,10,14,30,133,179,145,123,250,8,168,53,126,139,192,123,234,150,59, +216,243,12,105,24,230,172,187,27,102,123,241,59,157,78,177,248,210,178,243,112,87,195,134,156,63,180,206,189,100, +17,142,176,13,125,72,12,102,111,153,115,81,218,104,157,102,22,77,202,180,208,85,145,236,217,100,167,131,108,245, +170,167,211,35,137,206,134,113,110,55,46,146,76,87,6,174,83,85,118,234,140,66,63,154,230,235,59,8,44,35, +101,6,135,18,68,50,223,62,153,164,222,6,4,38,191,156,199,155,64,182,156,176,25,205,150,12,21,10,221,146, +41,100,89,118,18,220,226,51,171,233,233,74,152,20,146,103,98,88,194,26,123,123,149,186,221,110,111,139,189,108, +242,227,64,107,180,186,153,53,68,75,82,122,87,59,247,187,5,231,135,19,12,191,50,155,200,113,204,116,155,44, +67,108,41,197,172,120,104,183,28,218,11,117,150,47,103,123,115,91,99,92,247,16,139,55,78,26,135,184,219,67, +17,245,56,253,231,240,121,152,45,112,44,52,57,63,198,111,253,14,27,159,118,187,73,78,94,85,196,220,49,90, +187,115,246,56,188,50,3,182,109,14,18,25,186,255,120,216,56,94,89,6,20,20,234,62,164,2,157,211,62,202, +104,79,80,143,40,66,20,32,195,168,197,22,171,157,200,191,107,183,45,164,253,130,39,170,113,249,137,182,196,79, +110,19,28,236,217,192,83,250,96,158,217,124,160,0,234,76,74,244,110,174,170,113,251,54,191,238,19,216,229,121, +208,232,18,101,72,70,159,130,78,59,4,185,189,43,109,66,181,172,179,23,75,103,33,218,8,87,187,228,169,144, +127,73,74,6,23,150,184,114,145,212,142,245,40,145,228,168,102,62,133,2,207,145,248,141,145,10,174,110,242,193, +251,176,68,218,222,216,123,87,186,194,178,251,23,133,25,164,19,88,123,227,0,92,183,138,248,135,173,235,108,147, +221,128,117,86,246,113,68,190,6,255,14,25,52,241,152,20,215,251,250,218,209,15,74,114,185,245,49,124,35,78, +110,211,112,209,3,79,93,253,18,229,77,98,11,170,107,74,127,180,116,252,193,196,94,89,113,231,243,38,167,149, +124,124,86,71,218,222,249,246,10,111,51,131,108,83,130,107,52,27,251,68,2,170,206,8,226,65,195,21,144,147, +174,183,67,50,24,26,236,214,152,72,221,201,243,100,46,108,103,19,130,167,64,251,85,208,62,164,119,152,33,78, +255,22,37,241,159,161,11,22,225,177,213,193,246,36,46,192,251,58,191,213,58,54,109,206,254,205,168,178,149,34, +134,9,76,148,19,10,160,241,19,169,134,133,221,18,39,133,25,243,83,178,108,196,26,241,199,60,105,232,152,116, +136,198,179,240,38,28,112,45,21,166,75,249,11,106,13,168,148,173,39,39,166,161,244,67,241,183,70,52,14,216, +62,194,165,12,188,158,127,198,131,202,88,24,156,255,114,243,255,3,194,240,218,116,202,121,0,0}; void startGui(AsyncWebServerRequest *request) { @@ -407,6 +406,4 @@ void startGui(AsyncWebServerRequest *request) request->send(response); } - - #endif