From b53204293771454b14645ae97fe0cf1bc892203c Mon Sep 17 00:00:00 2001 From: akmaily Date: Tue, 23 Apr 2024 16:17:05 +0200 Subject: [PATCH 01/47] Settings menu without bugs Deleted all unecessary code in the settingspopup.hpp --- src/settingspopup.hpp | 60 ++++--------------------------------------- 1 file changed, 5 insertions(+), 55 deletions(-) diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index 809a4780..3b5d278d 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -33,71 +33,21 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, newconfig["text"]["scale"] = fontscale; } - // #################################################################################### - // Button Size - // #################################################################################### - static float ButtonSizeX = load_json(config, "button", "sizex"); - static float ButtonSizeY = load_json(config, "button", "sizey"); - ImGui::TextUnformatted( - load_json(language, "settings", "buttonexplain").c_str()); - ImGui::TextUnformatted( - load_json(language, "general", "width").c_str()); - ImGui::SameLine(); - - float oldButtonSizeX = ButtonSizeX; - float oldButtonSizeY = ButtonSizeY; - ImGui::InputFloat("X##ButtonSizeX", &ButtonSizeX); - - ImGui::SameLine(); - if (ImGui::Button("X+")) { - ButtonSizeX += 10.0f; - } - - ImGui::SameLine(); - if (ImGui::Button("X-")) { - ButtonSizeX -= 10.0f; - } - ImGui::TextUnformatted( - load_json(language, "general", "height").c_str()); - ImGui::SameLine(); - - ImGui::InputFloat("Y##ButtonSizeY", - &ButtonSizeY); // Eingabe-Float für Y-Größe - ImGui::SameLine(); - if (ImGui::Button("Y+")) { - ButtonSizeY += 10.0f; - } - - ImGui::SameLine(); - if (ImGui::Button("Y-")) { - ButtonSizeY -= 10.0f; - } - - if (ImGui::Button(load_json(language, "button", "save").c_str(), - ImVec2(ButtonSizeX, ButtonSizeY))) { + if (ImGui::Button( + load_json(language, "button", "save").c_str())) { write_json_file(configpath, newconfig); config = newconfig; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); if (ImGui::Button( - load_json(language, "button", "cancel").c_str(), - ImVec2(ButtonSizeX, ButtonSizeY))) { + load_json(language, "button", "cancel").c_str())) { ImGui::CloseCurrentPopup(); } ImGui::SameLine(); if (ImGui::Button( - load_json(language, "button", "restore").c_str(), - ImVec2(ButtonSizeX, ButtonSizeY))) { + load_json(language, "button", "restore").c_str())) { newconfig = config; fontscale = load_json(newconfig, "text", "scale"); - ButtonSizeX = load_json(config, "button", "sizex"); - ButtonSizeY = load_json(config, "button", "sizey"); - } - if (oldButtonSizeX != ButtonSizeX || oldButtonSizeY != ButtonSizeY) { - oldButtonSizeX = ButtonSizeX; - oldButtonSizeY = ButtonSizeY; - newconfig["button"]["sizey"] = ButtonSizeY; - newconfig["button"]["sizex"] = ButtonSizeX; } -} +} \ No newline at end of file From 7ef3218cd9352e2da0a1d90c4c1a3386e975c938 Mon Sep 17 00:00:00 2001 From: akmaily Date: Thu, 25 Apr 2024 11:36:36 +0200 Subject: [PATCH 02/47] Used the appLanguage for the settings menu change pragmaonce to ifndef --- src/languages.hpp | 14 +++++++++----- src/main.cpp | 7 +++---- src/settingspopup.hpp | 28 +++++++++++++--------------- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/languages.hpp b/src/languages.hpp index 2a074356..3f52ebfb 100644 --- a/src/languages.hpp +++ b/src/languages.hpp @@ -68,7 +68,8 @@ enum class Key { Browse, Battery_measure, Attitude, - German + German, + FontSize }; inline const std::map englishLan{ @@ -135,7 +136,8 @@ inline const std::map englishLan{ {Key::Browse, "Browse"}, {Key::Battery_measure, "Battery measurement"}, {Key::Attitude, "Attitude"}, - {Key::German, "German"}}; + {Key::German, "German"}, + {Key::FontSize, "Fontsize"}}; inline const std::map germanLan{ {Key::Menu, "Menü"}, @@ -144,8 +146,9 @@ inline const std::map germanLan{ {Key::Settings, "Einstellungen"}, {Key::Reset, "Zurücksetzen"}, {Key::Reset_q, "Zurücksetzen?"}, - {Key::Measure_not_saved, "Die Messung wurde nicht gespeichert!\n" - "Möchten Sie es speichern, bevor Sie es löschen?\n"}, + {Key::Measure_not_saved, + "Die Messung wurde nicht gespeichert!\n" + "Möchten Sie es speichern, bevor Sie es löschen?\n"}, {Key::Version, "Ausführung"}, {Key::Diagnostics, "Diagnose"}, {Key::Compression, "Kompression"}, @@ -201,7 +204,8 @@ inline const std::map germanLan{ {Key::Browse, "Durchsuche"}, {Key::Battery_measure, "Batteriemessung"}, {Key::Attitude, "Einstellung"}, - {Key::German, "Deutch"}}; + {Key::German, "Deutch"}, + {Key::FontSize, "Schriftgröße"}}; inline auto appLanguage = englishLan; #endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index da29365d..71199743 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -164,8 +164,7 @@ int main() { } ImGui::EndChild(); // end child "Buttonstripe" // ############################ Settings Menu - std::string settingstitle = - load_json(language, "settings", "title"); + std::string settingstitle = appLanguage[Key::Settings]; if (open_settings) { ImGui::OpenPopup(settingstitle.c_str()); open_settings = false; @@ -200,10 +199,10 @@ int main() { ImPlot::SetupAxesLimits(0, 10, -10, 200); ImPlot::SetupAxisTicks(ImAxis_Y1, -10, 200, 22, nullptr, true); } - }); + }); ImGui::EndChild(); // end child Record Data ImGui::PopStyleVar(); - PopPlotRegionColors(); + PopPlotRegionColors(); // ############################ Devicelist SetDeviceMenuStyle(); diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index 3b5d278d..296bce09 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -1,6 +1,8 @@ -#pragma once +#ifndef SETTINGS_H +#define SETTINGS_H #include "jasonhandler.hpp" +#include "languages.hpp" #include #include #include @@ -8,19 +10,16 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, std::string const &configpath) { + static nlohmann::json newconfig = config; static float fontscale; - static nlohmann::json newconfig = 0; - if (newconfig == 0) { - newconfig = config; - } + if (fontscale < load_json(newconfig, "text", "minscale")) { fontscale = load_json(newconfig, "text", "minscale"); } ImGuiIO &io = ImGui::GetIO(); io.FontGlobalScale = fontscale; - std::string fontscalestring = fmt::format( - "{} {:.1f}", load_json(language, "settings", "fontsize"), - fontscale); + std::string fontscalestring = + fmt::format("{} {:.1f}", appLanguage[Key::FontSize], fontscale); ImGui::TextUnformatted(fontscalestring.c_str()); ImGui::SameLine(); if (ImGui::Button("+")) { @@ -33,21 +32,20 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, newconfig["text"]["scale"] = fontscale; } - if (ImGui::Button( - load_json(language, "button", "save").c_str())) { + if (ImGui::Button(appLanguage[Key::Save])) { write_json_file(configpath, newconfig); config = newconfig; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); - if (ImGui::Button( - load_json(language, "button", "cancel").c_str())) { + if (ImGui::Button(appLanguage[Key::Back])) { ImGui::CloseCurrentPopup(); } ImGui::SameLine(); - if (ImGui::Button( - load_json(language, "button", "restore").c_str())) { + if (ImGui::Button(appLanguage[Key::Reset])) { newconfig = config; fontscale = load_json(newconfig, "text", "scale"); } -} \ No newline at end of file +} + +#endif // SETTING_H \ No newline at end of file From 7fbe7fad1bc04aef7a6b3ce5be343b9d36a67273 Mon Sep 17 00:00:00 2001 From: akmaily Date: Thu, 25 Apr 2024 12:42:39 +0200 Subject: [PATCH 03/47] Added the language options into the settings menu for a better userflow --- src/languages.hpp | 9 ++++++--- src/settingspopup.hpp | 14 +++++++++++++ src/style.cpp | 47 +++++++++++++++---------------------------- 3 files changed, 36 insertions(+), 34 deletions(-) diff --git a/src/languages.hpp b/src/languages.hpp index 3f52ebfb..2bc0d9b5 100644 --- a/src/languages.hpp +++ b/src/languages.hpp @@ -69,7 +69,8 @@ enum class Key { Battery_measure, Attitude, German, - FontSize + FontSize, + SettingsText }; inline const std::map englishLan{ @@ -137,7 +138,8 @@ inline const std::map englishLan{ {Key::Battery_measure, "Battery measurement"}, {Key::Attitude, "Attitude"}, {Key::German, "German"}, - {Key::FontSize, "Fontsize"}}; + {Key::FontSize, "Fontsize"}, + {Key::SettingsText, "Set you personal settings for the software"}}; inline const std::map germanLan{ {Key::Menu, "Menü"}, @@ -205,7 +207,8 @@ inline const std::map germanLan{ {Key::Battery_measure, "Batteriemessung"}, {Key::Attitude, "Einstellung"}, {Key::German, "Deutch"}, - {Key::FontSize, "Schriftgröße"}}; + {Key::FontSize, "Schriftgröße"}, + {Key::SettingsText, "Legen sie hier ihre persönlichen Einstellungen fest"}}; inline auto appLanguage = englishLan; #endif \ No newline at end of file diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index 296bce09..4045ca26 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -13,6 +13,9 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, static nlohmann::json newconfig = config; static float fontscale; + ImGui::Text(appLanguage[Key::SettingsText]); + ImGui::Text(" "); + if (fontscale < load_json(newconfig, "text", "minscale")) { fontscale = load_json(newconfig, "text", "minscale"); } @@ -32,6 +35,16 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, newconfig["text"]["scale"] = fontscale; } + if (ImGui::TreeNode(appLanguage[Key::LanOption])) { + if (ImGui::Button(appLanguage[Key::English])) { + appLanguage = englishLan; + } + if (ImGui::Button(appLanguage[Key::German])) { + appLanguage = germanLan; + } + ImGui::TreePop(); + } + if (ImGui::Button(appLanguage[Key::Save])) { write_json_file(configpath, newconfig); config = newconfig; @@ -45,6 +58,7 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, if (ImGui::Button(appLanguage[Key::Reset])) { newconfig = config; fontscale = load_json(newconfig, "text", "scale"); + appLanguage = germanLan; } } diff --git a/src/style.cpp b/src/style.cpp index 600af770..18478ad2 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -118,22 +118,23 @@ void set_button_style_to(const nlohmann::json &config, } void PushPlotRegionColors() { - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.0f, 0.0f, 0.0f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.0f, 0.0f, 0.0f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(1.0f, 1.0f, 0.93f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.941f, 0.941f, 0.941f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); - - ImPlot::PushStyleColor(ImPlotCol_PlotBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); - ImPlot::PushStyleColor(ImPlotCol_AxisBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); - ImPlot::PushStyleColor(ImPlotCol_AxisBgHovered, ImVec4(0.61f, 0.61f, 0.61f, 1.0f)); - ImPlot::PushStyleColor(ImPlotCol_AxisBgActive, ImVec4(0.36f, 0.36f, 0.36f, 1.0f)); - ImPlot::PushStyleColor(ImPlotCol_Line, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); - ImPlot::PushStyleColor(ImPlotCol_TitleText, ImVec4(0.0f, 0.0f, 0.0f, 1.0f)); - ImPlot::PushStyleColor(ImPlotCol_AxisGrid, ImVec4(0.0f, 0.0f, 0.0f, 1.0f)); - + ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.941f, 0.941f, 0.941f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); + + ImPlot::PushStyleColor(ImPlotCol_PlotBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); + ImPlot::PushStyleColor(ImPlotCol_AxisBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); + ImPlot::PushStyleColor(ImPlotCol_AxisBgHovered, + ImVec4(0.61f, 0.61f, 0.61f, 1.0f)); + ImPlot::PushStyleColor(ImPlotCol_AxisBgActive, + ImVec4(0.36f, 0.36f, 0.36f, 1.0f)); + ImPlot::PushStyleColor(ImPlotCol_Line, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); + ImPlot::PushStyleColor(ImPlotCol_TitleText, ImVec4(0.0f, 0.0f, 0.0f, 1.0f)); + ImPlot::PushStyleColor(ImPlotCol_AxisGrid, ImVec4(0.0f, 0.0f, 0.0f, 1.0f)); } -void PopPlotRegionColors(){ +void PopPlotRegionColors() { ImGui::PopStyleColor(5); ImPlot::PopStyleColor(7); } @@ -329,22 +330,6 @@ void set_side_menu(const nlohmann::json &config, bool &flagPaused, ImGui::ImageButtonWithText( (void *)(intptr_t)image_texture[PngRenderedCnt], appLanguage[Key::Attitude])) { - showSettings = !showSettings; - } - if (showSettings && !showSettingsPrev) - ImGui::SetNextItemOpen(false); - if (showSettings && ImGui::TreeNode(appLanguage[Key::LanOption])) { - if (ImGui::Button(appLanguage[Key::English])) { - appLanguage = englishLan; - showSettings = false; - } - if (ImGui::Button(appLanguage[Key::German])) { - appLanguage = germanLan; - showSettings = false; - } - ImGui::TreePop(); - } - if (showSettings && ImGui::Button(appLanguage[Key::Settings])) { open_settings = true; showSettings = false; } @@ -371,7 +356,7 @@ void PopupStyleEditor() { static std::vector colorVec; static std::vector plotColors; - if (colorVec.empty() && plotColors.empty()) { + if (colorVec.empty() && plotColors.empty()) { for (const auto &element : style.Colors) colorVec.push_back(element); for (const auto &element : styleImPlot.Colors) From 1daf6bc3088bfe49ee521423d91a049dc35d5cb4 Mon Sep 17 00:00:00 2001 From: akmaily Date: Thu, 25 Apr 2024 14:21:11 +0200 Subject: [PATCH 04/47] Fixed typo --- src/languages.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages.hpp b/src/languages.hpp index 2bc0d9b5..ea6b2341 100644 --- a/src/languages.hpp +++ b/src/languages.hpp @@ -139,7 +139,7 @@ inline const std::map englishLan{ {Key::Attitude, "Attitude"}, {Key::German, "German"}, {Key::FontSize, "Fontsize"}, - {Key::SettingsText, "Set you personal settings for the software"}}; + {Key::SettingsText, "Set your personal settings for the software"}}; inline const std::map germanLan{ {Key::Menu, "Menü"}, From 10d0e81443582b9b64579b84d5699dfba75186d8 Mon Sep 17 00:00:00 2001 From: akmaily Date: Fri, 3 May 2024 10:50:57 +0200 Subject: [PATCH 05/47] Saving the fontsize is now fixed. --- config/config.json | 4 ++-- src/settingspopup.hpp | 40 +++++++++++++++++++++------------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/config/config.json b/config/config.json index fcc719d0..bdf2bfc5 100644 --- a/config/config.json +++ b/config/config.json @@ -111,8 +111,8 @@ } }, "font": "comicsans", - "minscale": 1, - "scale": 1.2 + "minscale": 1.0, + "scale": 1.0 }, "title": "Omniview 0.5", "window": { diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index 3b5d278d..1e088361 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -8,46 +8,48 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, std::string const &configpath) { - static float fontscale; - static nlohmann::json newconfig = 0; - if (newconfig == 0) { - newconfig = config; - } - if (fontscale < load_json(newconfig, "text", "minscale")) { - fontscale = load_json(newconfig, "text", "minscale"); - } + + static float tempfontscale; + ImGuiIO &io = ImGui::GetIO(); - io.FontGlobalScale = fontscale; + + if (tempfontscale < load_json(config, "text", "minscale")) { + tempfontscale = load_json(config, "text", "minscale"); + } + std::string fontscalestring = fmt::format( "{} {:.1f}", load_json(language, "settings", "fontsize"), - fontscale); + tempfontscale); ImGui::TextUnformatted(fontscalestring.c_str()); ImGui::SameLine(); + + if (ImGui::Button("+")) { - fontscale += 0.1f; - newconfig["text"]["scale"] = fontscale; + tempfontscale += 0.1f; + io.FontGlobalScale = tempfontscale; } ImGui::SameLine(); - if (ImGui::Button("-")) { - fontscale -= 0.1f; - newconfig["text"]["scale"] = fontscale; + if (ImGui::Button("-") && (tempfontscale > 1.0f)) { + tempfontscale -= 0.1f; + io.FontGlobalScale = tempfontscale; } if (ImGui::Button( load_json(language, "button", "save").c_str())) { - write_json_file(configpath, newconfig); - config = newconfig; + config["text"]["scale"] = tempfontscale; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); if (ImGui::Button( load_json(language, "button", "cancel").c_str())) { + io.FontGlobalScale = config["text"]["scale"]; + tempfontscale = config["text"]["scale"]; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); if (ImGui::Button( load_json(language, "button", "restore").c_str())) { - newconfig = config; - fontscale = load_json(newconfig, "text", "scale"); + io.FontGlobalScale = config["text"]["minscale"]; + tempfontscale = config["text"]["minscale"]; } } \ No newline at end of file From 46b090d97327c6ea2879c391fa5b8770a270578f Mon Sep 17 00:00:00 2001 From: akmaily Date: Fri, 3 May 2024 12:24:55 +0200 Subject: [PATCH 06/47] Languages now have to be saved and the popupwindow does not close when the languages are changed --- src/main.cpp | 2 +- src/settingspopup.hpp | 40 +++++++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 79e6af50..0f502186 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -160,7 +160,7 @@ int main() { if (ImGui::BeginPopupModal(settingstitle.c_str(), nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::SetItemDefaultFocus(); - popup_settings(config, language, configpath); + popup_settings(config, language, configpath, open_settings); ImGui::EndPopup(); } // Generate training data popup diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index d671d709..37406502 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -9,27 +9,26 @@ #include static void popup_settings(nlohmann::json &config, nlohmann::json &language, - std::string const &configpath) { + std::string const &configpath, bool &open_settings) { static float tempfontscale; + static std::map tempLan = appLanguage; ImGuiIO &io = ImGui::GetIO(); ImGui::Text(appLanguage[Key::SettingsText]); ImGui::Text(" "); - if (tempfontscale < load_json(config, "text", "minscale")) { + if (tempfontscale < load_json(config, "text", "minscale")) { tempfontscale = load_json(config, "text", "minscale"); } - std::string fontscalestring = fmt::format( - "{} {:.1f}", appLanguage[Key::FontSize], - tempfontscale); - + std::string fontscalestring = + fmt::format("{} {:.1f}", appLanguage[Key::FontSize], tempfontscale); + ImGui::TextUnformatted(fontscalestring.c_str()); ImGui::SameLine(); - if (ImGui::Button("+")) { tempfontscale += 0.1f; io.FontGlobalScale = tempfontscale; @@ -43,31 +42,38 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, if (ImGui::TreeNode(appLanguage[Key::LanOption])) { if (ImGui::Button(appLanguage[Key::English])) { - appLanguage = englishLan; + if (englishLan != appLanguage) { + appLanguage = englishLan; + open_settings = true; + } } if (ImGui::Button(appLanguage[Key::German])) { - appLanguage = germanLan; + if (germanLan != appLanguage) { + appLanguage = germanLan; + open_settings = true; + } } ImGui::TreePop(); } - if (ImGui::Button( - appLanguage[Key::Save])) { - config["text"]["scale"] = tempfontscale; + if (ImGui::Button(appLanguage[Key::Save])) { + config["text"]["scale"] = tempfontscale; + tempLan = appLanguage; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); - if (ImGui::Button( - appLanguage[Key::Back])) { - io.FontGlobalScale = config["text"]["scale"]; - tempfontscale = config["text"]["scale"]; + if (ImGui::Button(appLanguage[Key::Back])) { + io.FontGlobalScale = config["text"]["scale"]; + tempfontscale = config["text"]["scale"]; + appLanguage = tempLan; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); if (ImGui::Button(appLanguage[Key::Reset])) { io.FontGlobalScale = config["text"]["minscale"]; - tempfontscale = config["text"]["minscale"]; + tempfontscale = config["text"]["minscale"]; appLanguage = germanLan; + tempLan = germanLan; } } From 276d06dfd7e398c0818cc35020592e868d66dc55 Mon Sep 17 00:00:00 2001 From: akmaily Date: Fri, 3 May 2024 17:11:41 +0200 Subject: [PATCH 07/47] Test to see if the fontsize is now saved in the config --- src/settingspopup.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index 37406502..fa8b702b 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -13,6 +13,7 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, static float tempfontscale; static std::map tempLan = appLanguage; + static nlohmann::json newconfig = config; ImGuiIO &io = ImGui::GetIO(); @@ -57,7 +58,9 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, } if (ImGui::Button(appLanguage[Key::Save])) { - config["text"]["scale"] = tempfontscale; + newconfig["text"]["scale"] = tempfontscale; + write_json_file(configpath, config); + config = newconfig; tempLan = appLanguage; ImGui::CloseCurrentPopup(); } From 5a341f86001d04001e3e4bd23f3238c03da7e831 Mon Sep 17 00:00:00 2001 From: akmaily Date: Wed, 8 May 2024 11:01:33 +0200 Subject: [PATCH 08/47] Saving the fontsize in the config and initalizing the config when the application starts --- config/config.json | 16 ++++++++-------- src/handler.cpp | 13 ++++++++++--- src/handler.hpp | 1 + src/main.cpp | 17 ++++++++++++----- src/settingspopup.hpp | 8 ++++---- 5 files changed, 35 insertions(+), 20 deletions(-) diff --git a/config/config.json b/config/config.json index bdf2bfc5..6cfebbc9 100644 --- a/config/config.json +++ b/config/config.json @@ -6,13 +6,6 @@ "input2": "scan_type", "url": "https://postapi.aw4null.de/v1/uploadFile/" }, - "helplink": "https://moodle.aw4null.de/", - "github": { - "url": { - "config": "https://raw.githubusercontent.com/skunkforce/omniview/master/config/config.json", - "language": "https://raw.githubusercontent.com/skunkforce/omniview/master/languages/Deutsch.json" - } - }, "button": { "sizex": 0.0, "sizey": 0.0, @@ -78,6 +71,13 @@ } }, "firststart": true, + "github": { + "url": { + "config": "https://raw.githubusercontent.com/skunkforce/omniview/master/config/config.json", + "language": "https://raw.githubusercontent.com/skunkforce/omniview/master/languages/Deutsch.json" + } + }, + "helplink": "https://moodle.aw4null.de/", "language": "Deutsch", "languagepath": "languages/", "menubar": { @@ -112,7 +112,7 @@ }, "font": "comicsans", "minscale": 1.0, - "scale": 1.0 + "scale": 1.4000000953674316 }, "title": "Omniview 0.5", "window": { diff --git a/src/handler.cpp b/src/handler.cpp index 29e5e818..455ea16b 100644 --- a/src/handler.cpp +++ b/src/handler.cpp @@ -1,7 +1,7 @@ -#include -#include #include "handler.hpp" #include "get_from_github.hpp" +#include +#include void addPlots(const char *name, const bool flagPaused, std::function axesSetup) { @@ -141,13 +141,20 @@ void set_config(const std::string &configpath) { } void set_json(nlohmann::json &config) { if (std::filesystem::exists(load_json(config, ("languagepath")))) - fmt::print("Found language: {}\n\r",appLanguage[Key::German]); + fmt::print("Found language: {}\n\r", appLanguage[Key::German]); else { fmt::print("Did not find {}.\n Download from Github\n\r", appLanguage[Key::German]); update_language_from_github(); } } + +void set_inital_config(nlohmann::json &config) { + ImGuiIO &io = ImGui::GetIO(); + io.FontGlobalScale = config["text"]["scale"]; + fmt::print("{}\n", config["text"]["scale"].dump()); +} + void rstSettings() { sampler.reset(); devices.clear(); diff --git a/src/handler.hpp b/src/handler.hpp index 05218e42..456257d6 100644 --- a/src/handler.hpp +++ b/src/handler.hpp @@ -22,6 +22,7 @@ void initDevices(); void devicesList(); void set_config(const std::string &); void set_json(nlohmann::json &); +void set_inital_config(nlohmann::json &); void rstSettings(); #endif diff --git a/src/main.cpp b/src/main.cpp index 0f502186..153eac55 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,7 +4,7 @@ #include int main() { - const std::string configpath = "config/config.json"; + const std::string configpath = "../config/config.json"; set_config(configpath); nlohmann::json config = load_json_file(configpath); set_json(config); @@ -22,9 +22,14 @@ int main() { static bool flagPaused = true; bool flagDataNotSaved = true; bool Development = false; + bool flagInitStayed = true; // main loop auto render = [&]() { + if (flagInitStayed) { + set_inital_config(config); + flagInitStayed = false; + } SetupImGuiStyle(false, 0.99f, config); ImGui::SetNextWindowPos({0.f, 0.f}); auto windowSize{ImGui::GetIO().DisplaySize}; @@ -47,7 +52,7 @@ int main() { ImGui::BeginChild("Left Side", {windowSize.x * .18f, 0.f}); set_side_menu(config, flagPaused, open_settings, open_generate_training_data); - // there're four "BeginChild"s, one as the left side + // there're four "BeginChild"s, one as the left side // and three on the right side ImGui::EndChild(); // end child "Left Side" ImGui::SameLine(); @@ -116,7 +121,7 @@ int main() { set_button_style_to(config, "stop"); if (ImGui::Button(appLanguage[Key::Reset], toolBtnSize)) { - if (flagDataNotSaved) + if (flagDataNotSaved) ImGui::OpenPopup(appLanguage[Key::Reset_q]); else { rstSettings(); @@ -128,7 +133,8 @@ int main() { ImGui::SameLine(); // gray out "Save" button when pop-up is open - const bool pushStyle = ImGui::IsPopupOpen(appLanguage[Key::Save_Recorded_Data]); + const bool pushStyle = + ImGui::IsPopupOpen(appLanguage[Key::Save_Recorded_Data]); if (pushStyle) ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); @@ -209,6 +215,7 @@ int main() { ImGuiInstance window{1500, 800, fmt::format("{} {}", CMakeGitVersion::Target::Name, CMakeGitVersion::Project::Version)}; - while (window.run(render)); + while (window.run(render)) + ; return 0; } \ No newline at end of file diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index fa8b702b..010e8e93 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -11,9 +11,9 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, std::string const &configpath, bool &open_settings) { - static float tempfontscale; + static float tempfontscale = config["text"]["scale"]; static std::map tempLan = appLanguage; - static nlohmann::json newconfig = config; + static nlohmann::json newconfig = config; ImGuiIO &io = ImGui::GetIO(); @@ -59,8 +59,8 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, if (ImGui::Button(appLanguage[Key::Save])) { newconfig["text"]["scale"] = tempfontscale; - write_json_file(configpath, config); - config = newconfig; + config = newconfig; + write_json_file(configpath, config); tempLan = appLanguage; ImGui::CloseCurrentPopup(); } From d830d9a3243fdb99b52dd73980b1274fa1c874e6 Mon Sep 17 00:00:00 2001 From: akmaily Date: Wed, 8 May 2024 11:17:03 +0200 Subject: [PATCH 09/47] The settings menu now stays open when the language option is changed --- src/handler.cpp | 1 - src/main.cpp | 14 +++++++++----- src/settingspopup.hpp | 18 +++++++----------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/handler.cpp b/src/handler.cpp index 455ea16b..e2bacaf2 100644 --- a/src/handler.cpp +++ b/src/handler.cpp @@ -152,7 +152,6 @@ void set_json(nlohmann::json &config) { void set_inital_config(nlohmann::json &config) { ImGuiIO &io = ImGui::GetIO(); io.FontGlobalScale = config["text"]["scale"]; - fmt::print("{}\n", config["text"]["scale"].dump()); } void rstSettings() { diff --git a/src/main.cpp b/src/main.cpp index 153eac55..57e6b9a3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -157,16 +157,20 @@ int main() { ImGui::PopStyleColor(); } ImGui::EndChild(); // end child "Buttonstripe" - // ############################ Settings Menu - std::string settingstitle = appLanguage[Key::Settings]; + // ############################ Settings Menu + // ############################ Settings Menu + static std::vector titles{ + (std::string)englishLan.find(Key::Settings)->second + "###ID", + (std::string)germanLan.find(Key::Settings)->second + "###ID"}; + static int title = 0; if (open_settings) { - ImGui::OpenPopup(settingstitle.c_str()); + ImGui::OpenPopup(titles[title].c_str()); open_settings = false; } - if (ImGui::BeginPopupModal(settingstitle.c_str(), nullptr, + if (ImGui::BeginPopupModal(titles[title].c_str(), nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::SetItemDefaultFocus(); - popup_settings(config, language, configpath, open_settings); + popup_settings(config, language, configpath, title); ImGui::EndPopup(); } // Generate training data popup diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index 010e8e93..cb4fe5f0 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -9,7 +9,7 @@ #include static void popup_settings(nlohmann::json &config, nlohmann::json &language, - std::string const &configpath, bool &open_settings) { + std::string const &configpath, int &title) { static float tempfontscale = config["text"]["scale"]; static std::map tempLan = appLanguage; @@ -42,17 +42,13 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, } if (ImGui::TreeNode(appLanguage[Key::LanOption])) { - if (ImGui::Button(appLanguage[Key::English])) { - if (englishLan != appLanguage) { - appLanguage = englishLan; - open_settings = true; - } + if (ImGui::Button(appLanguage[Key::English]) && englishLan != appLanguage) { + appLanguage = englishLan; + title = 0; // English index } - if (ImGui::Button(appLanguage[Key::German])) { - if (germanLan != appLanguage) { - appLanguage = germanLan; - open_settings = true; - } + if (ImGui::Button(appLanguage[Key::German]) && germanLan != appLanguage) { + appLanguage = germanLan; + title = 1; // German index } ImGui::TreePop(); } From 088f9306d1af4454e379b8cb3c62962e0d9d462b Mon Sep 17 00:00:00 2001 From: akmaily Date: Wed, 8 May 2024 12:46:02 +0200 Subject: [PATCH 10/47] The language is now saved in the config and will be initialized when the application starts --- config/config.json | 3 ++- src/handler.cpp | 4 ++++ src/settingspopup.hpp | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/config/config.json b/config/config.json index 6cfebbc9..ac04f173 100644 --- a/config/config.json +++ b/config/config.json @@ -96,6 +96,7 @@ }, "scanfolder": "saves", "text": { + "active_language": "German", "color": { "inactive": { "blue": 0.5, @@ -112,7 +113,7 @@ }, "font": "comicsans", "minscale": 1.0, - "scale": 1.4000000953674316 + "scale": 1.5000001192092896 }, "title": "Omniview 0.5", "window": { diff --git a/src/handler.cpp b/src/handler.cpp index e2bacaf2..ad2686e1 100644 --- a/src/handler.cpp +++ b/src/handler.cpp @@ -152,6 +152,10 @@ void set_json(nlohmann::json &config) { void set_inital_config(nlohmann::json &config) { ImGuiIO &io = ImGui::GetIO(); io.FontGlobalScale = config["text"]["scale"]; + if(config["text"]["active_language"] == "German"){ + appLanguage = germanLan; + } + else appLanguage = englishLan; } void rstSettings() { diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index cb4fe5f0..bc6b1dbb 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -55,6 +55,10 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, if (ImGui::Button(appLanguage[Key::Save])) { newconfig["text"]["scale"] = tempfontscale; + if (appLanguage == germanLan) { + newconfig["text"]["active_language"] = "German"; + } else + newconfig["text"]["active_language"] = "English"; config = newconfig; write_json_file(configpath, config); tempLan = appLanguage; From e000c89b33c335466c455a7e7df819c1e74f90f8 Mon Sep 17 00:00:00 2001 From: akmaily Date: Wed, 8 May 2024 15:28:42 +0200 Subject: [PATCH 11/47] Language Tree automatically closes when language is chosen --- src/settingspopup.hpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index bc6b1dbb..321ef824 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -41,14 +41,22 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, io.FontGlobalScale = tempfontscale; } - if (ImGui::TreeNode(appLanguage[Key::LanOption])) { + static bool treeopen = true; + + if (!treeopen) { + ImGui::SetNextItemOpen(false); + treeopen = true; + } + if (ImGui::TreeNode(appLanguage[Key::LanOption]) && treeopen) { if (ImGui::Button(appLanguage[Key::English]) && englishLan != appLanguage) { appLanguage = englishLan; title = 0; // English index + treeopen = false; } if (ImGui::Button(appLanguage[Key::German]) && germanLan != appLanguage) { appLanguage = germanLan; title = 1; // German index + treeopen = false; } ImGui::TreePop(); } @@ -62,6 +70,7 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, config = newconfig; write_json_file(configpath, config); tempLan = appLanguage; + treeopen = false; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); @@ -69,6 +78,7 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, io.FontGlobalScale = config["text"]["scale"]; tempfontscale = config["text"]["scale"]; appLanguage = tempLan; + treeopen = false; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); @@ -77,6 +87,7 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, tempfontscale = config["text"]["minscale"]; appLanguage = germanLan; tempLan = germanLan; + treeopen = false; } } From e58b4ed2e3ef1c323cd407a5c7b794ce744cfaf6 Mon Sep 17 00:00:00 2001 From: akmaily Date: Wed, 8 May 2024 15:35:10 +0200 Subject: [PATCH 12/47] test if configpath is the reasons for the crash on linux --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 57e6b9a3..3e749f1f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,7 +4,7 @@ #include int main() { - const std::string configpath = "../config/config.json"; + const std::string configpath = "config/config.json"; set_config(configpath); nlohmann::json config = load_json_file(configpath); set_json(config); From ac34aa2467d6eb8cef494a1598d2156cc4ae5080 Mon Sep 17 00:00:00 2001 From: akmaily Date: Wed, 8 May 2024 15:40:16 +0200 Subject: [PATCH 13/47] Simplified the language options as suggested --- src/handler.cpp | 6 ++---- src/settingspopup.hpp | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/handler.cpp b/src/handler.cpp index ad2686e1..c8a25651 100644 --- a/src/handler.cpp +++ b/src/handler.cpp @@ -152,10 +152,8 @@ void set_json(nlohmann::json &config) { void set_inital_config(nlohmann::json &config) { ImGuiIO &io = ImGui::GetIO(); io.FontGlobalScale = config["text"]["scale"]; - if(config["text"]["active_language"] == "German"){ - appLanguage = germanLan; - } - else appLanguage = englishLan; + appLanguage = + config["text"]["active_language"] == "German" ? germanLan : englishLan; } void rstSettings() { diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index 321ef824..13200e37 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -63,10 +63,8 @@ static void popup_settings(nlohmann::json &config, nlohmann::json &language, if (ImGui::Button(appLanguage[Key::Save])) { newconfig["text"]["scale"] = tempfontscale; - if (appLanguage == germanLan) { - newconfig["text"]["active_language"] = "German"; - } else - newconfig["text"]["active_language"] = "English"; + newconfig["text"]["active_language"] = + appLanguage == germanLan ? "German" : "English"; config = newconfig; write_json_file(configpath, config); tempLan = appLanguage; From fba07fb6021479abe89e395d205737a041397c93 Mon Sep 17 00:00:00 2001 From: AKMaily <83161524+AKMaily@users.noreply.github.com> Date: Fri, 10 May 2024 09:36:52 +0200 Subject: [PATCH 14/47] Apply suggestions from code review Co-authored-by: Niklas Pierick <88148756+NP199@users.noreply.github.com> --- src/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 3e749f1f..27e26426 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,7 +22,8 @@ int main() { static bool flagPaused = true; bool flagDataNotSaved = true; bool Development = false; - bool flagInitStayed = true; + bool flagInitState = true; + // main loop auto render = [&]() { From fa54e2c699caaa69d21e2ef2ca886f67519c37bd Mon Sep 17 00:00:00 2001 From: AKMaily <83161524+AKMaily@users.noreply.github.com> Date: Fri, 10 May 2024 09:37:23 +0200 Subject: [PATCH 15/47] Apply suggestions from code review Co-authored-by: Niklas Pierick <88148756+NP199@users.noreply.github.com> --- src/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 27e26426..9ce9ee4c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,7 +27,8 @@ int main() { // main loop auto render = [&]() { - if (flagInitStayed) { + if (flagInitState) { + set_inital_config(config); flagInitStayed = false; } From 463e5d5c43fbea9ab52d718d727d7c479389c418 Mon Sep 17 00:00:00 2001 From: AKMaily <83161524+AKMaily@users.noreply.github.com> Date: Fri, 10 May 2024 09:37:34 +0200 Subject: [PATCH 16/47] Apply suggestions from code review Co-authored-by: Niklas Pierick <88148756+NP199@users.noreply.github.com> --- src/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 9ce9ee4c..a94b56d7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -30,7 +30,8 @@ int main() { if (flagInitState) { set_inital_config(config); - flagInitStayed = false; + flagInitState = false; + } SetupImGuiStyle(false, 0.99f, config); ImGui::SetNextWindowPos({0.f, 0.f}); From 36f154fef43a1152d07bc1a9bb6216c67966a160 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Mon, 13 May 2024 13:24:36 +0330 Subject: [PATCH 17/47] saving process and progress bar --- CMakeLists.txt | 2 +- src/generateTrainingData.cpp | 50 +++++++++--------- src/languages.hpp | 9 ++-- src/main.cpp | 22 ++++---- src/saves_popup.cpp | 100 +++++++++++++++++++++-------------- src/settingspopup.hpp | 6 +-- 6 files changed, 106 insertions(+), 83 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ab9ff6e..f671261b 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,4 +67,4 @@ target_include_directories(OmniView PUBLIC ${LIBUSB_INCLUDE_DIRS}) target_link_libraries(OmniView PUBLIC ${LIBUSB_LIBRARIES}) target_compile_definitions(OmniView PUBLIC BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) -target_compile_features(OmniView PUBLIC cxx_std_20) +target_compile_features(OmniView PUBLIC cxx_std_23) diff --git a/src/generateTrainingData.cpp b/src/generateTrainingData.cpp index f7150bd6..7d042a15 100644 --- a/src/generateTrainingData.cpp +++ b/src/generateTrainingData.cpp @@ -117,31 +117,31 @@ void generateTrainingData( if (!readfile.is_open()) fmt::println("Failed to open file {}", filename); else { - // first and second lines of file - std::string first_line, second_line; - for (size_t i = 0; !readfile.eof(); i++) { - if (i == 0) { - std::getline(readfile, first_line); - first_line.pop_back(); // remove ending new line - std::stringstream ss(first_line); - // extract input fields data from the first line - for (size_t j = 0; j < fieldsSize; j++) { - std::string substr; - std::getline(ss, substr, ','); - FieldsData[j] = substr; - } - } else if (i == 1) - std::getline(readfile, second_line); // device ID - else { - // read measuring values into the vector - constexpr size_t bigNumber{10'000'000}; - readfile.ignore(bigNumber, ','); - double value{}; - readfile >> value; - file_measuring_vals.emplace_back(value); - // at the last loop, the last number is picked and loop goes on - // vector pushes value before eof is reached - } + // first, second and third lines of file + std::string first_line, second_line, third_line; + std::getline(readfile, first_line); + first_line.pop_back(); // remove ending new line + std::stringstream ss(first_line); + // extract input fields data from the first line + for (size_t j = 0; j < fieldsSize; j++) { + std::string substr; + std::getline(ss, substr, ','); + FieldsData[j] = substr; + } + std::getline(readfile, second_line); // device ID + second_line.pop_back(); + std::getline(readfile, third_line); // samplying rate + third_line.pop_back(); + while (!readfile.eof()) { + // read measuring values into the vector + double value{}; + readfile >> value; + file_measuring_vals.emplace_back(value); + static constexpr size_t bigNumber{10'000'000}; + readfile.ignore(bigNumber, ' '); // two spaces between elements + readfile.ignore(bigNumber, ' '); + // at the last loop, the last number is picked, loop + // goes on and vector pushes value before eof is reached } // pop the extra last element file_measuring_vals.pop_back(); diff --git a/src/languages.hpp b/src/languages.hpp index ed2612a0..d37b8c7a 100644 --- a/src/languages.hpp +++ b/src/languages.hpp @@ -78,7 +78,8 @@ enum class Key { German, Ready, FontSize, - SettingsText + SettingsText, + saving }; inline const std::map englishLan{ @@ -155,7 +156,8 @@ inline const std::map englishLan{ {Key::German, "German"}, {Key::Ready, "Ready"}, {Key::FontSize, "Fontsize"}, - {Key::SettingsText, "Set your personal settings for the software"}}; + {Key::SettingsText, "Set your personal settings for the software"}, + {Key::saving, "saving ..."}}; inline const std::map germanLan{ @@ -233,7 +235,8 @@ inline const std::map germanLan{ {Key::German, "Deutsch"}, {Key::Ready, "Bereit"}, {Key::FontSize, "Schriftgröße"}, - {Key::SettingsText, "Legen sie hier ihre persönlichen Einstellungen fest"}}; + {Key::SettingsText, "Legen sie hier ihre persönlichen Einstellungen fest"}, + {Key::saving, "sparen ..."}}; inline auto appLanguage = englishLan; #endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index a94b56d7..6d9ab767 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -24,14 +24,11 @@ int main() { bool Development = false; bool flagInitState = true; - // main loop auto render = [&]() { if (flagInitState) { - set_inital_config(config); flagInitState = false; - } SetupImGuiStyle(false, 0.99f, config); ImGui::SetNextWindowPos({0.f, 0.f}); @@ -108,8 +105,6 @@ int main() { ImGui::PopStyleColor(3); } if (flagPaused) { - ImGui::SameLine(); - // Start/reset the measurement when the measurement is paused, // followed by a query as to whether the old data should be saved if (sampler.has_value()) { @@ -160,14 +155,19 @@ int main() { ImGui::PopStyleColor(); } ImGui::EndChild(); // end child "Buttonstripe" - // ############################ Settings Menu - // ############################ Settings Menu - static std::vector titles{ - (std::string)englishLan.find(Key::Settings)->second + "###ID", - (std::string)germanLan.find(Key::Settings)->second + "###ID"}; + // ############################ Settings Menu static int title = 0; + static std::vector titles(2); // two languages if (open_settings) { - ImGui::OpenPopup(titles[title].c_str()); + const auto EngItr = englishLan.find(Key::Settings); + const auto GrmItr = germanLan.find(Key::Settings); + // check returned value from find() and set titles + if (EngItr != englishLan.end() && GrmItr != germanLan.end()) { + titles[0] = (std::string)EngItr->second + "###ID"; + titles[1] = (std::string)GrmItr->second + "###ID"; + ImGui::OpenPopup(titles[title].c_str()); + } else + fmt::println("Settings values not found."); open_settings = false; } if (ImGui::BeginPopupModal(titles[title].c_str(), nullptr, diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index 98888a7a..4612c735 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "popups.hpp" #include "look_up_saves.hpp" #include "imgui_stdlib.h" @@ -10,34 +11,36 @@ namespace fs = std::filesystem; static void save(const Omniscope::Id &device, const std::vector> &values, - fs::path const &outFile, std::string allData) { - - std::string fileContent = - fmt::format("\n{}-{}\n", device.type, device.serial); - - for (std::size_t i{}; i < values.size(); ++i) { - fileContent += fmt::format("{},", i); - if (values[i].second) - fileContent += fmt::format("{}\n", values[i].second); - } - + const fs::path &outFile, std::string allData, size_t &y_indx) { + + allData += fmt::format("\n{}-{}\nSamplying rate is 100000\n", device.type, + device.serial); + std::string fileContent; + fileContent.resize_and_overwrite( + // five bytes for each y_value, three for the number + // and two spaces as a separator between the numbers + values.size() * 5, [&values, &y_indx](char *begin, std::size_t) { + auto end = begin; + for (; y_indx < values.size(); y_indx++) { + end = std::to_chars(end, end + 3, values[y_indx].second).ptr; + *end++ = ' '; + *end++ = ' '; + } + return end - begin; + }); // create a .csv file to write to it - std::fstream file{outFile}; - file.open(outFile, std::ios::out | std::ios::app); - + std::ofstream file(outFile, std::ios::app); if (!file.is_open()) { file.clear(); fmt::print("Could not create {} for writing!\n", outFile.string()); return; } - fmt::print("Start saving {}.\n", outFile.string()); file << allData << fileContent; file.flush(); file.close(); fmt::print("Finished saving.\n"); } - void saves_popup(nlohmann::json const &config, nlohmann::json const &language, std::map>> &captureData, @@ -161,8 +164,8 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, } // ############# End popup - // create a .csv file name - auto makeFileName = [&](const std::string &name) { + // make a .csv file name + auto mkFileName = [&](const std::string &name) { now = std::chrono::system_clock::now(); now_time_t = std::chrono::system_clock::to_time_t(now); now_tm = *std::gmtime(&now_time_t); @@ -170,8 +173,8 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, return filename; }; - // create a director (if not exists) and return a path to it - auto makeDirectory = [&](bool hasSelectedPath, std::string selectedPath, + // make a directory (if not exists) and return a path to it + auto mkdir = [&](bool hasSelectedPath, std::string selectedPath, std::string second_folder, std::string outFile) { fs::path complete_path; auto first_folder = load_json(config, "scanfolder"); @@ -206,7 +209,7 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, return complete_path / outFile; }; - if (const size_t checkedDvc_cnt = count_checked_devices()) { + if (const size_t checkedDvc_cnt = count_checked_devices()) if (checkedDvc_cnt > 1) { ImGui::SameLine(); ImGui::Dummy({200, 0}); @@ -218,15 +221,19 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, ImGui::PopStyleVar(); ImGui::SetItemTooltip("Add another path"); } -} ImGui::Separator(); ImGui::NewLine(); if (ImGui::Button(appLanguage[Key::Back])) { ImGui::CloseCurrentPopup(); } - ImGui::SameLine(ImGui::GetWindowWidth() - - 100); // Ändern Sie 100 entsprechend Ihrer Anforderungen + ImGui::SameLine(ImGui::GetWindowWidth() - 100.f); // offset from start x + + static std::future future; + static size_t y_indx; // used for the progress bar too + static size_t valuesSize; + static bool progress{false}; + if (ImGui::Button(appLanguage[Key::Save])) { flagDataNotSaved = false; @@ -234,29 +241,42 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, fmt::println("captureData is empty"); ImGui::CloseCurrentPopup(); } - fs::path complete_path; - size_t i{0}; - for (const auto &[device, values] : captureData) { + fs::path path; + for (size_t i{}; const auto &[device, values] : captureData) { if (dvcCheckedArr[i].b) { - std::stringstream ss; - ss << "device" << i + 1; - auto filename = makeFileName(ss.str()); + auto filename = mkFileName(std::format("device{}", i + 1).c_str()); if (hasSelectedPathArr[i].b) { - complete_path = makeDirectory(true, selectedPathArr[i], "", filename); - save(device, values, complete_path, allData); + path = mkdir(true, selectedPathArr[i], "", filename); hasSelectedPathArr[i].b = false; } else if (!inptTxtFields[i].empty()) { - complete_path = makeDirectory(false, "", inptTxtFields[i], filename); - save(device, values, complete_path, allData); + path = mkdir(false, "", inptTxtFields[i], filename); inptTxtFields[i].clear(); - } else { - complete_path = makeDirectory(false, "", "", filename); - save(device, values, complete_path, allData); - } + } else + path = mkdir(false, "", "", filename); + valuesSize = values.size(); + future = std::async(std::launch::async, [&, path] { + save(device, values, path, allData, y_indx); + }); + progress = true; } - ++i; + i++; } - ImGui::CloseCurrentPopup(); } + if (progress) { + auto status = future.wait_for(std::chrono::milliseconds{1}); + if (status == std::future_status::ready && future.valid()) { + future.get(); + // reset related stuff + y_indx = 0; + valuesSize = 0; + progress = false; + inptTxtFields[0].clear(); // reset storage location after each save + ImGui::CloseCurrentPopup(); + } else { + ImGui::ProgressBar((float)y_indx / valuesSize, {0.f, 0.f}); + ImGui::SameLine(); + ImGui::Text(appLanguage[Key::saving]); + } + } } \ No newline at end of file diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index 13200e37..a56caf9a 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -1,12 +1,12 @@ #ifndef SETTINGS_H #define SETTINGS_H -#include "jasonhandler.hpp" -#include "languages.hpp" -#include #include #include #include +#include +#include "jasonhandler.hpp" +#include "languages.hpp" static void popup_settings(nlohmann::json &config, nlohmann::json &language, std::string const &configpath, int &title) { From ce5414609822af3c56cc074bbc131495902cfe52 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Mon, 13 May 2024 13:35:49 +0330 Subject: [PATCH 18/47] included the charconv header --- src/saves_popup.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index 4612c735..d04e6024 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include "popups.hpp" #include "look_up_saves.hpp" #include "imgui_stdlib.h" From e0fbfbd39f4c7f0a52044dfc85e45e32dda5a69c Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Mon, 13 May 2024 13:56:42 +0330 Subject: [PATCH 19/47] included the format header --- src/saves_popup.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index d04e6024..39b1c648 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "popups.hpp" #include "look_up_saves.hpp" #include "imgui_stdlib.h" From 4b9d0b40bb29245410fcb6e2b5bc219690449a82 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Tue, 14 May 2024 14:17:49 +0330 Subject: [PATCH 20/47] ubuntu 23 test and minor changes --- .github/workflows/build.yaml | 4 ++-- src/languages.hpp | 6 +++--- src/saves_popup.cpp | 9 ++++----- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 02770c1f..53812b7c 100755 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -12,7 +12,7 @@ jobs: include: - os: windows-latest triplet: x64-windows - - os: ubuntu-latest + - os: ubuntu-23.04 triplet: x64-linux steps: @@ -89,7 +89,7 @@ jobs: languages/Deutsch.json release: - runs-on: ubuntu-latest + runs-on: ubuntu-23.04 needs: build if: startsWith(github.ref, 'refs/tags/v') diff --git a/src/languages.hpp b/src/languages.hpp index d37b8c7a..5f427759 100644 --- a/src/languages.hpp +++ b/src/languages.hpp @@ -79,7 +79,7 @@ enum class Key { Ready, FontSize, SettingsText, - saving + Saving }; inline const std::map englishLan{ @@ -157,7 +157,7 @@ inline const std::map englishLan{ {Key::Ready, "Ready"}, {Key::FontSize, "Fontsize"}, {Key::SettingsText, "Set your personal settings for the software"}, - {Key::saving, "saving ..."}}; + {Key::Saving, "saving ..."}}; inline const std::map germanLan{ @@ -236,7 +236,7 @@ inline const std::map germanLan{ {Key::Ready, "Bereit"}, {Key::FontSize, "Schriftgröße"}, {Key::SettingsText, "Legen sie hier ihre persönlichen Einstellungen fest"}, - {Key::saving, "sparen ..."}}; + {Key::Saving, "speichern ..."}}; inline auto appLanguage = englishLan; #endif \ No newline at end of file diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index 39b1c648..b9457366 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "popups.hpp" #include "look_up_saves.hpp" #include "imgui_stdlib.h" @@ -15,8 +14,8 @@ static void save(const Omniscope::Id &device, const std::vector> &values, const fs::path &outFile, std::string allData, size_t &y_indx) { - allData += fmt::format("\n{}-{}\nSamplying rate is 100000\n", device.type, - device.serial); + allData += fmt::format("\nType: {}\nSerial: {}\nSamplyingRate: {}\n", device.type, + device.serial, device.sampleRate); std::string fileContent; fileContent.resize_and_overwrite( // five bytes for each y_value, three for the number @@ -247,7 +246,7 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, fs::path path; for (size_t i{}; const auto &[device, values] : captureData) { if (dvcCheckedArr[i].b) { - auto filename = mkFileName(std::format("device{}", i + 1).c_str()); + auto filename = mkFileName(fmt::format("device{}", i + 1).c_str()); if (hasSelectedPathArr[i].b) { path = mkdir(true, selectedPathArr[i], "", filename); hasSelectedPathArr[i].b = false; @@ -278,7 +277,7 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, } else { ImGui::ProgressBar((float)y_indx / valuesSize, {0.f, 0.f}); ImGui::SameLine(); - ImGui::Text(appLanguage[Key::saving]); + ImGui::Text(appLanguage[Key::Saving]); } } } \ No newline at end of file From d4c88b904dc148b99017810d68855809337d1817 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Wed, 15 May 2024 09:10:39 +0330 Subject: [PATCH 21/47] compiler gcc 13 --- .github/workflows/build.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 53812b7c..beb26a45 100755 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -12,7 +12,9 @@ jobs: include: - os: windows-latest triplet: x64-windows - - os: ubuntu-23.04 + - os: ubuntu-latest + compiler: gcc + gcc: 13 triplet: x64-linux steps: @@ -89,7 +91,7 @@ jobs: languages/Deutsch.json release: - runs-on: ubuntu-23.04 + runs-on: ubuntu-latest needs: build if: startsWith(github.ref, 'refs/tags/v') From 710674dc6fcf70be257a082bbe0c1fc834db3506 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Wed, 15 May 2024 09:26:14 +0330 Subject: [PATCH 22/47] gcc 14 test for on CI --- .github/workflows/build.yaml | 2 +- src/saves_popup.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index beb26a45..0b4f5b97 100755 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -14,7 +14,7 @@ jobs: triplet: x64-windows - os: ubuntu-latest compiler: gcc - gcc: 13 + gcc: 14 triplet: x64-linux steps: diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index b9457366..eddc9637 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -2,6 +2,7 @@ #include #include #include +#include // testing purposes #include "popups.hpp" #include "look_up_saves.hpp" #include "imgui_stdlib.h" From 8ef1032c10aabb7f539db9f497d8327e44d35cac Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Wed, 15 May 2024 11:50:51 +0330 Subject: [PATCH 23/47] gcc 13 --- .github/workflows/build.yaml | 2 +- src/saves_popup.cpp | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0b4f5b97..beb26a45 100755 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -14,7 +14,7 @@ jobs: triplet: x64-windows - os: ubuntu-latest compiler: gcc - gcc: 14 + gcc: 13 triplet: x64-linux steps: diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index eddc9637..863add00 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -2,7 +2,6 @@ #include #include #include -#include // testing purposes #include "popups.hpp" #include "look_up_saves.hpp" #include "imgui_stdlib.h" @@ -15,8 +14,8 @@ static void save(const Omniscope::Id &device, const std::vector> &values, const fs::path &outFile, std::string allData, size_t &y_indx) { - allData += fmt::format("\nType: {}\nSerial: {}\nSamplyingRate: {}\n", device.type, - device.serial, device.sampleRate); + allData += fmt::format("\nType: {}\nSerial: {}\nSamplyingRate: {}\n", + device.type, device.serial, device.sampleRate); std::string fileContent; fileContent.resize_and_overwrite( // five bytes for each y_value, three for the number From 94a4ccd4bd8a61638461d7b7628887d832d2e086 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Wed, 15 May 2024 12:16:16 +0330 Subject: [PATCH 24/47] few minor changes to address some of the warnings --- src/main.cpp | 3 +-- src/settingspopup.hpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 6d9ab767..9c55e586 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,7 +18,6 @@ int main() { double xmax_paused{0}; bool open_settings = false; bool open_generate_training_data = false; - bool upload_success = false; static bool flagPaused = true; bool flagDataNotSaved = true; bool Development = false; @@ -173,7 +172,7 @@ int main() { if (ImGui::BeginPopupModal(titles[title].c_str(), nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::SetItemDefaultFocus(); - popup_settings(config, language, configpath, title); + popup_settings(config, configpath, title); ImGui::EndPopup(); } // Generate training data popup diff --git a/src/settingspopup.hpp b/src/settingspopup.hpp index a56caf9a..026a656e 100644 --- a/src/settingspopup.hpp +++ b/src/settingspopup.hpp @@ -8,7 +8,7 @@ #include "jasonhandler.hpp" #include "languages.hpp" -static void popup_settings(nlohmann::json &config, nlohmann::json &language, +static void popup_settings(nlohmann::json &config, std::string const &configpath, int &title) { static float tempfontscale = config["text"]["scale"]; From bd573c85220e520673f274bdc91c0e62e34fc1e8 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Thu, 16 May 2024 09:23:09 +0330 Subject: [PATCH 25/47] metadata and values --- src/saves_popup.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index 863add00..70a70823 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -13,19 +13,17 @@ namespace fs = std::filesystem; static void save(const Omniscope::Id &device, const std::vector> &values, const fs::path &outFile, std::string allData, size_t &y_indx) { - - allData += fmt::format("\nType: {}\nSerial: {}\nSamplyingRate: {}\n", + allData += fmt::format(",Type: {},Serial: {},SamplyingRate: {}\n", device.type, device.serial, device.sampleRate); std::string fileContent; fileContent.resize_and_overwrite( // five bytes for each y_value, three for the number // and two spaces as a separator between the numbers - values.size() * 5, [&values, &y_indx](char *begin, std::size_t) { + values.size() * 4, [&values, &y_indx](char *begin, std::size_t) { auto end = begin; for (; y_indx < values.size(); y_indx++) { end = std::to_chars(end, end + 3, values[y_indx].second).ptr; - *end++ = ' '; - *end++ = ' '; + *end++ = '\n'; } return end - begin; }); From cb30920664e72a98d8120c6b17dae300fa3ac47a Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Thu, 16 May 2024 12:12:44 +0330 Subject: [PATCH 26/47] fixing earlier bugs --- src/generateTrainingData.cpp | 5 ++--- src/look_up_saves.hpp | 15 +++++++-------- src/saves_popup.cpp | 8 ++++---- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/generateTrainingData.cpp b/src/generateTrainingData.cpp index 7d042a15..975b008e 100644 --- a/src/generateTrainingData.cpp +++ b/src/generateTrainingData.cpp @@ -100,7 +100,7 @@ void generateTrainingData( static std::string Measurement; // one extra space for '\0' character - static char VIN[18]; + static char VIN[19]; static std::string Mileage; static std::vector file_measuring_vals; // measurement values static bool grayFields = false; @@ -236,8 +236,7 @@ void generateTrainingData( s += data->EventChar; // strlen is updated when entered char passes the filter size_t indx = strlen(VIN); - - if (indx < 17) + if (indx < 18) return !std::regex_match( s, chars_regex); // return 0 as passed for matched chars return 1; // discard exceeding chars diff --git a/src/look_up_saves.hpp b/src/look_up_saves.hpp index ac777d47..ea680a46 100644 --- a/src/look_up_saves.hpp +++ b/src/look_up_saves.hpp @@ -11,7 +11,7 @@ namespace fs = std::filesystem; inline std::string getSubdirectoriesInFolder(nlohmann::json language, fs::path const &saves_folder_path, char scantype[255] = 0, - char inputvin[18] = 0, + char inputvin[19] = 0, char mileage[10] = 0) { bool isTxtInptFieldsEmpty = false; if (scantype != 0 && inputvin != 0 && mileage != 0) @@ -44,17 +44,16 @@ inline std::string getSubdirectoriesInFolder(nlohmann::json language, ImGui::Combo(appLanguage[Key::Known_Car], &selectedOption, vins, static_cast(subdirectories.size())); - ImGui::InputText(appLanguage[Key::Measurement], scantype, IM_ARRAYSIZE(scantype)); - + ImGui::InputText(appLanguage[Key::Measurement], scantype, 255); if (selectedOption == 0) { - ImGui::InputText("Fin/Vin", inputvin, IM_ARRAYSIZE(inputvin), + ImGui::InputText("Fin/Vin", inputvin, 19, ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_CharsNoBlank | ImGuiInputTextFlags_None); selectedFolder = inputvin; } - ImGui::InputText(appLanguage[Key::Mileage], mileage, IM_ARRAYSIZE(mileage)); + ImGui::InputText(appLanguage[Key::Mileage], mileage, 10); // Using vins (char* array) with ImGui }else { @@ -62,7 +61,7 @@ inline std::string getSubdirectoriesInFolder(nlohmann::json language, static_cast(subdirectories.size())); if (selectedOption == 0) { - ImGui::InputText("Fin/Vin", inputvin, IM_ARRAYSIZE(inputvin)); + ImGui::InputText("Fin/Vin", inputvin, 19); selectedFolder = inputvin; } static char VIN[18]; @@ -71,8 +70,8 @@ inline std::string getSubdirectoriesInFolder(nlohmann::json language, ImGui::Separator(); ImGui::Text(appLanguage[Key::Additional_Information]); ImGui::NewLine(); - ImGui::InputText(appLanguage[Key::Measurement], scantype, IM_ARRAYSIZE(scantype)); - ImGui::InputText(appLanguage[Key::Mileage], mileage, IM_ARRAYSIZE(mileage)); + ImGui::InputText(appLanguage[Key::Measurement], scantype, 255); + ImGui::InputText(appLanguage[Key::Mileage], mileage, 10); } } diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index 70a70823..4d173a42 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -17,8 +17,8 @@ static void save(const Omniscope::Id &device, device.type, device.serial, device.sampleRate); std::string fileContent; fileContent.resize_and_overwrite( - // five bytes for each y_value, three for the number - // and two spaces as a separator between the numbers + // four bytes for each y_value, three for the number + // and one new line as a separator between the numbers values.size() * 4, [&values, &y_indx](char *begin, std::size_t) { auto end = begin; for (; y_indx < values.size(); y_indx++) { @@ -97,7 +97,7 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, } static char scantype[255] = ""; - static char vin[18] = ""; + static char vin[19] = ""; static char mileage[10] = ""; std::string inputvin = getSubdirectoriesInFolder(language, "saves", scantype, vin, mileage); @@ -226,7 +226,7 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, if (ImGui::Button(appLanguage[Key::Back])) { ImGui::CloseCurrentPopup(); } - ImGui::SameLine(ImGui::GetWindowWidth() - 100.f); // offset from start x + ImGui::SameLine(ImGui::GetWindowWidth() * 0.75f); // offset from start x static std::future future; static size_t y_indx; // used for the progress bar too From 18f98888479e20fd1acf172ecb4f84839814f17e Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Wed, 22 May 2024 10:19:50 +0330 Subject: [PATCH 27/47] loading old data and a few code refinements --- src/generateTrainingData.cpp | 16 ++++------ src/handler.cpp | 2 +- src/handler.hpp | 2 +- src/look_up_saves.hpp | 4 +-- src/main.cpp | 58 +++++++++++++++++++++++++++++++----- src/popups.hpp | 3 +- src/saves_popup.cpp | 2 -- src/style.cpp | 22 +++++--------- src/style.hpp | 4 +-- 9 files changed, 71 insertions(+), 42 deletions(-) diff --git a/src/generateTrainingData.cpp b/src/generateTrainingData.cpp index 975b008e..25323d65 100644 --- a/src/generateTrainingData.cpp +++ b/src/generateTrainingData.cpp @@ -17,7 +17,7 @@ void generateTrainingData( bool &open_generate_training_data, const std::map>> &captureData, - std::set &savedFileNames, const nlohmann::json &config) { + std::set &savedFileNames) { namespace fs = std::filesystem; ImGui::OpenPopup(appLanguage[Key::Gn_trng_data_pop]); @@ -56,7 +56,7 @@ void generateTrainingData( (ImGui::BeginCombo("##ComboDevice", "Devices & Waveforms Menu"))) { // only one checkbox out of two sets of // devices/waveforms is selected at any time - size_t i{}; + int i{}; bool is_checked{false}; if (captureData.size()) for (const auto &[device, values] : captureData) { @@ -117,8 +117,8 @@ void generateTrainingData( if (!readfile.is_open()) fmt::println("Failed to open file {}", filename); else { - // first, second and third lines of file - std::string first_line, second_line, third_line; + // first line of file + std::string first_line; std::getline(readfile, first_line); first_line.pop_back(); // remove ending new line std::stringstream ss(first_line); @@ -128,18 +128,14 @@ void generateTrainingData( std::getline(ss, substr, ','); FieldsData[j] = substr; } - std::getline(readfile, second_line); // device ID - second_line.pop_back(); - std::getline(readfile, third_line); // samplying rate - third_line.pop_back(); while (!readfile.eof()) { // read measuring values into the vector double value{}; readfile >> value; file_measuring_vals.emplace_back(value); static constexpr size_t bigNumber{10'000'000}; - readfile.ignore(bigNumber, ' '); // two spaces between elements - readfile.ignore(bigNumber, ' '); + readfile.ignore(bigNumber, + '\n'); // new line separator between elements // at the last loop, the last number is picked, loop // goes on and vector pushes value before eof is reached } diff --git a/src/handler.cpp b/src/handler.cpp index c8a25651..185ed814 100644 --- a/src/handler.cpp +++ b/src/handler.cpp @@ -3,7 +3,7 @@ #include #include -void addPlots(const char *name, const bool flagPaused, +void addPlots(const char *name, std::function axesSetup) { static std::set firstRun; const auto &plots{captureData}; diff --git a/src/handler.hpp b/src/handler.hpp index 456257d6..8be71ee9 100644 --- a/src/handler.hpp +++ b/src/handler.hpp @@ -17,7 +17,7 @@ inline std::optional sampler{}; inline std::map>> captureData; -void addPlots(const char *, const bool, std::function); +void addPlots(const char *, std::function); void initDevices(); void devicesList(); void set_config(const std::string &); diff --git a/src/look_up_saves.hpp b/src/look_up_saves.hpp index ea680a46..6d69a0e1 100644 --- a/src/look_up_saves.hpp +++ b/src/look_up_saves.hpp @@ -32,7 +32,7 @@ inline std::string getSubdirectoriesInFolder(nlohmann::json language, // Creating an array of C strings (char*) char **vins = new char *[subdirectories.size()]; for (size_t i = 0; i < subdirectories.size(); ++i) - vins[i] = strdup(subdirectories[i].c_str()); + vins[i] = _strdup(subdirectories[i].c_str()); if (isTxtInptFieldsEmpty) { const std::string newcar = appLanguage[Key::New_Car]; @@ -87,7 +87,7 @@ inline std::string select_combo_from_json(nlohmann::json const &language, // Creating an array of C strings (char*) char **option_c = new char *[options.size()]; for (size_t i = 0; i < options.size(); ++i) - option_c[i] = strdup(options[i].c_str()); + option_c[i] = _strdup(options[i].c_str()); std::string combo_name = "##" + key; ImGui::Combo(combo_name.c_str(), &selectedOption, option_c, diff --git a/src/main.cpp b/src/main.cpp index 9c55e586..2d6767f9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,13 +15,13 @@ int main() { auto now = std::chrono::system_clock::now(); std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); std::tm now_tm = *std::gmtime(&now_time_t); - double xmax_paused{0}; bool open_settings = false; bool open_generate_training_data = false; static bool flagPaused = true; bool flagDataNotSaved = true; bool Development = false; bool flagInitState = true; + bool load_old_data = false; // main loop auto render = [&]() { @@ -29,7 +29,7 @@ int main() { set_inital_config(config); flagInitState = false; } - SetupImGuiStyle(false, 0.99f, config); + SetupImGuiStyle(false, 0.99f); ImGui::SetNextWindowPos({0.f, 0.f}); auto windowSize{ImGui::GetIO().DisplaySize}; ImGui::SetNextWindowSize(windowSize); @@ -49,10 +49,51 @@ int main() { } ImGui::BeginChild("Left Side", {windowSize.x * .18f, 0.f}); - set_side_menu(config, flagPaused, open_settings, - open_generate_training_data); + set_side_menu(config, open_settings, open_generate_training_data); // there're four "BeginChild"s, one as the left side // and three on the right side + if (!sampler.has_value()) { + if (ImGui::Button("Display file data")) + fileBrowser.Open(); + ImGui::SameLine(); + if (ImGui::Button("Exit")) { + captureData.clear(); + load_old_data = false; + } + } + static std::filesystem::path fileName; + fileBrowser.Display(); + if (fileBrowser.HasSelected()) { + fileName = fileBrowser.GetSelected(); + fileBrowser.ClearSelected(); + captureData.clear(); // clear if it's alreay filled + // example data + Omniscope::Id id{"E4620C205B234D21", "Omniscope", 100'000}; + std::ifstream readfile(fileName, std::ios::binary); + if (!readfile.is_open()) + fmt::println("Failed to open file {}", fileName); + else { + size_t indx{2}; + std::string first_line; + std::getline(readfile, first_line); + while (!readfile.eof()) { + double value{}; + readfile >> value; + captureData[id].emplace_back(indx++, value); + static constexpr size_t bigNumber{10'000'000}; + readfile.ignore(bigNumber, + '\n'); // new line separator between elements + } + load_old_data = true; + readfile.close(); + // pop the extra last element + captureData[id].pop_back(); + } + } + ImGui::SetCursorPosY(windowSize.y * 0.9f); + ImGui::Text(fmt::format("{}: {}", appLanguage[Key::Version], + CMakeGitVersion::VersionWithGit) + .c_str()); ImGui::EndChild(); // end child "Left Side" ImGui::SameLine(); ImGui::BeginChild("Right Side", {0.f, 0.f}); @@ -64,7 +105,7 @@ int main() { if (ImGui::BeginPopupModal(appLanguage[Key::Save_Recorded_Data], nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::SetItemDefaultFocus(); - saves_popup(config, language, captureData, now, now_time_t, now_tm, + saves_popup(config, language, now, now_time_t, now_tm, flagDataNotSaved); ImGui::EndPopup(); } @@ -178,7 +219,7 @@ int main() { // Generate training data popup if (open_generate_training_data) generateTrainingData(open_generate_training_data, captureData, - savedFileNames, config); + savedFileNames); // ############################ addPlots("Recording the data", ...) ImGui::Dummy({0.f, windowSize.y * .01f}); @@ -187,14 +228,13 @@ int main() { ImGui::BeginChild("Record Data", {0.f, windowSize.y * 0.62f}, ImGuiChildFlags_Border); - addPlots("Recording the data", flagPaused, [&xmax_paused](double x_max) { + addPlots("Recording the data", [](double x_max) { if (!flagPaused) { ImPlot::SetupAxes("x [Data points]", "y [ADC Value]", ImPlotAxisFlags_AutoFit, ImPlotAxisFlags_AutoFit); ImPlot::SetupAxisLimits(ImAxis_X1, x_max - 7500, x_max + 7500, ImGuiCond_Always); } else { - xmax_paused = x_max; ImPlot::SetupAxes("x [Seconds]", "y [Volts]"); ImPlot::SetupAxesLimits(0, 10, -10, 200); ImPlot::SetupAxisTicks(ImAxis_Y1, -10, 200, 22, nullptr, true); @@ -213,6 +253,8 @@ int main() { ImGui::SameLine(); ImGui::Text(appLanguage[Key::Devices_found]); devicesList(); + if (load_old_data) + ImGui::TextUnformatted(fileName.filename().string().c_str()); ImGui::EndChild(); // end child "Devicelist" ImGui::EndChild(); // end child "Right Side" ImGui::End(); diff --git a/src/popups.hpp b/src/popups.hpp index b3b1b864..85f02a21 100644 --- a/src/popups.hpp +++ b/src/popups.hpp @@ -23,11 +23,10 @@ inline ImGui::FileBrowser void generateTrainingData( bool &, const std::map>> &, - std::set &, const nlohmann::json &); + std::set &); void info_popup(std::string_view, std::string_view); void saves_popup( nlohmann::json const &, nlohmann::json const &, - std::map>> &, std::chrono::system_clock::time_point &, std::time_t &now_time_t, std::tm &now_tm, bool &); diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index 4d173a42..610cea4e 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -41,8 +41,6 @@ static void save(const Omniscope::Id &device, fmt::print("Finished saving.\n"); } void saves_popup(nlohmann::json const &config, nlohmann::json const &language, - std::map>> - &captureData, std::chrono::system_clock::time_point &now, std::time_t &now_time_t, std::tm &now_tm, bool &flagDataNotSaved) { diff --git a/src/style.cpp b/src/style.cpp index 58d3a32b..f6d380bd 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -11,10 +11,9 @@ #include #include -void SetupImGuiStyle(bool bStyleDark_, float alpha_, - const nlohmann::json &config) { +void SetupImGuiStyle(bool bStyleDark_, float alpha_) { - ImGuiIO &io = ImGui::GetIO(); + // ImGuiIO &io = ImGui::GetIO(); // io.FontGlobalScale = load_json(config, "text", "scale"); ImGui::GetStyle().Alpha = 1.0f; @@ -22,7 +21,7 @@ void SetupImGuiStyle(bool bStyleDark_, float alpha_, auto colors = ImGui::GetStyle().Colors; colors[ImGuiCol_Text] = {1.f, 1.f, 1.f, 1.f}; - colors[ImGuiCol_TextDisabled] = {0.972f, 0.976, 0.98f, 0.98f}; + colors[ImGuiCol_TextDisabled] = {0.972f, 0.976f, 0.98f, 0.98f}; colors[ImGuiCol_WindowBg] = {0.145f, 0.157f, 0.169f, 1.f}; colors[ImGuiCol_ChildBg] = {0.145f, 0.157f, 0.169f, 1.f}; colors[ImGuiCol_PopupBg] = {0.145f, 0.157f, 0.169f, 1.f}; @@ -30,7 +29,7 @@ void SetupImGuiStyle(bool bStyleDark_, float alpha_, colors[ImGuiCol_BorderShadow] = {0.f, 0.f, 0.f, 1.f}; // changes the color of the frame bg for the plot window colors[ImGuiCol_FrameBg] = {0.f, 0.f, 0.f, 1.f}; - colors[ImGuiCol_FrameBgHovered] = {0.09f, 0.09f, 0.078, 1.f}; + colors[ImGuiCol_FrameBgHovered] = {0.09f, 0.09f, 0.078f, 1.f}; colors[ImGuiCol_FrameBgActive] = {0.09f, 0.09f, 0.078f, 1.f}; colors[ImGuiCol_TitleBg] = {0.004f, 0.004f, 0.004f, 1.f}; colors[ImGuiCol_TitleBgCollapsed] = {0.09f, 0.09f, 0.078f, 1.f}; @@ -45,7 +44,7 @@ void SetupImGuiStyle(bool bStyleDark_, float alpha_, colors[ImGuiCol_SliderGrabActive] = {0.941f, 0.941f, 0.941f, 1.f}; colors[ImGuiCol_Button] = {0.145f, 0.156f, 0.168f, 1.f}; colors[ImGuiCol_ButtonHovered] = {0.941f, 0.243f, 0.211f, 1.f}; - colors[ImGuiCol_ButtonActive] = {0.921f, 0.24f, 0.211, 1.f}; + colors[ImGuiCol_ButtonActive] = {0.921f, 0.24f, 0.211f, 1.f}; colors[ImGuiCol_Header] = {0.26f, 0.59f, 0.98f, 0.31f}; colors[ImGuiCol_HeaderHovered] = {0.26f, 0.59f, 0.98f, 0.80f}; colors[ImGuiCol_HeaderActive] = {0.26f, 0.59f, 0.98f, 1.f}; @@ -240,7 +239,7 @@ bool LoadTextureFromHeader(unsigned char const *png_data, int png_data_len, return true; } -void set_side_menu(const nlohmann::json &config, bool &flagPaused, +void set_side_menu(const nlohmann::json &config, bool &open_settings, bool &open_generate_training_data) { auto windowSize{ImGui::GetIO().DisplaySize}; @@ -269,8 +268,8 @@ void set_side_menu(const nlohmann::json &config, bool &flagPaused, fmt::println("Error Loading Png #{}.", i); } - float scaleWidth = ImGui::GetIO().DisplaySize.x * 0.0005; - float scaleHeight = ImGui::GetIO().DisplaySize.y * 0.0008; + float scaleWidth = ImGui::GetIO().DisplaySize.x * 0.0005f; + float scaleHeight = ImGui::GetIO().DisplaySize.y * 0.0008f; // Begin the SideBarMenu if (loaded_png[PngRenderedCnt]) { // render AIGroupLogo ImGui::Image((void *)(intptr_t)image_texture[PngRenderedCnt], @@ -313,7 +312,6 @@ void set_side_menu(const nlohmann::json &config, bool &flagPaused, } static bool showSettings = false; - const bool showSettingsPrev = showSettings; if (loaded_png[++PngRenderedCnt] && // render Settings ImGui::ImageButtonWithText( (void *)(intptr_t)image_texture[PngRenderedCnt], @@ -329,10 +327,6 @@ void set_side_menu(const nlohmann::json &config, bool &flagPaused, system(("start " + load_json(config, "helplink")).c_str()); showSettings = false; } - ImGui::SetCursorPosY(ImGui::GetIO().DisplaySize.y * 0.90f); - ImGui::Text(fmt::format("{}: {}", appLanguage[Key::Version], - CMakeGitVersion::VersionWithGit) - .c_str()); } // For Development diff --git a/src/style.hpp b/src/style.hpp index 8eb5e832..ac884429 100644 --- a/src/style.hpp +++ b/src/style.hpp @@ -13,10 +13,10 @@ struct StyleElement { inline constexpr ImVec4 inctColStyle{0.5f, 0.5f, 0.5f, 1.f}; inline constexpr ImVec4 normColStyle{0.1f, 0.1f, 0.1f, 1.f}; -void SetupImGuiStyle(bool, float, const nlohmann::json &); +void SetupImGuiStyle(bool, float); void set_button_style_to(const nlohmann::json &, const std::string &); bool LoadTextureFromHeader(unsigned char const *, int, GLuint *, int *, int *); -void set_side_menu(const nlohmann::json &, bool &, bool &, bool &); +void set_side_menu(const nlohmann::json &, bool &, bool &); void PopupStyleEditor(); From ae1539bd6e95e276397bf489fe76204f488c5021 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Wed, 22 May 2024 10:33:47 +0330 Subject: [PATCH 28/47] bug fix --- src/look_up_saves.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/look_up_saves.hpp b/src/look_up_saves.hpp index 6d69a0e1..ea680a46 100644 --- a/src/look_up_saves.hpp +++ b/src/look_up_saves.hpp @@ -32,7 +32,7 @@ inline std::string getSubdirectoriesInFolder(nlohmann::json language, // Creating an array of C strings (char*) char **vins = new char *[subdirectories.size()]; for (size_t i = 0; i < subdirectories.size(); ++i) - vins[i] = _strdup(subdirectories[i].c_str()); + vins[i] = strdup(subdirectories[i].c_str()); if (isTxtInptFieldsEmpty) { const std::string newcar = appLanguage[Key::New_Car]; @@ -87,7 +87,7 @@ inline std::string select_combo_from_json(nlohmann::json const &language, // Creating an array of C strings (char*) char **option_c = new char *[options.size()]; for (size_t i = 0; i < options.size(); ++i) - option_c[i] = _strdup(options[i].c_str()); + option_c[i] = strdup(options[i].c_str()); std::string combo_name = "##" + key; ImGui::Combo(combo_name.c_str(), &selectedOption, option_c, From 8432bbadbc139e432931a65ea112945a2a802e96 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Thu, 23 May 2024 10:24:13 +0330 Subject: [PATCH 29/47] improvements --- src/main.cpp | 72 +++++++++++++++++++++++++++------------------ src/saves_popup.cpp | 2 +- src/style.cpp | 4 ++- src/style.hpp | 2 +- 4 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 2d6767f9..3a3e745b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,6 +22,7 @@ int main() { bool Development = false; bool flagInitState = true; bool load_old_data = false; + bool load_old_data_visible = true; // main loop auto render = [&]() { @@ -49,10 +50,13 @@ int main() { } ImGui::BeginChild("Left Side", {windowSize.x * .18f, 0.f}); - set_side_menu(config, open_settings, open_generate_training_data); + set_side_menu(config, open_settings, open_generate_training_data, + load_old_data_visible); // there're four "BeginChild"s, one as the left side // and three on the right side - if (!sampler.has_value()) { + static std::filesystem::path fileName; + // a function may do this section's job + if (!sampler.has_value() && load_old_data_visible) { if (ImGui::Button("Display file data")) fileBrowser.Open(); ImGui::SameLine(); @@ -60,34 +64,43 @@ int main() { captureData.clear(); load_old_data = false; } - } - static std::filesystem::path fileName; - fileBrowser.Display(); - if (fileBrowser.HasSelected()) { - fileName = fileBrowser.GetSelected(); - fileBrowser.ClearSelected(); - captureData.clear(); // clear if it's alreay filled - // example data - Omniscope::Id id{"E4620C205B234D21", "Omniscope", 100'000}; - std::ifstream readfile(fileName, std::ios::binary); - if (!readfile.is_open()) - fmt::println("Failed to open file {}", fileName); - else { - size_t indx{2}; - std::string first_line; - std::getline(readfile, first_line); - while (!readfile.eof()) { - double value{}; - readfile >> value; - captureData[id].emplace_back(indx++, value); - static constexpr size_t bigNumber{10'000'000}; - readfile.ignore(bigNumber, - '\n'); // new line separator between elements + fileBrowser.Display(); + if (fileBrowser.HasSelected()) { + fileName = fileBrowser.GetSelected(); + fileBrowser.ClearSelected(); + captureData.clear(); // clear if it's alreay filled + Omniscope::Id id; + std::ifstream readfile(fileName, std::ios::binary); + if (!readfile.is_open()) + fmt::println("Failed to open file {}", fileName); + else { + size_t indx{2}; + std::string first_line; + std::getline(readfile, first_line); + std::istringstream ss{first_line}; + constexpr size_t fieldsSz{6}; + // extract input fields data from the first line + for (size_t i = 0; i < fieldsSz; i++) { + std::string substr; + std::getline(ss, substr, ','); + if (i == 3) // third element (Type of scope) + id.type = substr; + if (i == 4) // fourth element (serial of scope) + id.serial = substr; + } + while (!readfile.eof()) { + double value{}; + readfile >> value; + captureData[id].emplace_back(indx++, value); + static constexpr size_t bigNumber{10'000'000}; + readfile.ignore(bigNumber, + '\n'); // new line separator between elements + } + load_old_data = true; + readfile.close(); + // pop the extra last element + captureData[id].pop_back(); } - load_old_data = true; - readfile.close(); - // pop the extra last element - captureData[id].pop_back(); } } ImGui::SetCursorPosY(windowSize.y * 0.9f); @@ -165,6 +178,7 @@ int main() { rstSettings(); flagPaused = true; } + load_old_data_visible = true; } ImGui::PopStyleColor(3); } diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index 610cea4e..4c51e9ca 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -13,7 +13,7 @@ namespace fs = std::filesystem; static void save(const Omniscope::Id &device, const std::vector> &values, const fs::path &outFile, std::string allData, size_t &y_indx) { - allData += fmt::format(",Type: {},Serial: {},SamplyingRate: {}\n", + allData += fmt::format(",{},{},{}\n", device.type, device.serial, device.sampleRate); std::string fileContent; fileContent.resize_and_overwrite( diff --git a/src/style.cpp b/src/style.cpp index f6d380bd..a3605a1e 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -240,7 +240,8 @@ bool LoadTextureFromHeader(unsigned char const *png_data, int png_data_len, } void set_side_menu(const nlohmann::json &config, - bool &open_settings, bool &open_generate_training_data) { + bool &open_settings, bool &open_generate_training_data, + bool &load_old_data_visible) { auto windowSize{ImGui::GetIO().DisplaySize}; // Initializing all variables for images @@ -287,6 +288,7 @@ void set_side_menu(const nlohmann::json &config, devices.clear(); deviceManager.clearDevices(); initDevices(); + load_old_data_visible = false; } static bool showDiag = false; diff --git a/src/style.hpp b/src/style.hpp index ac884429..6704cec5 100644 --- a/src/style.hpp +++ b/src/style.hpp @@ -16,7 +16,7 @@ inline constexpr ImVec4 normColStyle{0.1f, 0.1f, 0.1f, 1.f}; void SetupImGuiStyle(bool, float); void set_button_style_to(const nlohmann::json &, const std::string &); bool LoadTextureFromHeader(unsigned char const *, int, GLuint *, int *, int *); -void set_side_menu(const nlohmann::json &, bool &, bool &); +void set_side_menu(const nlohmann::json &, bool &, bool &, bool &); void PopupStyleEditor(); From 511526f774ac8bdc435dc072af297f70ac010883 Mon Sep 17 00:00:00 2001 From: akmaily Date: Fri, 24 May 2024 10:52:08 +0200 Subject: [PATCH 30/47] Added a the toolbar buttons as icons --- src/imagesHeaderToolbar.hpp | 432 ++++++++++++++++++++++++++++++++++++ src/main.cpp | 89 +++++++- 2 files changed, 512 insertions(+), 9 deletions(-) create mode 100644 src/imagesHeaderToolbar.hpp diff --git a/src/imagesHeaderToolbar.hpp b/src/imagesHeaderToolbar.hpp new file mode 100644 index 00000000..ad61d2e5 --- /dev/null +++ b/src/imagesHeaderToolbar.hpp @@ -0,0 +1,432 @@ +// imagesHeader.hpp +#ifndef IMAGES_HEADER_TOOLBAR_HPP +#define IMAGES_HEADER_TOOLBAR_HPP + +unsigned char PauseButton_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, + 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x02, 0xaf, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9b, 0xdb, + 0x6d, 0x1a, 0x41, 0x14, 0x86, 0xff, 0x33, 0xcb, 0xc5, 0xc8, 0x7e, 0xa0, + 0x04, 0xd2, 0x81, 0x5d, 0x41, 0x70, 0x05, 0x90, 0x0a, 0xec, 0x54, 0x10, + 0x77, 0x90, 0x12, 0x92, 0x54, 0x60, 0x52, 0x81, 0xa1, 0x02, 0x70, 0x05, + 0xa1, 0x83, 0x6c, 0x07, 0xe1, 0x01, 0x09, 0x76, 0x66, 0x77, 0x4e, 0x66, + 0x20, 0x31, 0xcc, 0x5a, 0x8a, 0xc2, 0xee, 0x22, 0x59, 0x3a, 0xf3, 0x49, + 0x88, 0x65, 0x58, 0x66, 0xff, 0xf9, 0xe6, 0xc2, 0xd3, 0x21, 0x94, 0xd8, + 0x6c, 0xcc, 0x30, 0x49, 0x30, 0xb2, 0x8c, 0x01, 0x08, 0x7d, 0x9c, 0x80, + 0x02, 0x96, 0xcc, 0xf6, 0xb9, 0xdb, 0xed, 0x4e, 0x71, 0x06, 0x7c, 0x36, + 0xa5, 0xf8, 0x8e, 0x41, 0xfd, 0x2a, 0xd9, 0x8a, 0x02, 0xb3, 0x5e, 0xaf, + 0xbd, 0x38, 0x6e, 0xa7, 0x43, 0xe7, 0x9b, 0x01, 0x25, 0xad, 0x47, 0x30, + 0x0f, 0x51, 0x1b, 0x4e, 0xd9, 0xda, 0xdb, 0x5e, 0xaf, 0x97, 0xa2, 0x01, + 0xd6, 0xeb, 0xf5, 0x75, 0xab, 0xdd, 0x79, 0x72, 0x97, 0x03, 0xd4, 0x26, + 0xcc, 0xb6, 0x13, 0xb0, 0x1b, 0xbc, 0x4a, 0xe6, 0xcd, 0x3c, 0xe0, 0x85, + 0x55, 0x6e, 0xf4, 0xed, 0xd5, 0xd5, 0xd5, 0x12, 0x35, 0xf8, 0x33, 0x78, + 0x9f, 0xed, 0xa4, 0x19, 0xff, 0x37, 0x07, 0x09, 0x3b, 0x01, 0xdb, 0x4c, + 0xff, 0x44, 0xb3, 0x83, 0x7f, 0x79, 0x50, 0xb7, 0xd3, 0xb9, 0x21, 0xa2, + 0x15, 0x2a, 0x72, 0xb6, 0x6c, 0x84, 0xc5, 0x45, 0xa7, 0x73, 0xdb, 0xf2, + 0xfb, 0xca, 0x05, 0x1d, 0x04, 0x5f, 0x32, 0x16, 0xad, 0x96, 0xfa, 0xca, + 0xcc, 0x27, 0x05, 0xb7, 0xcc, 0xf7, 0xcc, 0xb8, 0x3f, 0x7a, 0xca, 0x20, + 0xcb, 0xcc, 0x9d, 0xbb, 0xf8, 0x86, 0x0a, 0x6c, 0x36, 0xfa, 0x1e, 0xa5, + 0xc1, 0xbb, 0x19, 0x9b, 0x24, 0x89, 0x9a, 0x9e, 0x92, 0xcd, 0x4d, 0x40, + 0xbf, 0xb0, 0x76, 0x1c, 0x64, 0x63, 0x0c, 0xdd, 0xca, 0x1f, 0x42, 0x6b, + 0xf3, 0xc5, 0x59, 0xe6, 0xbf, 0xaf, 0x2c, 0xd3, 0x8f, 0xa8, 0x41, 0xb9, + 0xbf, 0xed, 0x36, 0x7b, 0x42, 0x45, 0xb6, 0xda, 0xcc, 0xc3, 0x6c, 0xd9, + 0x67, 0xd4, 0x60, 0xab, 0x75, 0xd0, 0x9f, 0xcf, 0xaa, 0x2c, 0x70, 0x1d, + 0xde, 0xa6, 0x6a, 0x9d, 0xe0, 0x45, 0x91, 0x87, 0xb3, 0x4d, 0x74, 0x8d, + 0x8a, 0x50, 0x69, 0xdf, 0x1b, 0x63, 0x66, 0xa8, 0x01, 0xb1, 0x0a, 0xb2, + 0x59, 0x6b, 0x07, 0xaa, 0x7c, 0x93, 0xfb, 0x9b, 0xa9, 0xbc, 0x5f, 0x9b, + 0xc6, 0x2d, 0xf3, 0x40, 0xc0, 0xe5, 0xe5, 0xe5, 0x2f, 0xd4, 0xc0, 0xda, + 0xf2, 0xd8, 0xa8, 0xaf, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, + 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, + 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, + 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, + 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, + 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, + 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, + 0x00, 0xc2, 0x89, 0x02, 0x20, 0x1c, 0x45, 0x8c, 0xa0, 0x8a, 0xc2, 0x5a, + 0xaa, 0x55, 0x9e, 0x96, 0x24, 0x49, 0xf9, 0xf7, 0x6f, 0xa6, 0x02, 0x45, + 0xa9, 0xd7, 0x63, 0x53, 0x44, 0x48, 0x8f, 0x1b, 0x98, 0xec, 0x03, 0x6a, + 0x50, 0x30, 0x8f, 0x83, 0x06, 0xae, 0x2e, 0x80, 0x40, 0x41, 0xcd, 0x61, + 0x66, 0x4c, 0xad, 0x6c, 0x20, 0x3b, 0x3a, 0xfe, 0xe8, 0x84, 0x2c, 0x5b, + 0x45, 0x91, 0xcf, 0x48, 0x25, 0x87, 0x8e, 0x19, 0xc3, 0x7d, 0xe5, 0x18, + 0xcf, 0xac, 0x55, 0xff, 0x1d, 0x5e, 0x29, 0xdb, 0x07, 0xd1, 0x28, 0x2c, + 0x9b, 0xf3, 0xed, 0x98, 0xa0, 0x22, 0xcc, 0xbc, 0x70, 0x16, 0xc6, 0x47, + 0xd9, 0x1e, 0x5c, 0xb6, 0xbe, 0x5b, 0xa5, 0xdf, 0x4f, 0xe8, 0x66, 0x97, + 0x8d, 0x49, 0x7d, 0xe2, 0x52, 0x55, 0xac, 0x9b, 0xfc, 0xe9, 0xbe, 0x70, + 0x52, 0xeb, 0xb9, 0x1f, 0x38, 0x1a, 0x87, 0xd3, 0x8b, 0x6e, 0xf7, 0x1d, + 0x2a, 0xe2, 0x8b, 0xa6, 0x32, 0x6d, 0x7e, 0xe0, 0x4c, 0x45, 0x9d, 0x3e, + 0xdb, 0xee, 0x10, 0xe4, 0xa2, 0xf8, 0xe8, 0xde, 0x52, 0x34, 0xcb, 0x2a, + 0x37, 0xe6, 0x03, 0x6a, 0xe0, 0x2b, 0x4e, 0x73, 0xa3, 0x7d, 0x1f, 0x0d, + 0x9f, 0x23, 0xfb, 0xd2, 0x59, 0x7f, 0xb5, 0x13, 0xe0, 0x6b, 0x68, 0xd9, + 0x16, 0xbe, 0x21, 0x45, 0x23, 0x70, 0xda, 0x44, 0xdd, 0xb0, 0xc7, 0xf7, + 0xe1, 0xb2, 0xdd, 0xa0, 0xa9, 0x6c, 0x8c, 0xc5, 0xab, 0xe2, 0xe9, 0x63, + 0x8c, 0x31, 0xef, 0xdd, 0x3e, 0x1e, 0x5b, 0xcb, 0xa7, 0x15, 0x3c, 0x12, + 0xaf, 0xdc, 0xa1, 0xb5, 0x72, 0x07, 0xcb, 0xa4, 0xdd, 0x6e, 0x3f, 0xe3, + 0x0c, 0xe4, 0x79, 0x3e, 0x72, 0xb9, 0x86, 0x55, 0xb2, 0x29, 0x52, 0xa9, + 0xdf, 0xf3, 0xe5, 0x6c, 0xbf, 0x01, 0xcd, 0x4e, 0x60, 0x22, 0xc6, 0x05, + 0x25, 0x40, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82 +}; + +unsigned char PlayButton_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x40, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x4f, 0xf7, 0xb4, 0xb2, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x04, 0xa3, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xdd, 0x5b, 0xd1, + 0x55, 0xdb, 0x30, 0x14, 0x7d, 0x92, 0x13, 0xdb, 0xf9, 0x63, 0x84, 0x74, + 0x82, 0xc2, 0x04, 0x85, 0x09, 0x0a, 0x13, 0x34, 0x4c, 0x40, 0x98, 0x80, + 0x30, 0x01, 0xe9, 0x04, 0xa1, 0x13, 0x90, 0x0d, 0x92, 0x4e, 0x00, 0x9d, + 0x80, 0x6c, 0x50, 0x7a, 0x0e, 0x87, 0x58, 0x0a, 0x58, 0x7d, 0xcf, 0x58, + 0x24, 0xb1, 0x95, 0xd8, 0x18, 0xdb, 0x91, 0xb9, 0xe7, 0x10, 0x1c, 0x4b, + 0xfe, 0xb8, 0x79, 0x4f, 0xf7, 0xca, 0x7a, 0x12, 0x03, 0x03, 0xe6, 0xf3, + 0xc5, 0x21, 0x63, 0xea, 0x2b, 0x63, 0xb0, 0x4f, 0xdf, 0x19, 0x63, 0x0f, + 0x4a, 0x85, 0xbf, 0x3d, 0xcf, 0x1b, 0x43, 0x93, 0x31, 0x9f, 0xcf, 0xbb, + 0x81, 0x5c, 0x4c, 0x02, 0x21, 0x95, 0xf9, 0x4f, 0xdc, 0x4b, 0x29, 0x7f, + 0x40, 0x83, 0xc0, 0xf4, 0xc5, 0xe3, 0xe3, 0xe3, 0x7e, 0xab, 0xed, 0x4e, + 0xf0, 0x72, 0x2f, 0xc7, 0x73, 0x77, 0x2a, 0x7c, 0x39, 0xe9, 0x74, 0x3a, + 0x33, 0xb0, 0x1c, 0x9c, 0x3e, 0x28, 0x72, 0x48, 0xee, 0x06, 0xf2, 0x91, + 0x23, 0xec, 0x33, 0xee, 0xdc, 0xcf, 0x85, 0x18, 0x28, 0xa5, 0xf2, 0x3e, + 0xb3, 0x13, 0x44, 0x11, 0x14, 0x52, 0x8e, 0x94, 0x82, 0xde, 0x5a, 0x8b, + 0x82, 0x29, 0x7e, 0x8e, 0x39, 0xe7, 0x0f, 0x0a, 0xc2, 0xc3, 0x54, 0xfb, + 0xb2, 0xe3, 0x8c, 0x33, 0x36, 0x70, 0x5d, 0xf7, 0x17, 0xd8, 0x88, 0x68, + 0xdc, 0x25, 0xc6, 0x9a, 0x10, 0xe2, 0xc2, 0xd4, 0x8f, 0x7e, 0x88, 0x4d, + 0xe3, 0x53, 0x08, 0x39, 0xa2, 0x3e, 0x60, 0x1b, 0x84, 0x78, 0x3e, 0x4e, + 0x0a, 0xc9, 0xb6, 0xfe, 0xf3, 0xb9, 0xec, 0x61, 0xbf, 0xfb, 0x0d, 0x44, + 0xff, 0x52, 0xda, 0x82, 0x45, 0xe0, 0x61, 0x18, 0xae, 0x8d, 0x21, 0x06, + 0x6c, 0xba, 0xed, 0x81, 0x4e, 0xc7, 0xbd, 0xf6, 0xdc, 0xf6, 0x01, 0x03, + 0x35, 0x30, 0x34, 0xef, 0xe1, 0xf3, 0x17, 0xf4, 0x23, 0x91, 0x68, 0x81, + 0x05, 0xe0, 0x50, 0x00, 0xe4, 0x8b, 0xe8, 0x89, 0x97, 0xa8, 0xa4, 0x5f, + 0xd0, 0x2b, 0xef, 0x0c, 0x3d, 0x48, 0xb4, 0x6e, 0x6d, 0x48, 0xdb, 0x42, + 0x04, 0x35, 0xc8, 0x26, 0x3c, 0xd7, 0x3d, 0x50, 0x21, 0x9c, 0xe2, 0xd7, + 0x59, 0xb2, 0x5d, 0x01, 0xf4, 0x18, 0xe7, 0x93, 0x5d, 0x7a, 0xe7, 0x87, + 0x08, 0x6a, 0x50, 0xda, 0x62, 0x34, 0x8f, 0x30, 0x9a, 0xd7, 0xe9, 0x56, + 0xd6, 0x0d, 0x15, 0x5c, 0x53, 0xda, 0xee, 0x22, 0x9a, 0xa5, 0x10, 0x24, + 0xc4, 0xd1, 0x3c, 0xe5, 0x0c, 0x0e, 0xc0, 0x10, 0x4d, 0x22, 0x4a, 0xde, + 0x19, 0x48, 0x79, 0x55, 0xa7, 0x77, 0x96, 0x46, 0x50, 0x03, 0xfd, 0xf0, + 0xce, 0xf7, 0xdc, 0x2f, 0xb1, 0x08, 0x3d, 0xa4, 0x3a, 0x28, 0xe8, 0xa3, + 0xdd, 0xdc, 0xd6, 0x95, 0xb6, 0xa5, 0x13, 0xd4, 0x88, 0x45, 0xe8, 0x60, + 0x5b, 0xda, 0xd6, 0x21, 0x42, 0x95, 0x11, 0x24, 0xe8, 0xb4, 0xdd, 0x2e, + 0x42, 0xaf, 0x53, 0x3e, 0xa8, 0x08, 0x95, 0x12, 0xd4, 0x20, 0x11, 0x5a, + 0x49, 0xdb, 0x14, 0xb4, 0x77, 0xe2, 0xa4, 0xe3, 0x3b, 0x94, 0x8c, 0x5a, + 0x08, 0x6a, 0x68, 0xef, 0x44, 0x46, 0xd3, 0x74, 0x2b, 0xeb, 0xe2, 0x9c, + 0x77, 0x5c, 0x76, 0xda, 0xd6, 0x4a, 0x90, 0x40, 0x69, 0xeb, 0xbb, 0xee, + 0x51, 0x5d, 0xde, 0x59, 0x3b, 0x41, 0x8d, 0xba, 0xbc, 0x73, 0x67, 0x04, + 0x09, 0x4b, 0x11, 0xc2, 0xb4, 0xcd, 0xf0, 0xce, 0xa2, 0x44, 0x77, 0x4a, + 0x50, 0x23, 0x4a, 0x5b, 0x14, 0x21, 0x50, 0xe1, 0x39, 0x98, 0x88, 0xa2, + 0x77, 0x16, 0x4d, 0x5b, 0x2b, 0x08, 0x6a, 0xf8, 0xbe, 0x3f, 0xcc, 0x91, + 0xb6, 0x37, 0xef, 0x89, 0xa6, 0x55, 0x04, 0x09, 0x59, 0xde, 0x89, 0x44, + 0x8f, 0xdf, 0xe3, 0x9d, 0xd6, 0x11, 0xd4, 0xc8, 0xeb, 0x9d, 0x59, 0x69, + 0x6b, 0x2d, 0x41, 0x8d, 0xb7, 0xf7, 0x4e, 0x60, 0x86, 0x35, 0xd9, 0xec, + 0x29, 0x9f, 0xf5, 0x04, 0x09, 0x51, 0xda, 0x7a, 0xed, 0x93, 0x2c, 0xef, + 0x7c, 0x7a, 0x0a, 0xfa, 0xc9, 0xb6, 0x46, 0x10, 0xd4, 0xd0, 0xde, 0x89, + 0xab, 0x78, 0xc3, 0x74, 0x2b, 0xeb, 0x72, 0x87, 0x5f, 0x25, 0xbd, 0xb3, + 0x51, 0x04, 0x09, 0x14, 0x4d, 0xd7, 0x6d, 0x9f, 0x6f, 0xf7, 0x4e, 0x3e, + 0xd1, 0xef, 0x9c, 0x8d, 0x23, 0xa8, 0xa1, 0xbd, 0xd3, 0x9c, 0xb6, 0xac, + 0x2b, 0xe5, 0xf3, 0x19, 0x5d, 0x35, 0x96, 0xa0, 0x86, 0x4e, 0x5b, 0x1c, + 0x89, 0x6b, 0x22, 0xa4, 0x40, 0xf5, 0x29, 0x8a, 0x8d, 0x27, 0x48, 0xd0, + 0xde, 0x09, 0xeb, 0x2b, 0x08, 0x7b, 0x52, 0xbe, 0x7c, 0xfb, 0x14, 0x04, + 0x09, 0xb4, 0x94, 0x89, 0x75, 0x88, 0xf1, 0xfa, 0x3d, 0xf8, 0x1c, 0x11, + 0x5c, 0x82, 0xa5, 0x16, 0xb3, 0x3e, 0x0d, 0x41, 0xb2, 0x06, 0x1c, 0x77, + 0x6b, 0xab, 0xe9, 0x58, 0xc4, 0x9d, 0x7d, 0x0a, 0x82, 0x51, 0x45, 0x9a, + 0x3b, 0x54, 0xdb, 0xec, 0x2e, 0xef, 0xaa, 0x59, 0xbb, 0xdd, 0xfe, 0xdd, + 0x68, 0x82, 0xa4, 0x92, 0xf8, 0xae, 0x38, 0x64, 0x5c, 0x25, 0xc8, 0x45, + 0x75, 0xc1, 0x6b, 0xfa, 0xdf, 0x82, 0x86, 0x82, 0xaa, 0x5c, 0x42, 0x2e, + 0xae, 0xc0, 0x54, 0xb4, 0xc5, 0xda, 0xa6, 0xe7, 0x7b, 0x97, 0x74, 0xd9, + 0xb8, 0x08, 0xea, 0x7d, 0x04, 0x8c, 0xc3, 0x08, 0x0c, 0xe4, 0xe8, 0x5d, + 0x92, 0xe6, 0xad, 0xfa, 0x7b, 0x63, 0x22, 0x18, 0xa7, 0x63, 0x1f, 0xdf, + 0x2a, 0xce, 0xc0, 0xb8, 0xf4, 0xaf, 0x66, 0x0e, 0xe7, 0x3d, 0x1a, 0x77, + 0xab, 0x77, 0x1b, 0x41, 0x90, 0x44, 0x04, 0xd3, 0x71, 0x84, 0xe4, 0xba, + 0x86, 0x66, 0xf4, 0x3f, 0x35, 0xc4, 0x92, 0xc1, 0x4f, 0xf2, 0xc2, 0x64, + 0xa3, 0xd5, 0x04, 0x29, 0x6a, 0x72, 0xb1, 0xa0, 0x62, 0x4d, 0xcf, 0xdc, + 0x01, 0xa6, 0x4a, 0xbd, 0x9c, 0xfa, 0x5b, 0x76, 0x7b, 0x58, 0x4b, 0xf0, + 0x29, 0x08, 0xb0, 0x48, 0xb3, 0xa0, 0xbd, 0x02, 0xa6, 0x4a, 0x14, 0x45, + 0xed, 0x14, 0x85, 0x24, 0x73, 0x63, 0x92, 0x75, 0x04, 0xa3, 0xfd, 0x3a, + 0xae, 0x77, 0x85, 0xe1, 0x3b, 0x34, 0xb5, 0x63, 0x79, 0x6e, 0x88, 0xe3, + 0xec, 0xd2, 0x94, 0x8e, 0x26, 0x58, 0x43, 0x90, 0xd2, 0x51, 0x2c, 0x16, + 0x03, 0x4c, 0x3b, 0x12, 0x11, 0x43, 0x07, 0x98, 0x3a, 0x0e, 0x1b, 0x24, + 0x45, 0x24, 0x0b, 0x56, 0x10, 0xd4, 0x22, 0x02, 0x09, 0xb3, 0x8e, 0xf1, + 0x80, 0xeb, 0xa5, 0x03, 0x5c, 0x52, 0xfc, 0x09, 0x05, 0xb0, 0x53, 0x82, + 0xe4, 0x69, 0xcc, 0x69, 0x8d, 0x36, 0xa5, 0x23, 0xbd, 0xe3, 0xa9, 0x30, + 0x3c, 0xff, 0xc8, 0x96, 0xb1, 0x9d, 0x11, 0xa4, 0x75, 0xcd, 0x6c, 0x4f, + 0x73, 0xdf, 0x95, 0x8e, 0x26, 0xd4, 0x4e, 0x90, 0xd2, 0x91, 0x3b, 0x0a, + 0xa5, 0x1f, 0x8c, 0xfb, 0x68, 0x68, 0x1d, 0x74, 0x93, 0xa7, 0x15, 0x41, + 0x6d, 0x04, 0x97, 0x22, 0xa2, 0xce, 0x4c, 0x1a, 0x92, 0xc7, 0xd3, 0x8a, + 0xa0, 0x96, 0xb9, 0x68, 0xec, 0x69, 0xf7, 0x91, 0x42, 0xa6, 0x41, 0x22, + 0xd2, 0xf7, 0x7d, 0xf7, 0xa8, 0x8a, 0xed, 0x99, 0x95, 0x46, 0x30, 0x4b, + 0x44, 0xde, 0xeb, 0x69, 0x45, 0x50, 0x09, 0xc1, 0x95, 0x89, 0xf1, 0x05, + 0x98, 0xf3, 0xd1, 0x38, 0x31, 0xae, 0x02, 0xa5, 0x13, 0xcc, 0x33, 0x31, + 0xa6, 0x7a, 0x03, 0xd4, 0x84, 0xd2, 0x08, 0x46, 0x22, 0x22, 0x25, 0x9a, + 0xb5, 0x3a, 0x36, 0x77, 0xa8, 0x46, 0x44, 0xb2, 0x50, 0x8a, 0xc8, 0xbc, + 0x89, 0x08, 0xd6, 0xee, 0xd2, 0xad, 0x6a, 0x86, 0x51, 0x3b, 0xa9, 0x4a, + 0x44, 0xb2, 0xf0, 0xa1, 0x08, 0x46, 0x8b, 0x3d, 0x0e, 0x5c, 0x6c, 0x17, + 0x11, 0xb7, 0x52, 0x11, 0xc9, 0x42, 0x21, 0x82, 0xab, 0x9e, 0x06, 0x1b, + 0x3c, 0xad, 0xc8, 0xc4, 0xb8, 0x0a, 0xa4, 0x08, 0x2a, 0x66, 0x9c, 0xf0, + 0xbe, 0x41, 0x08, 0x71, 0x1c, 0x2f, 0xf6, 0x98, 0xfa, 0x7d, 0x68, 0x62, + 0x5c, 0x09, 0x22, 0x49, 0x4f, 0xec, 0xbd, 0x36, 0xd5, 0xbf, 0x73, 0x1c, + 0x1a, 0xb9, 0xa9, 0x7a, 0x63, 0x5d, 0x11, 0x44, 0xc7, 0x0a, 0xd0, 0xb3, + 0x26, 0x98, 0x56, 0x87, 0xeb, 0x2d, 0x6c, 0x0a, 0x21, 0xce, 0xe6, 0x15, + 0xfc, 0xc3, 0x74, 0xfb, 0x1a, 0xbe, 0x2e, 0x1b, 0xe4, 0x5e, 0xec, 0xb1, + 0x05, 0x11, 0xc1, 0x68, 0xc6, 0xc1, 0x9d, 0x5b, 0xc8, 0x7f, 0x30, 0x24, + 0x7e, 0xb8, 0xdc, 0x89, 0x71, 0x15, 0x28, 0x76, 0xb4, 0x27, 0xf6, 0xb4, + 0x26, 0x1c, 0xed, 0x59, 0x43, 0xd6, 0xe1, 0x0f, 0x3a, 0x17, 0x11, 0x04, + 0xc1, 0x19, 0x34, 0x08, 0xcc, 0x74, 0x33, 0x4a, 0x59, 0xe6, 0x7c, 0x5f, + 0x3d, 0x5e, 0x87, 0xd7, 0xe3, 0x56, 0xab, 0xf5, 0xc7, 0xe6, 0x74, 0x34, + 0xe1, 0x3f, 0xe5, 0x21, 0x6e, 0xce, 0x0a, 0x36, 0x99, 0x91, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +unsigned char ResetButton_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x11, 0xf2, 0xad, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x04, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x8d, + 0x71, 0xdb, 0x36, 0x14, 0x80, 0x1f, 0x48, 0x89, 0x92, 0xcf, 0xbe, 0xab, + 0x3a, 0x41, 0x39, 0x82, 0x37, 0xb0, 0x32, 0x41, 0xb2, 0x41, 0x9d, 0x09, + 0x92, 0x4e, 0xe0, 0x8c, 0x50, 0x4f, 0x60, 0x77, 0x82, 0xb8, 0x13, 0x58, + 0x99, 0x20, 0xee, 0x04, 0x66, 0x27, 0xb0, 0x7a, 0x67, 0x57, 0x24, 0x24, + 0x12, 0x79, 0xa0, 0xa5, 0x84, 0x04, 0x29, 0x9b, 0xf8, 0x21, 0x09, 0x46, + 0xf8, 0xee, 0x74, 0x0e, 0x71, 0x82, 0x4c, 0x7f, 0x7a, 0x20, 0x81, 0xf7, + 0xc0, 0x00, 0x38, 0x1c, 0x07, 0x0f, 0x63, 0x6c, 0x96, 0x50, 0xfa, 0x95, + 0x52, 0xfa, 0x3b, 0x38, 0xe4, 0xd8, 0xc9, 0x8b, 0x13, 0xca, 0xf8, 0xcb, + 0x49, 0x94, 0xa4, 0x28, 0x6f, 0x88, 0x12, 0x3d, 0xe8, 0x99, 0x2c, 0x4d, + 0x2f, 0x2b, 0x6d, 0x0c, 0xae, 0x5d, 0x24, 0x4a, 0xb0, 0x5a, 0xad, 0xce, + 0xc5, 0x28, 0x74, 0xc3, 0x59, 0x12, 0x27, 0xd1, 0x00, 0x4e, 0xa2, 0x01, + 0x9c, 0x44, 0x03, 0x38, 0x89, 0x06, 0x70, 0x12, 0x0d, 0xe0, 0x24, 0x1a, + 0xc0, 0x76, 0x89, 0x04, 0x2c, 0x03, 0x85, 0x85, 0x69, 0xea, 0xcf, 0x7c, + 0x9f, 0xcc, 0x70, 0xa1, 0x17, 0xe6, 0x8d, 0x1e, 0x9b, 0x13, 0x20, 0x15, + 0x61, 0x1e, 0x81, 0xf3, 0x20, 0x08, 0xfe, 0x82, 0x1e, 0xe9, 0x5d, 0xe0, + 0x6a, 0xb5, 0x9e, 0x83, 0x97, 0xcd, 0x09, 0xf1, 0xce, 0x70, 0x61, 0x7c, + 0x8a, 0x4d, 0x33, 0x99, 0xfe, 0x7d, 0x4b, 0xec, 0x45, 0x20, 0x4f, 0x20, + 0xc4, 0x94, 0x7e, 0xdc, 0x46, 0x55, 0x08, 0x9a, 0xb0, 0x2c, 0x7d, 0x73, + 0x74, 0x74, 0xb4, 0x80, 0x1e, 0x18, 0x41, 0x87, 0xec, 0xc4, 0x25, 0x74, + 0xfd, 0x01, 0xe5, 0x49, 0x45, 0xda, 0x3e, 0x08, 0x81, 0xeb, 0x69, 0x4f, + 0xf2, 0xf2, 0xdf, 0x0f, 0x1d, 0xf1, 0x7f, 0x1c, 0x7f, 0xf4, 0x88, 0x77, + 0x01, 0xaf, 0x0f, 0xd1, 0x25, 0x9e, 0x54, 0xc4, 0x18, 0xfe, 0x24, 0x10, + 0xe5, 0x2d, 0x04, 0x4e, 0xf1, 0xf8, 0x54, 0x7c, 0x23, 0x97, 0x37, 0x09, + 0x82, 0xf7, 0xd0, 0x23, 0xad, 0x47, 0x20, 0xbf, 0x29, 0x10, 0x7f, 0x74, + 0x85, 0xe1, 0x37, 0xdf, 0xf3, 0x96, 0x25, 0x30, 0xb8, 0xc3, 0x9f, 0x37, + 0x93, 0xc9, 0xf8, 0x86, 0x10, 0xf2, 0x6f, 0xa5, 0xbf, 0xe7, 0xdf, 0x8a, + 0x9d, 0x6c, 0x90, 0xd7, 0x3a, 0x8f, 0x8f, 0x8f, 0xa7, 0x38, 0xe5, 0x78, + 0xa8, 0x9b, 0x86, 0xc4, 0x49, 0x72, 0x9f, 0x24, 0xc9, 0x05, 0x1f, 0xd6, + 0xfb, 0xfa, 0x73, 0x79, 0xf8, 0xde, 0x7b, 0xb1, 0x2f, 0xe6, 0x10, 0xaf, + 0xe0, 0x67, 0x67, 0xdf, 0xfc, 0x8d, 0x0b, 0xe5, 0xe2, 0x1a, 0xf4, 0x77, + 0xf2, 0x2a, 0xaf, 0x98, 0xde, 0x72, 0x31, 0x0d, 0xfa, 0x1f, 0xae, 0xbc, + 0xed, 0xb0, 0xad, 0xc8, 0x6b, 0x12, 0x75, 0x9c, 0x43, 0x8f, 0xbc, 0xda, + 0x3f, 0xbe, 0xe9, 0xb2, 0xeb, 0xa0, 0xe5, 0x71, 0xea, 0x0a, 0x44, 0x71, + 0x1c, 0x7f, 0x68, 0xd2, 0xf7, 0xe0, 0xe5, 0xf1, 0x79, 0x9e, 0xcd, 0xc3, + 0x96, 0xdf, 0xed, 0x57, 0x49, 0xf2, 0x29, 0x49, 0xe8, 0x55, 0x93, 0xeb, + 0x70, 0xa7, 0xd4, 0x0b, 0x48, 0x3e, 0xab, 0xf7, 0x35, 0x1f, 0x79, 0xfc, + 0xf3, 0x8a, 0x33, 0x81, 0x97, 0xa6, 0x4f, 0x32, 0x18, 0x29, 0x6b, 0x7a, + 0xbe, 0xcf, 0x23, 0x2d, 0xfc, 0xd1, 0xc2, 0x22, 0x96, 0x65, 0x7f, 0x34, + 0xeb, 0x3b, 0xfa, 0x0c, 0xc2, 0x7a, 0xb8, 0x8d, 0x49, 0x32, 0x03, 0x12, + 0x16, 0x0e, 0x67, 0x94, 0x6e, 0x1a, 0x5d, 0x5a, 0x5a, 0x67, 0x1b, 0x41, + 0xca, 0xb9, 0x3a, 0x71, 0xb2, 0xdd, 0xd6, 0x35, 0x2f, 0x49, 0xd6, 0x17, + 0xe2, 0x7c, 0xd4, 0x54, 0x14, 0x6a, 0xb1, 0x5a, 0xd1, 0x73, 0x71, 0x85, + 0x01, 0x92, 0xec, 0x24, 0xb6, 0x7d, 0xc3, 0x88, 0x85, 0x55, 0x11, 0x97, + 0x0a, 0x7d, 0x23, 0x5e, 0xbf, 0x54, 0x33, 0xc5, 0x5d, 0x5c, 0xd8, 0x6b, + 0xa2, 0x50, 0xfa, 0xcb, 0x36, 0x0a, 0xca, 0xaa, 0x4c, 0x9a, 0xad, 0xbb, + 0xc3, 0x15, 0xc8, 0xd3, 0x69, 0x42, 0x14, 0xe2, 0xf9, 0xce, 0x41, 0x03, + 0xad, 0x9b, 0x48, 0x96, 0xc1, 0x59, 0xa9, 0x81, 0xb1, 0x1b, 0x4c, 0x6c, + 0x46, 0x60, 0x29, 0x98, 0xe9, 0x59, 0x62, 0x6a, 0xec, 0xae, 0xd8, 0xe6, + 0x79, 0xa3, 0x33, 0xd0, 0x40, 0xef, 0x2e, 0xec, 0x91, 0x77, 0xa5, 0x43, + 0x8f, 0xdc, 0x80, 0xed, 0x64, 0x50, 0x3a, 0x47, 0x46, 0xf6, 0xa6, 0xd9, + 0x1a, 0xa1, 0x27, 0xf0, 0xb9, 0x86, 0xf1, 0x1d, 0x1c, 0xd2, 0xff, 0x80, + 0xe5, 0x30, 0x96, 0xfe, 0x5d, 0x6e, 0xa8, 0x26, 0x6a, 0x65, 0x50, 0xce, + 0x48, 0x3f, 0x6f, 0x8c, 0x5c, 0x3f, 0x14, 0x9a, 0x96, 0xd3, 0x49, 0xf0, + 0x2b, 0x0c, 0x00, 0x7e, 0x1d, 0x84, 0x42, 0x66, 0x7c, 0x12, 0x8c, 0x43, + 0x31, 0x91, 0xdb, 0x14, 0xe5, 0x08, 0x8c, 0xe3, 0x8d, 0xf8, 0xcd, 0x45, + 0x30, 0x10, 0x50, 0x56, 0x54, 0x3c, 0x7e, 0x7a, 0x7a, 0x52, 0xfe, 0xe2, + 0xcd, 0x6d, 0xb0, 0xc4, 0x1a, 0x06, 0x0c, 0x04, 0x06, 0xe5, 0x73, 0x9d, + 0x4c, 0x26, 0xbf, 0x80, 0x22, 0x1a, 0x02, 0xb7, 0x45, 0xef, 0x1f, 0xc7, + 0x83, 0x11, 0x48, 0x18, 0x8b, 0x8a, 0xc7, 0x8c, 0x91, 0x10, 0x14, 0x31, + 0x16, 0x81, 0xf9, 0x14, 0x61, 0x30, 0x98, 0x29, 0xa9, 0x72, 0x34, 0x04, + 0x96, 0xaf, 0x23, 0x58, 0x76, 0x0c, 0x61, 0x20, 0x30, 0x52, 0x2e, 0xad, + 0x12, 0x52, 0x8e, 0x48, 0x19, 0x94, 0x05, 0xfa, 0xbe, 0x30, 0x64, 0x09, + 0x18, 0xfb, 0x56, 0xdb, 0x86, 0x00, 0xf4, 0x1f, 0x81, 0x69, 0x9a, 0x8a, + 0x43, 0x36, 0x84, 0x81, 0x80, 0x53, 0xb0, 0xb0, 0x78, 0x3c, 0x1a, 0x8d, + 0x94, 0xe7, 0xaf, 0xca, 0x02, 0xb7, 0x4b, 0xb6, 0xa2, 0xc4, 0x19, 0x9e, + 0xd8, 0x6f, 0x60, 0x39, 0x7c, 0xfd, 0x0e, 0xe5, 0x08, 0x5c, 0xea, 0x5c, + 0xbf, 0xf5, 0x6e, 0x22, 0xc2, 0xba, 0x12, 0xb3, 0x1d, 0xef, 0xc0, 0x72, + 0xd2, 0x54, 0x58, 0x79, 0xb0, 0xf2, 0xdf, 0x20, 0x8b, 0x96, 0x40, 0xc2, + 0xc8, 0x42, 0xf8, 0x34, 0xeb, 0x05, 0xe2, 0x7a, 0xfd, 0xad, 0xd0, 0xa4, + 0xb5, 0x7e, 0xd7, 0xcc, 0xc6, 0x6c, 0xbe, 0x94, 0x1a, 0x18, 0xdf, 0x04, + 0x64, 0x41, 0x96, 0x77, 0x0f, 0x3c, 0xd5, 0xc6, 0x80, 0x95, 0xbe, 0xe4, + 0xcd, 0x86, 0x7e, 0x01, 0x0d, 0xb4, 0x04, 0x6e, 0xf7, 0xe4, 0x45, 0x85, + 0xa6, 0x4e, 0x6a, 0x0d, 0xea, 0x39, 0x47, 0x7f, 0x5e, 0x3e, 0x66, 0xd1, + 0xc9, 0xc9, 0x89, 0xd6, 0x10, 0xd6, 0xa6, 0xae, 0xd6, 0x00, 0x2d, 0x82, + 0xa5, 0xc9, 0x6b, 0xfe, 0x3b, 0x78, 0x19, 0x00, 0x24, 0x31, 0x95, 0x3d, + 0x37, 0x4a, 0x5d, 0x96, 0xb7, 0xad, 0x5a, 0xc3, 0x56, 0xde, 0xf7, 0x2f, + 0x4a, 0x46, 0x62, 0xb5, 0x76, 0x63, 0x51, 0xf6, 0xbc, 0x12, 0x85, 0x31, + 0xbd, 0x05, 0xc3, 0x08, 0xf2, 0x76, 0xaf, 0xaf, 0x8d, 0xfa, 0xd6, 0xd4, + 0x9e, 0x79, 0x81, 0x1d, 0x6c, 0x41, 0x8c, 0x42, 0xd3, 0x27, 0x57, 0x2f, + 0x2f, 0xb9, 0x6f, 0x1a, 0x41, 0xbc, 0xc8, 0xaf, 0xda, 0xb7, 0x33, 0xf8, + 0x09, 0x71, 0x71, 0xaf, 0x6d, 0x9a, 0x94, 0xfe, 0x5c, 0x4d, 0x79, 0x7c, + 0x3b, 0x87, 0xea, 0x7e, 0x9d, 0xc1, 0xa3, 0x2b, 0xaf, 0x76, 0xbf, 0x0e, + 0x6d, 0x36, 0xec, 0x07, 0x8f, 0x76, 0xe4, 0xd5, 0x6e, 0xf2, 0xb4, 0x70, + 0xe8, 0xb6, 0x41, 0x2b, 0xc3, 0x16, 0x5f, 0x2a, 0x53, 0x9f, 0xc1, 0xa1, + 0x23, 0x2f, 0xbf, 0xdb, 0xd2, 0xf5, 0x6d, 0x9d, 0xbc, 0x83, 0x78, 0x40, + 0x51, 0x4b, 0xde, 0x73, 0xd4, 0x3d, 0x38, 0x79, 0x12, 0xf2, 0x76, 0x9b, + 0x26, 0xe3, 0xbd, 0x8f, 0x52, 0xa8, 0xad, 0x58, 0x64, 0xb0, 0xe2, 0x69, + 0x4d, 0x2e, 0xaf, 0xfa, 0x34, 0x66, 0xbe, 0xc7, 0xf0, 0x8d, 0xb8, 0x55, + 0x24, 0x7f, 0xf0, 0x86, 0xf8, 0x6f, 0xf3, 0x5d, 0x11, 0x2f, 0x3d, 0x9c, + 0xc8, 0x60, 0x81, 0x45, 0xf4, 0xf7, 0x6d, 0x6f, 0x35, 0xe9, 0xff, 0x69, + 0xcd, 0x5a, 0x79, 0x39, 0x77, 0x78, 0x72, 0xf9, 0x42, 0x9f, 0x11, 0x12, + 0x12, 0x60, 0xb3, 0x6d, 0xdd, 0xe5, 0xd5, 0x47, 0xc5, 0x80, 0x65, 0x9f, + 0xa6, 0xd3, 0xe9, 0x25, 0x74, 0x40, 0xaf, 0x02, 0x5f, 0x90, 0xa7, 0xc2, + 0x12, 0x25, 0xff, 0x19, 0x04, 0xc1, 0x65, 0x97, 0x15, 0xc2, 0xde, 0x04, + 0xf2, 0x6d, 0x65, 0x75, 0xcf, 0xc0, 0x29, 0x10, 0xa1, 0xb8, 0xeb, 0xae, + 0xc5, 0xed, 0xe8, 0x37, 0x02, 0x71, 0xb2, 0x8b, 0x12, 0x65, 0xd7, 0xcd, + 0xf9, 0xc3, 0x89, 0x58, 0x8a, 0x5c, 0x78, 0x9e, 0xb7, 0x18, 0x8f, 0xc7, + 0x5a, 0x09, 0x51, 0x5d, 0x2c, 0x78, 0x62, 0xbd, 0x5e, 0x22, 0xdf, 0x68, + 0x4e, 0xc0, 0x5b, 0x3c, 0xff, 0x9b, 0x45, 0xb8, 0xc6, 0xfe, 0xef, 0xf8, + 0xf8, 0xf8, 0x41, 0x75, 0x13, 0xd0, 0x4f, 0x8d, 0xfb, 0xdf, 0x39, 0x0c, + 0xe0, 0x24, 0x1a, 0xc0, 0x49, 0x34, 0x80, 0x93, 0x68, 0x00, 0x27, 0xd1, + 0x00, 0x4e, 0xa2, 0x01, 0x9c, 0x44, 0x03, 0x38, 0x89, 0x06, 0x70, 0x12, + 0x0d, 0x50, 0x27, 0xf1, 0x60, 0x0a, 0x44, 0xa6, 0x28, 0x4a, 0xe4, 0xf2, + 0x6c, 0xde, 0xc8, 0x64, 0x2d, 0x5c, 0xa2, 0x93, 0xe7, 0x70, 0xec, 0xf8, + 0x06, 0x48, 0x19, 0x41, 0x87, 0x23, 0xf2, 0x01, 0xeb, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +unsigned char SaveButton_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x11, 0xf2, 0xad, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x05, 0x40, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x8d, + 0x71, 0xdb, 0x36, 0x14, 0xc7, 0xdf, 0x23, 0x25, 0x51, 0x3a, 0xfb, 0xae, + 0xca, 0x04, 0xe1, 0x06, 0x51, 0x27, 0xa8, 0x3a, 0x41, 0xdc, 0x09, 0x6a, + 0x4f, 0xd0, 0x74, 0x82, 0x38, 0x13, 0x38, 0x99, 0xc0, 0xea, 0x04, 0x76, + 0x27, 0xb0, 0x32, 0x41, 0x9d, 0x09, 0xc2, 0x4c, 0x60, 0xe6, 0xce, 0xb6, + 0x48, 0xca, 0xe4, 0xeb, 0x83, 0x2c, 0x5f, 0x48, 0x48, 0x0a, 0x40, 0x81, + 0xa4, 0x29, 0x19, 0xbf, 0x3b, 0x25, 0x26, 0x45, 0x10, 0xe0, 0x5f, 0xf8, + 0x7a, 0x0f, 0x8f, 0x00, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0x62, 0xb1, + 0xbc, 0x44, 0x10, 0x2a, 0xe2, 0xf6, 0x36, 0x19, 0xb9, 0x2e, 0xf0, 0x07, + 0xdf, 0x10, 0xd1, 0x90, 0x10, 0x7d, 0x20, 0xf2, 0x73, 0x97, 0x0c, 0x97, + 0x9f, 0x26, 0x09, 0x11, 0x21, 0xe0, 0x87, 0xfc, 0xd8, 0xeb, 0xf5, 0xfe, + 0x81, 0x1a, 0x30, 0x12, 0x70, 0x36, 0x9b, 0x8f, 0x59, 0xb4, 0xb7, 0x19, + 0xd1, 0x31, 0x34, 0x2f, 0x4e, 0x49, 0x28, 0xa0, 0x2c, 0xfb, 0x7d, 0x30, + 0x18, 0x04, 0x50, 0x21, 0x5b, 0x09, 0x38, 0x9b, 0xcd, 0x7c, 0x74, 0x3b, + 0xe7, 0x5c, 0xc3, 0xc6, 0xb0, 0x53, 0x54, 0x2f, 0x62, 0x69, 0x01, 0xe3, + 0x38, 0x3e, 0x22, 0xc0, 0x73, 0x68, 0x7d, 0x8d, 0xdb, 0x44, 0xb5, 0x22, + 0x96, 0x12, 0x70, 0x29, 0xde, 0xc5, 0x86, 0xaf, 0x43, 0x2e, 0xdc, 0x14, + 0xc1, 0xb9, 0x46, 0xc4, 0x00, 0x91, 0x02, 0xbe, 0xfe, 0xfb, 0xc1, 0xc1, + 0xc1, 0xcd, 0xf2, 0xfb, 0xef, 0x7c, 0x3e, 0x84, 0x06, 0x59, 0xb4, 0x14, + 0xc7, 0x39, 0xe3, 0xc7, 0x3c, 0x2a, 0x7e, 0x53, 0x4f, 0x73, 0x56, 0x16, + 0x26, 0x8a, 0x93, 0x1b, 0xfe, 0x50, 0xe1, 0x13, 0x25, 0x57, 0xf3, 0xf9, + 0xfc, 0x37, 0x68, 0x31, 0xb3, 0x38, 0x9e, 0xac, 0x94, 0x3b, 0x8e, 0xbf, + 0x8a, 0x67, 0x82, 0xa6, 0x88, 0x93, 0xe4, 0x7c, 0x55, 0xbc, 0xe8, 0x2f, + 0xd8, 0x11, 0x9e, 0x55, 0x44, 0x31, 0xda, 0xca, 0x99, 0x73, 0xf3, 0x7c, + 0x0f, 0x3b, 0xc6, 0xb3, 0x89, 0xb8, 0x52, 0xfb, 0xb8, 0xd9, 0xc2, 0x8e, + 0xf2, 0x2c, 0x22, 0x72, 0x26, 0x5f, 0xf3, 0x19, 0xb6, 0xbd, 0xcf, 0x53, + 0xd1, 0xa8, 0x88, 0x49, 0x92, 0x8c, 0xa4, 0xcc, 0x6e, 0x60, 0x0f, 0xa8, + 0x4a, 0x44, 0x47, 0x75, 0x01, 0x91, 0xe3, 0x4b, 0x27, 0xa6, 0xb0, 0x07, + 0x0c, 0x3c, 0xef, 0x98, 0x80, 0x24, 0xf3, 0x0e, 0xc5, 0xb4, 0xe7, 0xaa, + 0x8c, 0x88, 0x4a, 0x01, 0x59, 0xb1, 0x37, 0x85, 0x2c, 0xd0, 0xb9, 0x86, + 0x3d, 0xa1, 0x0a, 0x11, 0x35, 0x04, 0x84, 0x51, 0xe1, 0xf6, 0x3c, 0x49, + 0x86, 0x3d, 0x62, 0x93, 0x88, 0x8e, 0xeb, 0x5e, 0x08, 0xa7, 0x88, 0x2a, + 0xbd, 0xba, 0x09, 0x63, 0xd1, 0x64, 0x13, 0x16, 0x06, 0xec, 0x19, 0xeb, + 0x44, 0x24, 0x82, 0x51, 0x92, 0x3c, 0x28, 0xe7, 0xb9, 0x4a, 0x01, 0x51, + 0xb2, 0x79, 0x85, 0x79, 0x06, 0x7b, 0xc8, 0x5a, 0x11, 0x51, 0xed, 0x2c, + 0x51, 0xda, 0xc2, 0x62, 0x0a, 0xc3, 0xff, 0xf9, 0x4f, 0xc7, 0x5e, 0xaf, + 0xeb, 0x73, 0x33, 0xfe, 0xa6, 0x4a, 0x27, 0xaa, 0x7f, 0x14, 0xcd, 0x8f, + 0xc0, 0x18, 0x0c, 0x06, 0x83, 0xee, 0x14, 0x1a, 0x40, 0x94, 0x39, 0x4e, + 0xe6, 0xf9, 0x59, 0x46, 0xd8, 0xf7, 0x7a, 0xaf, 0x7e, 0x96, 0xa6, 0x03, + 0x35, 0x20, 0x9c, 0x0e, 0x5c, 0x90, 0x0b, 0xd4, 0xe9, 0x61, 0x95, 0x10, + 0x44, 0x49, 0xf2, 0xb1, 0xdf, 0xeb, 0xfd, 0x0d, 0x35, 0x23, 0x9c, 0x1d, + 0x5c, 0x61, 0xf2, 0xa7, 0xcc, 0xfb, 0x40, 0xc8, 0xd5, 0xbe, 0x65, 0x26, + 0xca, 0xda, 0xc7, 0x57, 0xbd, 0x85, 0x2a, 0x21, 0x78, 0x07, 0x2d, 0xa5, + 0x92, 0x3a, 0xb2, 0x4a, 0xe5, 0x23, 0x75, 0x6b, 0xa7, 0x4e, 0xb5, 0x34, + 0x61, 0xcf, 0xeb, 0x7e, 0x98, 0xcd, 0x92, 0x6f, 0x8e, 0x03, 0xc6, 0x26, + 0x9f, 0x68, 0x56, 0x69, 0xfa, 0xf0, 0x09, 0x5a, 0x8a, 0xce, 0x20, 0x42, + 0xf9, 0x63, 0xee, 0x54, 0x2b, 0x5b, 0x88, 0x6a, 0x23, 0x65, 0x9f, 0xb7, + 0xa6, 0x26, 0xfc, 0x72, 0xb0, 0x02, 0x1a, 0x62, 0x05, 0x34, 0xc4, 0x0a, + 0x68, 0x88, 0x15, 0xd0, 0x10, 0x2b, 0xa0, 0x21, 0x56, 0x40, 0x43, 0xac, + 0x80, 0x86, 0x58, 0x01, 0x0d, 0xb1, 0x02, 0x1a, 0x62, 0x05, 0x34, 0xc4, + 0x0a, 0x68, 0x88, 0x15, 0xd0, 0x10, 0x2b, 0xa0, 0x21, 0x56, 0x40, 0x43, + 0xac, 0x80, 0x86, 0x58, 0x01, 0x0d, 0xb1, 0x02, 0x1a, 0x52, 0xcb, 0x9a, + 0xc8, 0x26, 0x16, 0xeb, 0xae, 0xf1, 0xfc, 0x4f, 0x44, 0x18, 0xf1, 0x62, + 0xc2, 0x88, 0x57, 0xff, 0x9f, 0x96, 0x0d, 0xfd, 0x12, 0xb7, 0x09, 0x38, + 0x7d, 0x48, 0x80, 0x21, 0xff, 0xfa, 0xd7, 0x44, 0xd9, 0xe7, 0x5e, 0xaf, + 0x37, 0x6d, 0x3a, 0xfe, 0xfa, 0x89, 0x46, 0xd6, 0x44, 0x1a, 0x78, 0x2d, + 0x82, 0x05, 0xa5, 0x4f, 0x03, 0xcf, 0x3b, 0x05, 0x43, 0x5a, 0xb7, 0x26, + 0xc2, 0xe2, 0x1d, 0xa3, 0xe3, 0xfe, 0x57, 0xf3, 0x3b, 0x25, 0x43, 0x04, + 0x7c, 0xdf, 0x78, 0xe0, 0x38, 0xd4, 0x2c, 0xa0, 0x88, 0x50, 0x60, 0xf1, + 0x1a, 0x7c, 0xa7, 0xe4, 0x31, 0x34, 0x4d, 0x27, 0xaa, 0xaa, 0x2a, 0x6a, + 0xeb, 0x03, 0x45, 0x4d, 0xe0, 0x7e, 0xea, 0x6c, 0xe5, 0x0b, 0x82, 0x29, + 0xff, 0x7b, 0xd9, 0xe9, 0x38, 0x81, 0xeb, 0xba, 0x8b, 0x05, 0x73, 0xbd, + 0x68, 0x87, 0x65, 0x72, 0xa2, 0xd7, 0x77, 0x77, 0x77, 0xaf, 0xfa, 0xfd, + 0xfe, 0xeb, 0x2c, 0xa3, 0x71, 0x46, 0x24, 0xe2, 0x6f, 0xfc, 0x1f, 0x57, + 0xa0, 0x2f, 0x62, 0xba, 0xf9, 0x8f, 0x3f, 0xa0, 0x0d, 0xc8, 0xef, 0x86, + 0xe8, 0xfe, 0xba, 0x4d, 0xbd, 0x16, 0x21, 0xca, 0xb3, 0x2e, 0x5c, 0x97, + 0x7f, 0xc0, 0x31, 0x6c, 0x81, 0x7c, 0x1f, 0xd5, 0xf5, 0x3a, 0x4d, 0x58, + 0x1e, 0xdd, 0x7e, 0x01, 0x0d, 0x78, 0x84, 0x1d, 0xe7, 0x8f, 0x11, 0xe8, + 0x94, 0x6b, 0x4d, 0xe5, 0x11, 0x06, 0x62, 0xf4, 0x15, 0xa1, 0x69, 0x9c, + 0xc1, 0x34, 0x7f, 0xde, 0x75, 0x3b, 0xa5, 0xe3, 0x73, 0xd6, 0xf4, 0x9f, + 0x81, 0x2a, 0x4d, 0x2d, 0x7d, 0xa0, 0x08, 0x4c, 0x87, 0xe2, 0xd4, 0x24, + 0xf4, 0x3c, 0xef, 0x03, 0xd4, 0x08, 0xa5, 0x69, 0xe1, 0xfe, 0xcb, 0xa6, + 0x5d, 0x3b, 0xa5, 0x05, 0x14, 0xfd, 0x8f, 0xea, 0x9a, 0xd5, 0xc0, 0xf4, + 0xfa, 0x83, 0x83, 0xb8, 0x76, 0xcb, 0x79, 0xf8, 0x50, 0x12, 0xee, 0x93, + 0xe5, 0xee, 0x49, 0x39, 0xb7, 0x54, 0x0b, 0x28, 0xc5, 0x44, 0x73, 0x4d, + 0xd2, 0x68, 0xc2, 0xc5, 0xc0, 0x74, 0xc7, 0xc1, 0xda, 0x05, 0x5c, 0x4e, + 0xa4, 0x83, 0xfc, 0x39, 0x31, 0xe0, 0x40, 0x09, 0xd2, 0x14, 0x8b, 0x02, + 0x52, 0x05, 0x02, 0x22, 0x91, 0x54, 0x28, 0xf4, 0x95, 0x69, 0xa4, 0xb8, + 0x6a, 0xd2, 0x28, 0x48, 0x15, 0xc8, 0xd6, 0x88, 0x4e, 0x6b, 0x29, 0x52, + 0x78, 0xc3, 0x5e, 0x1c, 0x57, 0x20, 0xa0, 0x54, 0x28, 0x22, 0x39, 0x93, + 0x35, 0xc5, 0x90, 0x46, 0xea, 0xa6, 0x22, 0xfb, 0x49, 0x6a, 0x72, 0x7a, + 0xad, 0xe5, 0x07, 0xdc, 0x52, 0x0a, 0x35, 0x56, 0xe7, 0x95, 0x0e, 0xa5, + 0x80, 0x69, 0x4a, 0x5f, 0xf2, 0xc7, 0x6c, 0x7b, 0x8e, 0x60, 0x7f, 0x91, + 0x9e, 0x0d, 0xcd, 0x05, 0x74, 0x5d, 0x69, 0x00, 0x40, 0x1c, 0x43, 0x4b, + 0xd9, 0xa6, 0xbb, 0x29, 0x5c, 0x0f, 0x45, 0x73, 0x73, 0x3e, 0x8f, 0x94, + 0x13, 0x7c, 0xa5, 0x80, 0xec, 0xe9, 0x10, 0x02, 0xe6, 0x9b, 0xc6, 0x70, + 0xdb, 0x49, 0x6a, 0x9b, 0x11, 0xaf, 0xf4, 0x42, 0xc1, 0xe4, 0xa4, 0xe0, + 0xf0, 0xf0, 0xd0, 0xbc, 0x06, 0x2e, 0x2e, 0x42, 0x9c, 0xe4, 0x8f, 0xd1, + 0x75, 0x77, 0xee, 0x5d, 0x61, 0x15, 0xe8, 0x42, 0xe1, 0x99, 0xd8, 0x39, + 0x31, 0xd5, 0x49, 0xa7, 0x25, 0x60, 0x9a, 0x3e, 0xfc, 0x5b, 0x38, 0xc1, + 0x56, 0xc6, 0xfd, 0x7d, 0xd4, 0xda, 0xc8, 0xf9, 0xb2, 0xb0, 0x29, 0x78, + 0x2a, 0x7b, 0x8b, 0x78, 0x40, 0x99, 0xe8, 0xa4, 0xd5, 0x12, 0x70, 0x30, + 0x18, 0x4c, 0x65, 0x53, 0xc9, 0x71, 0x9d, 0xb3, 0x45, 0xc6, 0x3b, 0xce, + 0x7d, 0x14, 0xbd, 0x13, 0xae, 0xb0, 0xfc, 0x39, 0x76, 0x00, 0x4e, 0xba, + 0xdd, 0xee, 0x67, 0x9d, 0xf4, 0xda, 0x96, 0x08, 0x9b, 0x4a, 0x27, 0x20, + 0x4d, 0x13, 0x16, 0x3e, 0xb8, 0x64, 0x7e, 0xb5, 0xec, 0x3f, 0x76, 0x8a, + 0xc5, 0x36, 0x06, 0x5c, 0x76, 0x07, 0x1d, 0xd9, 0x63, 0x14, 0x66, 0x59, + 0xaa, 0x6d, 0x76, 0x6a, 0xbb, 0xb3, 0xc4, 0x16, 0x21, 0xec, 0xdf, 0x3b, + 0x59, 0xd9, 0xf6, 0x84, 0xab, 0x3e, 0x3a, 0x20, 0xf6, 0x54, 0x60, 0x71, + 0x71, 0x8a, 0xc2, 0xcd, 0x8e, 0x3c, 0x57, 0x2c, 0xf8, 0x31, 0xb2, 0x67, + 0xda, 0x63, 0x26, 0x1b, 0x3e, 0x6e, 0x49, 0x25, 0x2c, 0x0c, 0xf2, 0xc5, + 0x3c, 0x8f, 0x16, 0x53, 0x15, 0xd1, 0x5c, 0x79, 0xae, 0xba, 0xc6, 0xd7, + 0xc2, 0x4e, 0x8f, 0x93, 0x7e, 0x89, 0xed, 0x50, 0x5e, 0xe0, 0xc6, 0x3b, + 0x1b, 0x09, 0x85, 0x78, 0x3c, 0xf9, 0xbe, 0x2c, 0x93, 0xa8, 0xb4, 0x33, + 0x41, 0x64, 0x40, 0x59, 0xfa, 0x2b, 0x9b, 0x6b, 0x13, 0xd8, 0x17, 0xd8, + 0xc9, 0x2b, 0x9e, 0xa9, 0xac, 0x78, 0x02, 0xa3, 0x97, 0x66, 0xc4, 0xe6, + 0x13, 0x62, 0xe3, 0xb1, 0xa5, 0xef, 0xcf, 0x87, 0xdd, 0x22, 0x14, 0xd3, + 0x33, 0xae, 0x08, 0x97, 0xba, 0x03, 0xc6, 0x3a, 0x2a, 0xdc, 0xfe, 0xee, + 0x76, 0x24, 0xdc, 0xec, 0x6c, 0xfa, 0x8d, 0x08, 0xd8, 0xdc, 0x23, 0x1c, + 0x0a, 0xa7, 0x02, 0xc1, 0x56, 0x4b, 0x97, 0xa6, 0x84, 0x90, 0x1f, 0xf0, + 0x68, 0xb1, 0x14, 0x1a, 0x3c, 0xda, 0xf5, 0x78, 0x9d, 0x24, 0xd1, 0x17, + 0x9d, 0x49, 0xb2, 0xc5, 0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0xb2, + 0x89, 0xff, 0x01, 0xb5, 0x56, 0x6a, 0xf0, 0xc1, 0xda, 0x1a, 0x44, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +inline constexpr size_t PauseButton_png_len = sizeof(PauseButton_png) /sizeof(PauseButton_png[0]); +inline constexpr size_t PlayButton_png_len = sizeof(PlayButton_png) /sizeof(PlayButton_png[0]); +inline constexpr size_t ResetButton_png_len = sizeof(ResetButton_png) /sizeof(ResetButton_png[0]); +inline constexpr size_t SaveButton_png_len = sizeof(SaveButton_png) /sizeof(SaveButton_png[0]); + +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 9c55e586..200e5380 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,3 +1,4 @@ +#include "imagesHeaderToolbar.hpp" #include "popups.hpp" #include "settingspopup.hpp" #include "style.hpp" @@ -83,24 +84,69 @@ int main() { ImGui::EndPopup(); } + // Initializing all variables for images in the toolbar + static constexpr size_t size{4}; // number of pictures + int PngRenderedCnt = 0; + static bool loaded_png[size]{}; + static int image_height[size]; + static int image_width[size]; + static GLuint image_texture[size]; + static constexpr float iconsSacle{0.8f}; + + // The order matters because of the counter for the images !!! + static const unsigned char *imagesNames[] = { + PlayButton_png, PauseButton_png, SaveButton_png, ResetButton_png}; + static const unsigned int imagesLen[] = { + PlayButton_png_len, PauseButton_png_len, SaveButton_png_len, + ResetButton_png_len}; + // Load the images for the SideBarMenu + for (int i = 0; i < size; i++) + if (!loaded_png[i]) { + if (LoadTextureFromHeader(imagesNames[i], imagesLen[i], + &image_texture[i], &image_width[i], + &image_height[i])) + loaded_png[i] = true; + else + fmt::println("Error Loading Png #{}.", i); + } + + // ImGui::SetCursorPosY(windowSize.y * 0.05f); + if (flagPaused) { // ######################## Buttonstripe if (!devices.empty()) if (!sampler.has_value()) { + PngRenderedCnt = 0; set_button_style_to(config, "start"); // Start Button - if (ImGui::Button(appLanguage[Key::Start], toolBtnSize)) { + if (ImGui::ImageButton( + appLanguage[Key::Start], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { sampler.emplace(deviceManager, std::move(devices)); flagPaused = false; flagDataNotSaved = true; + for (auto &device : devices) { + device->send(Omniscope::Start{}); + } } ImGui::PopStyleColor(3); } // set_button_style_to(config, "standart"); } else { // ############################ Stop Button + PngRenderedCnt = 1; set_button_style_to(config, "stop"); - if (ImGui::Button(appLanguage[Key::Stop], toolBtnSize)) + if (ImGui::ImageButton( + appLanguage[Key::Stop], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { flagPaused = true; + for (auto &device : sampler->sampleDevices) { + device.first->send(Omniscope::Stop{}); + } + } ImGui::PopStyleColor(3); } if (flagPaused) { @@ -108,19 +154,35 @@ int main() { // followed by a query as to whether the old data should be saved if (sampler.has_value()) { ImGui::SameLine(); + PngRenderedCnt = 0; set_button_style_to(config, "start"); - if (ImGui::Button(appLanguage[Key::Continue], toolBtnSize)) { + if (ImGui::ImageButton( + appLanguage[Key::Continue], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { flagPaused = false; flagDataNotSaved = true; + for (auto &device : sampler->sampleDevices) { + device.first->send(Omniscope::Start{}); + } } ImGui::PopStyleColor(3); ImGui::SameLine(); + PngRenderedCnt = 3; set_button_style_to(config, "stop"); - if (ImGui::Button(appLanguage[Key::Reset], toolBtnSize)) { - if (flagDataNotSaved) + if (ImGui::ImageButton( + appLanguage[Key::Reset], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { + if (flagDataNotSaved) { ImGui::OpenPopup(appLanguage[Key::Reset_q]); - else { + for (auto &device : sampler->sampleDevices) { + device.first->send(Omniscope::Stop{}); + } + } else { rstSettings(); flagPaused = true; } @@ -135,7 +197,12 @@ int main() { if (pushStyle) ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); - if (ImGui::Button(appLanguage[Key::Save], toolBtnSize)) { + PngRenderedCnt = 2; + if (ImGui::ImageButton( + appLanguage[Key::Save], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { if (sampler.has_value()) ImGui::OpenPopup(appLanguage[Key::Save_Recorded_Data]); else @@ -150,7 +217,11 @@ int main() { } else { ImGui::SameLine(); ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); - ImGui::Button(appLanguage[Key::Save], toolBtnSize); + PngRenderedCnt = 2; + ImGui::ImageButton(appLanguage[Key::Save], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle)); ImGui::PopStyleColor(); } ImGui::EndChild(); // end child "Buttonstripe" @@ -160,7 +231,7 @@ int main() { if (open_settings) { const auto EngItr = englishLan.find(Key::Settings); const auto GrmItr = germanLan.find(Key::Settings); - // check returned value from find() and set titles + // check returned value from find() and set titles if (EngItr != englishLan.end() && GrmItr != germanLan.end()) { titles[0] = (std::string)EngItr->second + "###ID"; titles[1] = (std::string)GrmItr->second + "###ID"; From 3125b8b7ae78e27fee2dd0b05d8134d5e4704a40 Mon Sep 17 00:00:00 2001 From: akmaily Date: Fri, 24 May 2024 12:00:42 +0200 Subject: [PATCH 31/47] trying to fix the Linux build --- src/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 200e5380..c84809e2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,8 +1,9 @@ -#include "imagesHeaderToolbar.hpp" + #include "popups.hpp" #include "settingspopup.hpp" #include "style.hpp" #include +#include "imagesHeaderToolbar.hpp" int main() { const std::string configpath = "config/config.json"; From 5b81d83d3c1f11ebe534bb2cc77365078b07f37c Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Mon, 27 May 2024 11:17:17 +0330 Subject: [PATCH 32/47] loading and displaying old data plus menus --- src/generateTrainingData.cpp | 9 ++-- src/imagesHeader.hpp | 16 +++---- src/languages.hpp | 1 + src/look_up_saves.hpp | 1 - src/main.cpp | 83 ++++++++---------------------------- src/popups.hpp | 12 ++---- src/saves_popup.cpp | 4 +- src/style.cpp | 68 ++++++++++++++++++++++++----- src/style.hpp | 3 +- 9 files changed, 95 insertions(+), 102 deletions(-) diff --git a/src/generateTrainingData.cpp b/src/generateTrainingData.cpp index 25323d65..79801fb0 100644 --- a/src/generateTrainingData.cpp +++ b/src/generateTrainingData.cpp @@ -19,7 +19,6 @@ void generateTrainingData( &captureData, std::set &savedFileNames) { - namespace fs = std::filesystem; ImGui::OpenPopup(appLanguage[Key::Gn_trng_data_pop]); if (ImGui::BeginPopupModal(appLanguage[Key::Gn_trng_data_pop], nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { @@ -93,11 +92,6 @@ void generateTrainingData( } // End of the algorithm ImGui::EndCombo(); } - - // set browser properties - fileBrowser.SetTitle("Searching for .csv files"); - // fileBrowser.SetTypeFilters({".csv"}); - static std::string Measurement; // one extra space for '\0' character static char VIN[19]; @@ -186,6 +180,9 @@ void generateTrainingData( callSetInptFields = false; } + static ImGui::FileBrowser fileBrowser; + fileBrowser.SetTitle("Searching for .csv files"); // properties + // fileBrowser.SetTypeFilters({".csv"}); fileBrowser.Display(); if (fileBrowser.HasSelected()) { if (isWrongFile(fileBrowser.GetSelected().string())) { diff --git a/src/imagesHeader.hpp b/src/imagesHeader.hpp index 6722d2c5..ccbce03a 100644 --- a/src/imagesHeader.hpp +++ b/src/imagesHeader.hpp @@ -10211,10 +10211,6 @@ unsigned char DiagnosticIcon_png[] = { 0xe6, 0xd4, 0x13, 0x81, 0x7c, 0xe6, 0x58, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; - - - - inline constexpr size_t AutoInternLogo_png_len = sizeof(AutoInternLogo_png) / sizeof(AutoInternLogo_png[0]); inline constexpr size_t SearchDevices_png_len = @@ -10224,8 +10220,12 @@ inline constexpr size_t Diagnostics_png_len = inline constexpr size_t Settings_png_len = sizeof(Settings_png) / sizeof(Settings_png[0]); inline constexpr size_t Help_png_len = sizeof(Help_png) / sizeof(Help_png[0]); -inline constexpr size_t RefreshIcon_png_len = sizeof(RefreshIcon_png) /sizeof(RefreshIcon_png[0]); -inline constexpr size_t SettingIcon_png_len = sizeof(SettingIcon_png) /sizeof(SettingIcon_png[0]); -inline constexpr size_t HelpIcon_png_len = sizeof(HelpIcon_png) /sizeof(HelpIcon_png[0]); -inline constexpr size_t DiagnosticIcon_png_len = sizeof(DiagnosticIcon_png) /sizeof(DiagnosticIcon_png[0]); +inline constexpr size_t RefreshIcon_png_len = + sizeof(RefreshIcon_png) / sizeof(RefreshIcon_png[0]); +inline constexpr size_t SettingIcon_png_len = + sizeof(SettingIcon_png) / sizeof(SettingIcon_png[0]); +inline constexpr size_t HelpIcon_png_len = + sizeof(HelpIcon_png) / sizeof(HelpIcon_png[0]); +inline constexpr size_t DiagnosticIcon_png_len = + sizeof(DiagnosticIcon_png) / sizeof(DiagnosticIcon_png[0]); #endif \ No newline at end of file diff --git a/src/languages.hpp b/src/languages.hpp index 5f427759..72d53d53 100644 --- a/src/languages.hpp +++ b/src/languages.hpp @@ -239,4 +239,5 @@ inline const std::map germanLan{ {Key::Saving, "speichern ..."}}; inline auto appLanguage = englishLan; +namespace fs = std::filesystem; #endif \ No newline at end of file diff --git a/src/look_up_saves.hpp b/src/look_up_saves.hpp index ea680a46..3d01b85c 100644 --- a/src/look_up_saves.hpp +++ b/src/look_up_saves.hpp @@ -7,7 +7,6 @@ #include "languages.hpp" #include -namespace fs = std::filesystem; inline std::string getSubdirectoriesInFolder(nlohmann::json language, fs::path const &saves_folder_path, char scantype[255] = 0, diff --git a/src/main.cpp b/src/main.cpp index 3a3e745b..b190a1f3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,14 +15,9 @@ int main() { auto now = std::chrono::system_clock::now(); std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); std::tm now_tm = *std::gmtime(&now_time_t); - bool open_settings = false; - bool open_generate_training_data = false; - static bool flagPaused = true; - bool flagDataNotSaved = true; - bool Development = false; - bool flagInitState = true; - bool load_old_data = false; - bool load_old_data_visible = true; + static bool flagPaused{true}; + bool flagDataNotSaved{true}, Development{false}, flagInitState{true}, + b{false}, open_generate_training_data{false}, open_settings{false}; // main loop auto render = [&]() { @@ -50,63 +45,11 @@ int main() { } ImGui::BeginChild("Left Side", {windowSize.x * .18f, 0.f}); + static fs::path loadedFileName; set_side_menu(config, open_settings, open_generate_training_data, - load_old_data_visible); + loadedFileName); // there're four "BeginChild"s, one as the left side // and three on the right side - static std::filesystem::path fileName; - // a function may do this section's job - if (!sampler.has_value() && load_old_data_visible) { - if (ImGui::Button("Display file data")) - fileBrowser.Open(); - ImGui::SameLine(); - if (ImGui::Button("Exit")) { - captureData.clear(); - load_old_data = false; - } - fileBrowser.Display(); - if (fileBrowser.HasSelected()) { - fileName = fileBrowser.GetSelected(); - fileBrowser.ClearSelected(); - captureData.clear(); // clear if it's alreay filled - Omniscope::Id id; - std::ifstream readfile(fileName, std::ios::binary); - if (!readfile.is_open()) - fmt::println("Failed to open file {}", fileName); - else { - size_t indx{2}; - std::string first_line; - std::getline(readfile, first_line); - std::istringstream ss{first_line}; - constexpr size_t fieldsSz{6}; - // extract input fields data from the first line - for (size_t i = 0; i < fieldsSz; i++) { - std::string substr; - std::getline(ss, substr, ','); - if (i == 3) // third element (Type of scope) - id.type = substr; - if (i == 4) // fourth element (serial of scope) - id.serial = substr; - } - while (!readfile.eof()) { - double value{}; - readfile >> value; - captureData[id].emplace_back(indx++, value); - static constexpr size_t bigNumber{10'000'000}; - readfile.ignore(bigNumber, - '\n'); // new line separator between elements - } - load_old_data = true; - readfile.close(); - // pop the extra last element - captureData[id].pop_back(); - } - } - } - ImGui::SetCursorPosY(windowSize.y * 0.9f); - ImGui::Text(fmt::format("{}: {}", appLanguage[Key::Version], - CMakeGitVersion::VersionWithGit) - .c_str()); ImGui::EndChild(); // end child "Left Side" ImGui::SameLine(); ImGui::BeginChild("Right Side", {0.f, 0.f}); @@ -129,6 +72,8 @@ int main() { ImGui::Text(appLanguage[Key::Measure_not_saved]); if (ImGui::Button(appLanguage[Key::Continue_del])) { rstSettings(); + loadedFileName.clear(); + b = false; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); @@ -176,9 +121,10 @@ int main() { ImGui::OpenPopup(appLanguage[Key::Reset_q]); else { rstSettings(); + loadedFileName.clear(); + b = false; flagPaused = true; } - load_old_data_visible = true; } ImGui::PopStyleColor(3); } @@ -267,8 +213,15 @@ int main() { ImGui::SameLine(); ImGui::Text(appLanguage[Key::Devices_found]); devicesList(); - if (load_old_data) - ImGui::TextUnformatted(fileName.filename().string().c_str()); + static std::optional id; + if (!loadedFileName.empty()) + if (ImGui::Checkbox("##", &b)) + if (b) + id = load_file(loadedFileName); + else if (id.has_value()) + fmt::println("{} device erased.", captureData.erase(id.value())); + ImGui::SameLine(); + ImGui::TextUnformatted(loadedFileName.filename().string().c_str()); ImGui::EndChild(); // end child "Devicelist" ImGui::EndChild(); // end child "Right Side" ImGui::End(); diff --git a/src/popups.hpp b/src/popups.hpp index 85f02a21..77927802 100644 --- a/src/popups.hpp +++ b/src/popups.hpp @@ -16,18 +16,12 @@ struct BoolWrapper { BoolWrapper(bool _b) : b(_b) {} bool b; }; - -inline ImGui::FileBrowser fileBrowser; -inline ImGui::FileBrowser - directoryBrowser(ImGuiFileBrowserFlags_SelectDirectory); void generateTrainingData( bool &, const std::map>> &, std::set &); void info_popup(std::string_view, std::string_view); -void saves_popup( - nlohmann::json const &, nlohmann::json const &, - std::chrono::system_clock::time_point &, std::time_t &now_time_t, - std::tm &now_tm, bool &); - +void saves_popup(nlohmann::json const &, nlohmann::json const &, + std::chrono::system_clock::time_point &, + std::time_t &now_time_t, std::tm &now_tm, bool &); #endif \ No newline at end of file diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index 4c51e9ca..e4135ad4 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -8,8 +8,6 @@ #include "languages.hpp" #include "style.hpp" -namespace fs = std::filesystem; - static void save(const Omniscope::Id &device, const std::vector> &values, const fs::path &outFile, std::string allData, size_t &y_indx) { @@ -65,6 +63,8 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, ImGui::InputTextWithHint("##Lable1", "\".../OmniView/saves/\"", &inptTxtFields[0]); ImGui::SameLine(); + static ImGui::FileBrowser directoryBrowser( + ImGuiFileBrowserFlags_SelectDirectory); if (ImGui::Button(appLanguage[Key::Browse])) directoryBrowser.Open(); diff --git a/src/style.cpp b/src/style.cpp index a3605a1e..bfb9c66b 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -1,3 +1,7 @@ +#include +#include +#include +#include #define IMGUI_DEFINE_MATH_OPERATORS #define STB_IMAGE_IMPLEMENTATION #include "style.hpp" @@ -6,10 +10,7 @@ #include "imgui_internal.h" #include "jasonhandler.hpp" #include "languages.hpp" -#include -#include -#include -#include +#include "../imgui-filebrowser/imfilebrowser.h" void SetupImGuiStyle(bool bStyleDark_, float alpha_) { @@ -239,9 +240,9 @@ bool LoadTextureFromHeader(unsigned char const *png_data, int png_data_len, return true; } -void set_side_menu(const nlohmann::json &config, - bool &open_settings, bool &open_generate_training_data, - bool &load_old_data_visible) { +void set_side_menu(const nlohmann::json &config, bool &open_settings, + bool &open_generate_training_data, + fs::path &loadedFileName) { auto windowSize{ImGui::GetIO().DisplaySize}; // Initializing all variables for images @@ -288,7 +289,15 @@ void set_side_menu(const nlohmann::json &config, devices.clear(); deviceManager.clearDevices(); initDevices(); - load_old_data_visible = false; + } + + static ImGui::FileBrowser fileBrowser; + if (ImGui::Button("Display file data")) + fileBrowser.Open(); + fileBrowser.Display(); + if (fileBrowser.HasSelected()) { + loadedFileName = fileBrowser.GetSelected(); + fileBrowser.ClearSelected(); } static bool showDiag = false; @@ -329,10 +338,49 @@ void set_side_menu(const nlohmann::json &config, system(("start " + load_json(config, "helplink")).c_str()); showSettings = false; } + ImGui::SetCursorPosY(ImGui::GetIO().DisplaySize.y * 0.9f); + ImGui::Text(fmt::format("{}: {}", appLanguage[Key::Version], + CMakeGitVersion::VersionWithGit) + .c_str()); +} + +std::optional +load_file(fs::path &loadedFileName) { // load and display data from file + std::ifstream readfile(loadedFileName, std::ios::binary); + if (!readfile.is_open()) + fmt::println("Failed to open file {}", loadedFileName); + else { + size_t indx{2}; + std::string first_line; + std::getline(readfile, first_line); + std::istringstream ss{first_line}; + constexpr size_t fieldsSz{6}; + Omniscope::Id id; + // extract input fields data from the first line + for (size_t i = 0; i < fieldsSz; i++) { + std::string substr; + std::getline(ss, substr, ','); + if (i == 3) // fourth element (Type of scope) + id.type = substr; + if (i == 4) // fifth element (serial of scope) + id.serial = substr; + } + while (!readfile.eof()) { + double value{}; + readfile >> value; + captureData[id].emplace_back(indx++, value); + static constexpr size_t bigNumber{10'000'000}; + readfile.ignore(bigNumber, + '\n'); // new line separator between elements + } + readfile.close(); + // pop the extra last element + captureData[id].pop_back(); + return id; + } } -// For Development -void PopupStyleEditor() { +void PopupStyleEditor() { // For Development ImGuiStyle &style = ImGui::GetStyle(); ImPlotStyle &styleImPlot = ImPlot::GetStyle(); static std::vector colorVec; diff --git a/src/style.hpp b/src/style.hpp index 6704cec5..e105e677 100644 --- a/src/style.hpp +++ b/src/style.hpp @@ -16,7 +16,8 @@ inline constexpr ImVec4 normColStyle{0.1f, 0.1f, 0.1f, 1.f}; void SetupImGuiStyle(bool, float); void set_button_style_to(const nlohmann::json &, const std::string &); bool LoadTextureFromHeader(unsigned char const *, int, GLuint *, int *, int *); -void set_side_menu(const nlohmann::json &, bool &, bool &, bool &); +void set_side_menu(const nlohmann::json &, bool &, bool &, fs::path &); +std::optional load_file(fs::path &loadedFileName); void PopupStyleEditor(); From 1ce877e0ef8698ee034ac7b59c39d1b834d26c15 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Mon, 27 May 2024 14:33:13 +0330 Subject: [PATCH 33/47] language and a few other changes --- src/generateTrainingData.cpp | 4 ++-- src/languages.hpp | 9 ++++++--- src/main.cpp | 20 ++++++++++---------- src/style.cpp | 8 +++++--- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/generateTrainingData.cpp b/src/generateTrainingData.cpp index 79801fb0..14398a46 100644 --- a/src/generateTrainingData.cpp +++ b/src/generateTrainingData.cpp @@ -401,8 +401,8 @@ void generateTrainingData( // upload data asynchronously using a separate thread future = std::async(std::launch::async, [&] { - // take temp object returned from dump() and send it to sendData - std::string result = sendData(myJson.dump()); + // take temp object returned from dump() and send it to sendData + std::string result = sendData(myJson.dump()); return result; }); diff --git a/src/languages.hpp b/src/languages.hpp index 72d53d53..da56b272 100644 --- a/src/languages.hpp +++ b/src/languages.hpp @@ -79,7 +79,8 @@ enum class Key { Ready, FontSize, SettingsText, - Saving + Saving, + Load_file_Data }; inline const std::map englishLan{ @@ -157,7 +158,8 @@ inline const std::map englishLan{ {Key::Ready, "Ready"}, {Key::FontSize, "Fontsize"}, {Key::SettingsText, "Set your personal settings for the software"}, - {Key::Saving, "saving ..."}}; + {Key::Saving, "saving ..."}, + {Key::Load_file_Data, "Load file data"}}; inline const std::map germanLan{ @@ -236,7 +238,8 @@ inline const std::map germanLan{ {Key::Ready, "Bereit"}, {Key::FontSize, "Schriftgröße"}, {Key::SettingsText, "Legen sie hier ihre persönlichen Einstellungen fest"}, - {Key::Saving, "speichern ..."}}; + {Key::Saving, "speichern ..."}, + {Key::Load_file_Data, "Dateidaten laden"}}; inline auto appLanguage = englishLan; namespace fs = std::filesystem; diff --git a/src/main.cpp b/src/main.cpp index b190a1f3..cfe74d2c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,7 +17,8 @@ int main() { std::tm now_tm = *std::gmtime(&now_time_t); static bool flagPaused{true}; bool flagDataNotSaved{true}, Development{false}, flagInitState{true}, - b{false}, open_generate_training_data{false}, open_settings{false}; + loadedFileChkBx{false}, open_generate_training_data{false}, + open_settings{false}; // main loop auto render = [&]() { @@ -61,8 +62,7 @@ int main() { if (ImGui::BeginPopupModal(appLanguage[Key::Save_Recorded_Data], nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::SetItemDefaultFocus(); - saves_popup(config, language, now, now_time_t, now_tm, - flagDataNotSaved); + saves_popup(config, language, now, now_time_t, now_tm, flagDataNotSaved); ImGui::EndPopup(); } // ############################ Popup Reset @@ -73,7 +73,7 @@ int main() { if (ImGui::Button(appLanguage[Key::Continue_del])) { rstSettings(); loadedFileName.clear(); - b = false; + loadedFileChkBx = false; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); @@ -122,7 +122,7 @@ int main() { else { rstSettings(); loadedFileName.clear(); - b = false; + loadedFileChkBx = false; flagPaused = true; } } @@ -161,7 +161,7 @@ int main() { if (open_settings) { const auto EngItr = englishLan.find(Key::Settings); const auto GrmItr = germanLan.find(Key::Settings); - // check returned value from find() and set titles + // check returned value from find() and set titles if (EngItr != englishLan.end() && GrmItr != germanLan.end()) { titles[0] = (std::string)EngItr->second + "###ID"; titles[1] = (std::string)GrmItr->second + "###ID"; @@ -215,18 +215,18 @@ int main() { devicesList(); static std::optional id; if (!loadedFileName.empty()) - if (ImGui::Checkbox("##", &b)) - if (b) + if (ImGui::Checkbox("##", &loadedFileChkBx)) + if (loadedFileChkBx) id = load_file(loadedFileName); else if (id.has_value()) - fmt::println("{} device erased.", captureData.erase(id.value())); + fmt::println("{} device erased from list.", + captureData.erase(id.value())); ImGui::SameLine(); ImGui::TextUnformatted(loadedFileName.filename().string().c_str()); ImGui::EndChild(); // end child "Devicelist" ImGui::EndChild(); // end child "Right Side" ImGui::End(); }; - ImGuiInstance window{1500, 800, fmt::format("{} {}", CMakeGitVersion::Target::Name, CMakeGitVersion::Project::Version)}; diff --git a/src/style.cpp b/src/style.cpp index bfb9c66b..643ddda1 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -120,7 +120,9 @@ void PushPlotRegionColors() { ImPlot::PushStyleColor(ImPlotCol_TitleText, {0.f, 0.f, 0.f, 1.f}); ImPlot::PushStyleColor(ImPlotCol_AxisGrid, {0.f, 0.f, 0.f, 1.f}); ImPlot::PushStyleColor(ImPlotCol_LegendBg, {1.0f, 1.0f, 1.0f, 1.0f}); - ImPlot::PushStyleColor(ImPlotCol_LegendBorder, {37/255.0f, 40/255.0f, 43/255.0f, 1.0f}); // Schwarz + ImPlot::PushStyleColor( + ImPlotCol_LegendBorder, + {37 / 255.0f, 40 / 255.0f, 43 / 255.0f, 1.0f}); // Schwarz } void PopPlotRegionColors() { ImGui::PopStyleColor(5); @@ -292,7 +294,7 @@ void set_side_menu(const nlohmann::json &config, bool &open_settings, } static ImGui::FileBrowser fileBrowser; - if (ImGui::Button("Display file data")) + if (ImGui::Button(appLanguage[Key::Load_file_Data])) fileBrowser.Open(); fileBrowser.Display(); if (fileBrowser.HasSelected()) { @@ -380,7 +382,7 @@ load_file(fs::path &loadedFileName) { // load and display data from file } } -void PopupStyleEditor() { // For Development +void PopupStyleEditor() { // For Development ImGuiStyle &style = ImGui::GetStyle(); ImPlotStyle &styleImPlot = ImPlot::GetStyle(); static std::vector colorVec; From bccd14d837870b98b9f4cd00e9b50f570ca40a4b Mon Sep 17 00:00:00 2001 From: akmaily Date: Tue, 28 May 2024 12:30:13 +0200 Subject: [PATCH 34/47] Put the toolbar into a seperate function in the style.cpp --- src/imagesHeader.hpp | 423 +++++++++++++++++++++++++++++++++++ src/imagesHeaderToolbar.hpp | 432 ------------------------------------ src/main.cpp | 175 +-------------- src/style.cpp | 179 +++++++++++++++ src/style.hpp | 1 + 5 files changed, 608 insertions(+), 602 deletions(-) delete mode 100644 src/imagesHeaderToolbar.hpp diff --git a/src/imagesHeader.hpp b/src/imagesHeader.hpp index 6722d2c5..f3686e81 100644 --- a/src/imagesHeader.hpp +++ b/src/imagesHeader.hpp @@ -10212,9 +10212,432 @@ unsigned char DiagnosticIcon_png[] = { 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; +unsigned char PauseButton_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, + 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x02, 0xaf, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9b, 0xdb, + 0x6d, 0x1a, 0x41, 0x14, 0x86, 0xff, 0x33, 0xcb, 0xc5, 0xc8, 0x7e, 0xa0, + 0x04, 0xd2, 0x81, 0x5d, 0x41, 0x70, 0x05, 0x90, 0x0a, 0xec, 0x54, 0x10, + 0x77, 0x90, 0x12, 0x92, 0x54, 0x60, 0x52, 0x81, 0xa1, 0x02, 0x70, 0x05, + 0xa1, 0x83, 0x6c, 0x07, 0xe1, 0x01, 0x09, 0x76, 0x66, 0x77, 0x4e, 0x66, + 0x20, 0x31, 0xcc, 0x5a, 0x8a, 0xc2, 0xee, 0x22, 0x59, 0x3a, 0xf3, 0x49, + 0x88, 0x65, 0x58, 0x66, 0xff, 0xf9, 0xe6, 0xc2, 0xd3, 0x21, 0x94, 0xd8, + 0x6c, 0xcc, 0x30, 0x49, 0x30, 0xb2, 0x8c, 0x01, 0x08, 0x7d, 0x9c, 0x80, + 0x02, 0x96, 0xcc, 0xf6, 0xb9, 0xdb, 0xed, 0x4e, 0x71, 0x06, 0x7c, 0x36, + 0xa5, 0xf8, 0x8e, 0x41, 0xfd, 0x2a, 0xd9, 0x8a, 0x02, 0xb3, 0x5e, 0xaf, + 0xbd, 0x38, 0x6e, 0xa7, 0x43, 0xe7, 0x9b, 0x01, 0x25, 0xad, 0x47, 0x30, + 0x0f, 0x51, 0x1b, 0x4e, 0xd9, 0xda, 0xdb, 0x5e, 0xaf, 0x97, 0xa2, 0x01, + 0xd6, 0xeb, 0xf5, 0x75, 0xab, 0xdd, 0x79, 0x72, 0x97, 0x03, 0xd4, 0x26, + 0xcc, 0xb6, 0x13, 0xb0, 0x1b, 0xbc, 0x4a, 0xe6, 0xcd, 0x3c, 0xe0, 0x85, + 0x55, 0x6e, 0xf4, 0xed, 0xd5, 0xd5, 0xd5, 0x12, 0x35, 0xf8, 0x33, 0x78, + 0x9f, 0xed, 0xa4, 0x19, 0xff, 0x37, 0x07, 0x09, 0x3b, 0x01, 0xdb, 0x4c, + 0xff, 0x44, 0xb3, 0x83, 0x7f, 0x79, 0x50, 0xb7, 0xd3, 0xb9, 0x21, 0xa2, + 0x15, 0x2a, 0x72, 0xb6, 0x6c, 0x84, 0xc5, 0x45, 0xa7, 0x73, 0xdb, 0xf2, + 0xfb, 0xca, 0x05, 0x1d, 0x04, 0x5f, 0x32, 0x16, 0xad, 0x96, 0xfa, 0xca, + 0xcc, 0x27, 0x05, 0xb7, 0xcc, 0xf7, 0xcc, 0xb8, 0x3f, 0x7a, 0xca, 0x20, + 0xcb, 0xcc, 0x9d, 0xbb, 0xf8, 0x86, 0x0a, 0x6c, 0x36, 0xfa, 0x1e, 0xa5, + 0xc1, 0xbb, 0x19, 0x9b, 0x24, 0x89, 0x9a, 0x9e, 0x92, 0xcd, 0x4d, 0x40, + 0xbf, 0xb0, 0x76, 0x1c, 0x64, 0x63, 0x0c, 0xdd, 0xca, 0x1f, 0x42, 0x6b, + 0xf3, 0xc5, 0x59, 0xe6, 0xbf, 0xaf, 0x2c, 0xd3, 0x8f, 0xa8, 0x41, 0xb9, + 0xbf, 0xed, 0x36, 0x7b, 0x42, 0x45, 0xb6, 0xda, 0xcc, 0xc3, 0x6c, 0xd9, + 0x67, 0xd4, 0x60, 0xab, 0x75, 0xd0, 0x9f, 0xcf, 0xaa, 0x2c, 0x70, 0x1d, + 0xde, 0xa6, 0x6a, 0x9d, 0xe0, 0x45, 0x91, 0x87, 0xb3, 0x4d, 0x74, 0x8d, + 0x8a, 0x50, 0x69, 0xdf, 0x1b, 0x63, 0x66, 0xa8, 0x01, 0xb1, 0x0a, 0xb2, + 0x59, 0x6b, 0x07, 0xaa, 0x7c, 0x93, 0xfb, 0x9b, 0xa9, 0xbc, 0x5f, 0x9b, + 0xc6, 0x2d, 0xf3, 0x40, 0xc0, 0xe5, 0xe5, 0xe5, 0x2f, 0xd4, 0xc0, 0xda, + 0xf2, 0xd8, 0xa8, 0xaf, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, + 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, + 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, + 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, + 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, + 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, + 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, + 0x00, 0xc2, 0x89, 0x02, 0x20, 0x1c, 0x45, 0x8c, 0xa0, 0x8a, 0xc2, 0x5a, + 0xaa, 0x55, 0x9e, 0x96, 0x24, 0x49, 0xf9, 0xf7, 0x6f, 0xa6, 0x02, 0x45, + 0xa9, 0xd7, 0x63, 0x53, 0x44, 0x48, 0x8f, 0x1b, 0x98, 0xec, 0x03, 0x6a, + 0x50, 0x30, 0x8f, 0x83, 0x06, 0xae, 0x2e, 0x80, 0x40, 0x41, 0xcd, 0x61, + 0x66, 0x4c, 0xad, 0x6c, 0x20, 0x3b, 0x3a, 0xfe, 0xe8, 0x84, 0x2c, 0x5b, + 0x45, 0x91, 0xcf, 0x48, 0x25, 0x87, 0x8e, 0x19, 0xc3, 0x7d, 0xe5, 0x18, + 0xcf, 0xac, 0x55, 0xff, 0x1d, 0x5e, 0x29, 0xdb, 0x07, 0xd1, 0x28, 0x2c, + 0x9b, 0xf3, 0xed, 0x98, 0xa0, 0x22, 0xcc, 0xbc, 0x70, 0x16, 0xc6, 0x47, + 0xd9, 0x1e, 0x5c, 0xb6, 0xbe, 0x5b, 0xa5, 0xdf, 0x4f, 0xe8, 0x66, 0x97, + 0x8d, 0x49, 0x7d, 0xe2, 0x52, 0x55, 0xac, 0x9b, 0xfc, 0xe9, 0xbe, 0x70, + 0x52, 0xeb, 0xb9, 0x1f, 0x38, 0x1a, 0x87, 0xd3, 0x8b, 0x6e, 0xf7, 0x1d, + 0x2a, 0xe2, 0x8b, 0xa6, 0x32, 0x6d, 0x7e, 0xe0, 0x4c, 0x45, 0x9d, 0x3e, + 0xdb, 0xee, 0x10, 0xe4, 0xa2, 0xf8, 0xe8, 0xde, 0x52, 0x34, 0xcb, 0x2a, + 0x37, 0xe6, 0x03, 0x6a, 0xe0, 0x2b, 0x4e, 0x73, 0xa3, 0x7d, 0x1f, 0x0d, + 0x9f, 0x23, 0xfb, 0xd2, 0x59, 0x7f, 0xb5, 0x13, 0xe0, 0x6b, 0x68, 0xd9, + 0x16, 0xbe, 0x21, 0x45, 0x23, 0x70, 0xda, 0x44, 0xdd, 0xb0, 0xc7, 0xf7, + 0xe1, 0xb2, 0xdd, 0xa0, 0xa9, 0x6c, 0x8c, 0xc5, 0xab, 0xe2, 0xe9, 0x63, + 0x8c, 0x31, 0xef, 0xdd, 0x3e, 0x1e, 0x5b, 0xcb, 0xa7, 0x15, 0x3c, 0x12, + 0xaf, 0xdc, 0xa1, 0xb5, 0x72, 0x07, 0xcb, 0xa4, 0xdd, 0x6e, 0x3f, 0xe3, + 0x0c, 0xe4, 0x79, 0x3e, 0x72, 0xb9, 0x86, 0x55, 0xb2, 0x29, 0x52, 0xa9, + 0xdf, 0xf3, 0xe5, 0x6c, 0xbf, 0x01, 0xcd, 0x4e, 0x60, 0x22, 0xc6, 0x05, + 0x25, 0x40, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82 +}; +unsigned char PlayButton_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x40, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x4f, 0xf7, 0xb4, 0xb2, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x04, 0xa3, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xdd, 0x5b, 0xd1, + 0x55, 0xdb, 0x30, 0x14, 0x7d, 0x92, 0x13, 0xdb, 0xf9, 0x63, 0x84, 0x74, + 0x82, 0xc2, 0x04, 0x85, 0x09, 0x0a, 0x13, 0x34, 0x4c, 0x40, 0x98, 0x80, + 0x30, 0x01, 0xe9, 0x04, 0xa1, 0x13, 0x90, 0x0d, 0x92, 0x4e, 0x00, 0x9d, + 0x80, 0x6c, 0x50, 0x7a, 0x0e, 0x87, 0x58, 0x0a, 0x58, 0x7d, 0xcf, 0x58, + 0x24, 0xb1, 0x95, 0xd8, 0x18, 0xdb, 0x91, 0xb9, 0xe7, 0x10, 0x1c, 0x4b, + 0xfe, 0xb8, 0x79, 0x4f, 0xf7, 0xca, 0x7a, 0x12, 0x03, 0x03, 0xe6, 0xf3, + 0xc5, 0x21, 0x63, 0xea, 0x2b, 0x63, 0xb0, 0x4f, 0xdf, 0x19, 0x63, 0x0f, + 0x4a, 0x85, 0xbf, 0x3d, 0xcf, 0x1b, 0x43, 0x93, 0x31, 0x9f, 0xcf, 0xbb, + 0x81, 0x5c, 0x4c, 0x02, 0x21, 0x95, 0xf9, 0x4f, 0xdc, 0x4b, 0x29, 0x7f, + 0x40, 0x83, 0xc0, 0xf4, 0xc5, 0xe3, 0xe3, 0xe3, 0x7e, 0xab, 0xed, 0x4e, + 0xf0, 0x72, 0x2f, 0xc7, 0x73, 0x77, 0x2a, 0x7c, 0x39, 0xe9, 0x74, 0x3a, + 0x33, 0xb0, 0x1c, 0x9c, 0x3e, 0x28, 0x72, 0x48, 0xee, 0x06, 0xf2, 0x91, + 0x23, 0xec, 0x33, 0xee, 0xdc, 0xcf, 0x85, 0x18, 0x28, 0xa5, 0xf2, 0x3e, + 0xb3, 0x13, 0x44, 0x11, 0x14, 0x52, 0x8e, 0x94, 0x82, 0xde, 0x5a, 0x8b, + 0x82, 0x29, 0x7e, 0x8e, 0x39, 0xe7, 0x0f, 0x0a, 0xc2, 0xc3, 0x54, 0xfb, + 0xb2, 0xe3, 0x8c, 0x33, 0x36, 0x70, 0x5d, 0xf7, 0x17, 0xd8, 0x88, 0x68, + 0xdc, 0x25, 0xc6, 0x9a, 0x10, 0xe2, 0xc2, 0xd4, 0x8f, 0x7e, 0x88, 0x4d, + 0xe3, 0x53, 0x08, 0x39, 0xa2, 0x3e, 0x60, 0x1b, 0x84, 0x78, 0x3e, 0x4e, + 0x0a, 0xc9, 0xb6, 0xfe, 0xf3, 0xb9, 0xec, 0x61, 0xbf, 0xfb, 0x0d, 0x44, + 0xff, 0x52, 0xda, 0x82, 0x45, 0xe0, 0x61, 0x18, 0xae, 0x8d, 0x21, 0x06, + 0x6c, 0xba, 0xed, 0x81, 0x4e, 0xc7, 0xbd, 0xf6, 0xdc, 0xf6, 0x01, 0x03, + 0x35, 0x30, 0x34, 0xef, 0xe1, 0xf3, 0x17, 0xf4, 0x23, 0x91, 0x68, 0x81, + 0x05, 0xe0, 0x50, 0x00, 0xe4, 0x8b, 0xe8, 0x89, 0x97, 0xa8, 0xa4, 0x5f, + 0xd0, 0x2b, 0xef, 0x0c, 0x3d, 0x48, 0xb4, 0x6e, 0x6d, 0x48, 0xdb, 0x42, + 0x04, 0x35, 0xc8, 0x26, 0x3c, 0xd7, 0x3d, 0x50, 0x21, 0x9c, 0xe2, 0xd7, + 0x59, 0xb2, 0x5d, 0x01, 0xf4, 0x18, 0xe7, 0x93, 0x5d, 0x7a, 0xe7, 0x87, + 0x08, 0x6a, 0x50, 0xda, 0x62, 0x34, 0x8f, 0x30, 0x9a, 0xd7, 0xe9, 0x56, + 0xd6, 0x0d, 0x15, 0x5c, 0x53, 0xda, 0xee, 0x22, 0x9a, 0xa5, 0x10, 0x24, + 0xc4, 0xd1, 0x3c, 0xe5, 0x0c, 0x0e, 0xc0, 0x10, 0x4d, 0x22, 0x4a, 0xde, + 0x19, 0x48, 0x79, 0x55, 0xa7, 0x77, 0x96, 0x46, 0x50, 0x03, 0xfd, 0xf0, + 0xce, 0xf7, 0xdc, 0x2f, 0xb1, 0x08, 0x3d, 0xa4, 0x3a, 0x28, 0xe8, 0xa3, + 0xdd, 0xdc, 0xd6, 0x95, 0xb6, 0xa5, 0x13, 0xd4, 0x88, 0x45, 0xe8, 0x60, + 0x5b, 0xda, 0xd6, 0x21, 0x42, 0x95, 0x11, 0x24, 0xe8, 0xb4, 0xdd, 0x2e, + 0x42, 0xaf, 0x53, 0x3e, 0xa8, 0x08, 0x95, 0x12, 0xd4, 0x20, 0x11, 0x5a, + 0x49, 0xdb, 0x14, 0xb4, 0x77, 0xe2, 0xa4, 0xe3, 0x3b, 0x94, 0x8c, 0x5a, + 0x08, 0x6a, 0x68, 0xef, 0x44, 0x46, 0xd3, 0x74, 0x2b, 0xeb, 0xe2, 0x9c, + 0x77, 0x5c, 0x76, 0xda, 0xd6, 0x4a, 0x90, 0x40, 0x69, 0xeb, 0xbb, 0xee, + 0x51, 0x5d, 0xde, 0x59, 0x3b, 0x41, 0x8d, 0xba, 0xbc, 0x73, 0x67, 0x04, + 0x09, 0x4b, 0x11, 0xc2, 0xb4, 0xcd, 0xf0, 0xce, 0xa2, 0x44, 0x77, 0x4a, + 0x50, 0x23, 0x4a, 0x5b, 0x14, 0x21, 0x50, 0xe1, 0x39, 0x98, 0x88, 0xa2, + 0x77, 0x16, 0x4d, 0x5b, 0x2b, 0x08, 0x6a, 0xf8, 0xbe, 0x3f, 0xcc, 0x91, + 0xb6, 0x37, 0xef, 0x89, 0xa6, 0x55, 0x04, 0x09, 0x59, 0xde, 0x89, 0x44, + 0x8f, 0xdf, 0xe3, 0x9d, 0xd6, 0x11, 0xd4, 0xc8, 0xeb, 0x9d, 0x59, 0x69, + 0x6b, 0x2d, 0x41, 0x8d, 0xb7, 0xf7, 0x4e, 0x60, 0x86, 0x35, 0xd9, 0xec, + 0x29, 0x9f, 0xf5, 0x04, 0x09, 0x51, 0xda, 0x7a, 0xed, 0x93, 0x2c, 0xef, + 0x7c, 0x7a, 0x0a, 0xfa, 0xc9, 0xb6, 0x46, 0x10, 0xd4, 0xd0, 0xde, 0x89, + 0xab, 0x78, 0xc3, 0x74, 0x2b, 0xeb, 0x72, 0x87, 0x5f, 0x25, 0xbd, 0xb3, + 0x51, 0x04, 0x09, 0x14, 0x4d, 0xd7, 0x6d, 0x9f, 0x6f, 0xf7, 0x4e, 0x3e, + 0xd1, 0xef, 0x9c, 0x8d, 0x23, 0xa8, 0xa1, 0xbd, 0xd3, 0x9c, 0xb6, 0xac, + 0x2b, 0xe5, 0xf3, 0x19, 0x5d, 0x35, 0x96, 0xa0, 0x86, 0x4e, 0x5b, 0x1c, + 0x89, 0x6b, 0x22, 0xa4, 0x40, 0xf5, 0x29, 0x8a, 0x8d, 0x27, 0x48, 0xd0, + 0xde, 0x09, 0xeb, 0x2b, 0x08, 0x7b, 0x52, 0xbe, 0x7c, 0xfb, 0x14, 0x04, + 0x09, 0xb4, 0x94, 0x89, 0x75, 0x88, 0xf1, 0xfa, 0x3d, 0xf8, 0x1c, 0x11, + 0x5c, 0x82, 0xa5, 0x16, 0xb3, 0x3e, 0x0d, 0x41, 0xb2, 0x06, 0x1c, 0x77, + 0x6b, 0xab, 0xe9, 0x58, 0xc4, 0x9d, 0x7d, 0x0a, 0x82, 0x51, 0x45, 0x9a, + 0x3b, 0x54, 0xdb, 0xec, 0x2e, 0xef, 0xaa, 0x59, 0xbb, 0xdd, 0xfe, 0xdd, + 0x68, 0x82, 0xa4, 0x92, 0xf8, 0xae, 0x38, 0x64, 0x5c, 0x25, 0xc8, 0x45, + 0x75, 0xc1, 0x6b, 0xfa, 0xdf, 0x82, 0x86, 0x82, 0xaa, 0x5c, 0x42, 0x2e, + 0xae, 0xc0, 0x54, 0xb4, 0xc5, 0xda, 0xa6, 0xe7, 0x7b, 0x97, 0x74, 0xd9, + 0xb8, 0x08, 0xea, 0x7d, 0x04, 0x8c, 0xc3, 0x08, 0x0c, 0xe4, 0xe8, 0x5d, + 0x92, 0xe6, 0xad, 0xfa, 0x7b, 0x63, 0x22, 0x18, 0xa7, 0x63, 0x1f, 0xdf, + 0x2a, 0xce, 0xc0, 0xb8, 0xf4, 0xaf, 0x66, 0x0e, 0xe7, 0x3d, 0x1a, 0x77, + 0xab, 0x77, 0x1b, 0x41, 0x90, 0x44, 0x04, 0xd3, 0x71, 0x84, 0xe4, 0xba, + 0x86, 0x66, 0xf4, 0x3f, 0x35, 0xc4, 0x92, 0xc1, 0x4f, 0xf2, 0xc2, 0x64, + 0xa3, 0xd5, 0x04, 0x29, 0x6a, 0x72, 0xb1, 0xa0, 0x62, 0x4d, 0xcf, 0xdc, + 0x01, 0xa6, 0x4a, 0xbd, 0x9c, 0xfa, 0x5b, 0x76, 0x7b, 0x58, 0x4b, 0xf0, + 0x29, 0x08, 0xb0, 0x48, 0xb3, 0xa0, 0xbd, 0x02, 0xa6, 0x4a, 0x14, 0x45, + 0xed, 0x14, 0x85, 0x24, 0x73, 0x63, 0x92, 0x75, 0x04, 0xa3, 0xfd, 0x3a, + 0xae, 0x77, 0x85, 0xe1, 0x3b, 0x34, 0xb5, 0x63, 0x79, 0x6e, 0x88, 0xe3, + 0xec, 0xd2, 0x94, 0x8e, 0x26, 0x58, 0x43, 0x90, 0xd2, 0x51, 0x2c, 0x16, + 0x03, 0x4c, 0x3b, 0x12, 0x11, 0x43, 0x07, 0x98, 0x3a, 0x0e, 0x1b, 0x24, + 0x45, 0x24, 0x0b, 0x56, 0x10, 0xd4, 0x22, 0x02, 0x09, 0xb3, 0x8e, 0xf1, + 0x80, 0xeb, 0xa5, 0x03, 0x5c, 0x52, 0xfc, 0x09, 0x05, 0xb0, 0x53, 0x82, + 0xe4, 0x69, 0xcc, 0x69, 0x8d, 0x36, 0xa5, 0x23, 0xbd, 0xe3, 0xa9, 0x30, + 0x3c, 0xff, 0xc8, 0x96, 0xb1, 0x9d, 0x11, 0xa4, 0x75, 0xcd, 0x6c, 0x4f, + 0x73, 0xdf, 0x95, 0x8e, 0x26, 0xd4, 0x4e, 0x90, 0xd2, 0x91, 0x3b, 0x0a, + 0xa5, 0x1f, 0x8c, 0xfb, 0x68, 0x68, 0x1d, 0x74, 0x93, 0xa7, 0x15, 0x41, + 0x6d, 0x04, 0x97, 0x22, 0xa2, 0xce, 0x4c, 0x1a, 0x92, 0xc7, 0xd3, 0x8a, + 0xa0, 0x96, 0xb9, 0x68, 0xec, 0x69, 0xf7, 0x91, 0x42, 0xa6, 0x41, 0x22, + 0xd2, 0xf7, 0x7d, 0xf7, 0xa8, 0x8a, 0xed, 0x99, 0x95, 0x46, 0x30, 0x4b, + 0x44, 0xde, 0xeb, 0x69, 0x45, 0x50, 0x09, 0xc1, 0x95, 0x89, 0xf1, 0x05, + 0x98, 0xf3, 0xd1, 0x38, 0x31, 0xae, 0x02, 0xa5, 0x13, 0xcc, 0x33, 0x31, + 0xa6, 0x7a, 0x03, 0xd4, 0x84, 0xd2, 0x08, 0x46, 0x22, 0x22, 0x25, 0x9a, + 0xb5, 0x3a, 0x36, 0x77, 0xa8, 0x46, 0x44, 0xb2, 0x50, 0x8a, 0xc8, 0xbc, + 0x89, 0x08, 0xd6, 0xee, 0xd2, 0xad, 0x6a, 0x86, 0x51, 0x3b, 0xa9, 0x4a, + 0x44, 0xb2, 0xf0, 0xa1, 0x08, 0x46, 0x8b, 0x3d, 0x0e, 0x5c, 0x6c, 0x17, + 0x11, 0xb7, 0x52, 0x11, 0xc9, 0x42, 0x21, 0x82, 0xab, 0x9e, 0x06, 0x1b, + 0x3c, 0xad, 0xc8, 0xc4, 0xb8, 0x0a, 0xa4, 0x08, 0x2a, 0x66, 0x9c, 0xf0, + 0xbe, 0x41, 0x08, 0x71, 0x1c, 0x2f, 0xf6, 0x98, 0xfa, 0x7d, 0x68, 0x62, + 0x5c, 0x09, 0x22, 0x49, 0x4f, 0xec, 0xbd, 0x36, 0xd5, 0xbf, 0x73, 0x1c, + 0x1a, 0xb9, 0xa9, 0x7a, 0x63, 0x5d, 0x11, 0x44, 0xc7, 0x0a, 0xd0, 0xb3, + 0x26, 0x98, 0x56, 0x87, 0xeb, 0x2d, 0x6c, 0x0a, 0x21, 0xce, 0xe6, 0x15, + 0xfc, 0xc3, 0x74, 0xfb, 0x1a, 0xbe, 0x2e, 0x1b, 0xe4, 0x5e, 0xec, 0xb1, + 0x05, 0x11, 0xc1, 0x68, 0xc6, 0xc1, 0x9d, 0x5b, 0xc8, 0x7f, 0x30, 0x24, + 0x7e, 0xb8, 0xdc, 0x89, 0x71, 0x15, 0x28, 0x76, 0xb4, 0x27, 0xf6, 0xb4, + 0x26, 0x1c, 0xed, 0x59, 0x43, 0xd6, 0xe1, 0x0f, 0x3a, 0x17, 0x11, 0x04, + 0xc1, 0x19, 0x34, 0x08, 0xcc, 0x74, 0x33, 0x4a, 0x59, 0xe6, 0x7c, 0x5f, + 0x3d, 0x5e, 0x87, 0xd7, 0xe3, 0x56, 0xab, 0xf5, 0xc7, 0xe6, 0x74, 0x34, + 0xe1, 0x3f, 0xe5, 0x21, 0x6e, 0xce, 0x0a, 0x36, 0x99, 0x91, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; +unsigned char ResetButton_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x11, 0xf2, 0xad, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x04, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x8d, + 0x71, 0xdb, 0x36, 0x14, 0x80, 0x1f, 0x48, 0x89, 0x92, 0xcf, 0xbe, 0xab, + 0x3a, 0x41, 0x39, 0x82, 0x37, 0xb0, 0x32, 0x41, 0xb2, 0x41, 0x9d, 0x09, + 0x92, 0x4e, 0xe0, 0x8c, 0x50, 0x4f, 0x60, 0x77, 0x82, 0xb8, 0x13, 0x58, + 0x99, 0x20, 0xee, 0x04, 0x66, 0x27, 0xb0, 0x7a, 0x67, 0x57, 0x24, 0x24, + 0x12, 0x79, 0xa0, 0xa5, 0x84, 0x04, 0x29, 0x9b, 0xf8, 0x21, 0x09, 0x46, + 0xf8, 0xee, 0x74, 0x0e, 0x71, 0x82, 0x4c, 0x7f, 0x7a, 0x20, 0x81, 0xf7, + 0xc0, 0x00, 0x38, 0x1c, 0x07, 0x0f, 0x63, 0x6c, 0x96, 0x50, 0xfa, 0x95, + 0x52, 0xfa, 0x3b, 0x38, 0xe4, 0xd8, 0xc9, 0x8b, 0x13, 0xca, 0xf8, 0xcb, + 0x49, 0x94, 0xa4, 0x28, 0x6f, 0x88, 0x12, 0x3d, 0xe8, 0x99, 0x2c, 0x4d, + 0x2f, 0x2b, 0x6d, 0x0c, 0xae, 0x5d, 0x24, 0x4a, 0xb0, 0x5a, 0xad, 0xce, + 0xc5, 0x28, 0x74, 0xc3, 0x59, 0x12, 0x27, 0xd1, 0x00, 0x4e, 0xa2, 0x01, + 0x9c, 0x44, 0x03, 0x38, 0x89, 0x06, 0x70, 0x12, 0x0d, 0xe0, 0x24, 0x1a, + 0xc0, 0x76, 0x89, 0x04, 0x2c, 0x03, 0x85, 0x85, 0x69, 0xea, 0xcf, 0x7c, + 0x9f, 0xcc, 0x70, 0xa1, 0x17, 0xe6, 0x8d, 0x1e, 0x9b, 0x13, 0x20, 0x15, + 0x61, 0x1e, 0x81, 0xf3, 0x20, 0x08, 0xfe, 0x82, 0x1e, 0xe9, 0x5d, 0xe0, + 0x6a, 0xb5, 0x9e, 0x83, 0x97, 0xcd, 0x09, 0xf1, 0xce, 0x70, 0x61, 0x7c, + 0x8a, 0x4d, 0x33, 0x99, 0xfe, 0x7d, 0x4b, 0xec, 0x45, 0x20, 0x4f, 0x20, + 0xc4, 0x94, 0x7e, 0xdc, 0x46, 0x55, 0x08, 0x9a, 0xb0, 0x2c, 0x7d, 0x73, + 0x74, 0x74, 0xb4, 0x80, 0x1e, 0x18, 0x41, 0x87, 0xec, 0xc4, 0x25, 0x74, + 0xfd, 0x01, 0xe5, 0x49, 0x45, 0xda, 0x3e, 0x08, 0x81, 0xeb, 0x69, 0x4f, + 0xf2, 0xf2, 0xdf, 0x0f, 0x1d, 0xf1, 0x7f, 0x1c, 0x7f, 0xf4, 0x88, 0x77, + 0x01, 0xaf, 0x0f, 0xd1, 0x25, 0x9e, 0x54, 0xc4, 0x18, 0xfe, 0x24, 0x10, + 0xe5, 0x2d, 0x04, 0x4e, 0xf1, 0xf8, 0x54, 0x7c, 0x23, 0x97, 0x37, 0x09, + 0x82, 0xf7, 0xd0, 0x23, 0xad, 0x47, 0x20, 0xbf, 0x29, 0x10, 0x7f, 0x74, + 0x85, 0xe1, 0x37, 0xdf, 0xf3, 0x96, 0x25, 0x30, 0xb8, 0xc3, 0x9f, 0x37, + 0x93, 0xc9, 0xf8, 0x86, 0x10, 0xf2, 0x6f, 0xa5, 0xbf, 0xe7, 0xdf, 0x8a, + 0x9d, 0x6c, 0x90, 0xd7, 0x3a, 0x8f, 0x8f, 0x8f, 0xa7, 0x38, 0xe5, 0x78, + 0xa8, 0x9b, 0x86, 0xc4, 0x49, 0x72, 0x9f, 0x24, 0xc9, 0x05, 0x1f, 0xd6, + 0xfb, 0xfa, 0x73, 0x79, 0xf8, 0xde, 0x7b, 0xb1, 0x2f, 0xe6, 0x10, 0xaf, + 0xe0, 0x67, 0x67, 0xdf, 0xfc, 0x8d, 0x0b, 0xe5, 0xe2, 0x1a, 0xf4, 0x77, + 0xf2, 0x2a, 0xaf, 0x98, 0xde, 0x72, 0x31, 0x0d, 0xfa, 0x1f, 0xae, 0xbc, + 0xed, 0xb0, 0xad, 0xc8, 0x6b, 0x12, 0x75, 0x9c, 0x43, 0x8f, 0xbc, 0xda, + 0x3f, 0xbe, 0xe9, 0xb2, 0xeb, 0xa0, 0xe5, 0x71, 0xea, 0x0a, 0x44, 0x71, + 0x1c, 0x7f, 0x68, 0xd2, 0xf7, 0xe0, 0xe5, 0xf1, 0x79, 0x9e, 0xcd, 0xc3, + 0x96, 0xdf, 0xed, 0x57, 0x49, 0xf2, 0x29, 0x49, 0xe8, 0x55, 0x93, 0xeb, + 0x70, 0xa7, 0xd4, 0x0b, 0x48, 0x3e, 0xab, 0xf7, 0x35, 0x1f, 0x79, 0xfc, + 0xf3, 0x8a, 0x33, 0x81, 0x97, 0xa6, 0x4f, 0x32, 0x18, 0x29, 0x6b, 0x7a, + 0xbe, 0xcf, 0x23, 0x2d, 0xfc, 0xd1, 0xc2, 0x22, 0x96, 0x65, 0x7f, 0x34, + 0xeb, 0x3b, 0xfa, 0x0c, 0xc2, 0x7a, 0xb8, 0x8d, 0x49, 0x32, 0x03, 0x12, + 0x16, 0x0e, 0x67, 0x94, 0x6e, 0x1a, 0x5d, 0x5a, 0x5a, 0x67, 0x1b, 0x41, + 0xca, 0xb9, 0x3a, 0x71, 0xb2, 0xdd, 0xd6, 0x35, 0x2f, 0x49, 0xd6, 0x17, + 0xe2, 0x7c, 0xd4, 0x54, 0x14, 0x6a, 0xb1, 0x5a, 0xd1, 0x73, 0x71, 0x85, + 0x01, 0x92, 0xec, 0x24, 0xb6, 0x7d, 0xc3, 0x88, 0x85, 0x55, 0x11, 0x97, + 0x0a, 0x7d, 0x23, 0x5e, 0xbf, 0x54, 0x33, 0xc5, 0x5d, 0x5c, 0xd8, 0x6b, + 0xa2, 0x50, 0xfa, 0xcb, 0x36, 0x0a, 0xca, 0xaa, 0x4c, 0x9a, 0xad, 0xbb, + 0xc3, 0x15, 0xc8, 0xd3, 0x69, 0x42, 0x14, 0xe2, 0xf9, 0xce, 0x41, 0x03, + 0xad, 0x9b, 0x48, 0x96, 0xc1, 0x59, 0xa9, 0x81, 0xb1, 0x1b, 0x4c, 0x6c, + 0x46, 0x60, 0x29, 0x98, 0xe9, 0x59, 0x62, 0x6a, 0xec, 0xae, 0xd8, 0xe6, + 0x79, 0xa3, 0x33, 0xd0, 0x40, 0xef, 0x2e, 0xec, 0x91, 0x77, 0xa5, 0x43, + 0x8f, 0xdc, 0x80, 0xed, 0x64, 0x50, 0x3a, 0x47, 0x46, 0xf6, 0xa6, 0xd9, + 0x1a, 0xa1, 0x27, 0xf0, 0xb9, 0x86, 0xf1, 0x1d, 0x1c, 0xd2, 0xff, 0x80, + 0xe5, 0x30, 0x96, 0xfe, 0x5d, 0x6e, 0xa8, 0x26, 0x6a, 0x65, 0x50, 0xce, + 0x48, 0x3f, 0x6f, 0x8c, 0x5c, 0x3f, 0x14, 0x9a, 0x96, 0xd3, 0x49, 0xf0, + 0x2b, 0x0c, 0x00, 0x7e, 0x1d, 0x84, 0x42, 0x66, 0x7c, 0x12, 0x8c, 0x43, + 0x31, 0x91, 0xdb, 0x14, 0xe5, 0x08, 0x8c, 0xe3, 0x8d, 0xf8, 0xcd, 0x45, + 0x30, 0x10, 0x50, 0x56, 0x54, 0x3c, 0x7e, 0x7a, 0x7a, 0x52, 0xfe, 0xe2, + 0xcd, 0x6d, 0xb0, 0xc4, 0x1a, 0x06, 0x0c, 0x04, 0x06, 0xe5, 0x73, 0x9d, + 0x4c, 0x26, 0xbf, 0x80, 0x22, 0x1a, 0x02, 0xb7, 0x45, 0xef, 0x1f, 0xc7, + 0x83, 0x11, 0x48, 0x18, 0x8b, 0x8a, 0xc7, 0x8c, 0x91, 0x10, 0x14, 0x31, + 0x16, 0x81, 0xf9, 0x14, 0x61, 0x30, 0x98, 0x29, 0xa9, 0x72, 0x34, 0x04, + 0x96, 0xaf, 0x23, 0x58, 0x76, 0x0c, 0x61, 0x20, 0x30, 0x52, 0x2e, 0xad, + 0x12, 0x52, 0x8e, 0x48, 0x19, 0x94, 0x05, 0xfa, 0xbe, 0x30, 0x64, 0x09, + 0x18, 0xfb, 0x56, 0xdb, 0x86, 0x00, 0xf4, 0x1f, 0x81, 0x69, 0x9a, 0x8a, + 0x43, 0x36, 0x84, 0x81, 0x80, 0x53, 0xb0, 0xb0, 0x78, 0x3c, 0x1a, 0x8d, + 0x94, 0xe7, 0xaf, 0xca, 0x02, 0xb7, 0x4b, 0xb6, 0xa2, 0xc4, 0x19, 0x9e, + 0xd8, 0x6f, 0x60, 0x39, 0x7c, 0xfd, 0x0e, 0xe5, 0x08, 0x5c, 0xea, 0x5c, + 0xbf, 0xf5, 0x6e, 0x22, 0xc2, 0xba, 0x12, 0xb3, 0x1d, 0xef, 0xc0, 0x72, + 0xd2, 0x54, 0x58, 0x79, 0xb0, 0xf2, 0xdf, 0x20, 0x8b, 0x96, 0x40, 0xc2, + 0xc8, 0x42, 0xf8, 0x34, 0xeb, 0x05, 0xe2, 0x7a, 0xfd, 0xad, 0xd0, 0xa4, + 0xb5, 0x7e, 0xd7, 0xcc, 0xc6, 0x6c, 0xbe, 0x94, 0x1a, 0x18, 0xdf, 0x04, + 0x64, 0x41, 0x96, 0x77, 0x0f, 0x3c, 0xd5, 0xc6, 0x80, 0x95, 0xbe, 0xe4, + 0xcd, 0x86, 0x7e, 0x01, 0x0d, 0xb4, 0x04, 0x6e, 0xf7, 0xe4, 0x45, 0x85, + 0xa6, 0x4e, 0x6a, 0x0d, 0xea, 0x39, 0x47, 0x7f, 0x5e, 0x3e, 0x66, 0xd1, + 0xc9, 0xc9, 0x89, 0xd6, 0x10, 0xd6, 0xa6, 0xae, 0xd6, 0x00, 0x2d, 0x82, + 0xa5, 0xc9, 0x6b, 0xfe, 0x3b, 0x78, 0x19, 0x00, 0x24, 0x31, 0x95, 0x3d, + 0x37, 0x4a, 0x5d, 0x96, 0xb7, 0xad, 0x5a, 0xc3, 0x56, 0xde, 0xf7, 0x2f, + 0x4a, 0x46, 0x62, 0xb5, 0x76, 0x63, 0x51, 0xf6, 0xbc, 0x12, 0x85, 0x31, + 0xbd, 0x05, 0xc3, 0x08, 0xf2, 0x76, 0xaf, 0xaf, 0x8d, 0xfa, 0xd6, 0xd4, + 0x9e, 0x79, 0x81, 0x1d, 0x6c, 0x41, 0x8c, 0x42, 0xd3, 0x27, 0x57, 0x2f, + 0x2f, 0xb9, 0x6f, 0x1a, 0x41, 0xbc, 0xc8, 0xaf, 0xda, 0xb7, 0x33, 0xf8, + 0x09, 0x71, 0x71, 0xaf, 0x6d, 0x9a, 0x94, 0xfe, 0x5c, 0x4d, 0x79, 0x7c, + 0x3b, 0x87, 0xea, 0x7e, 0x9d, 0xc1, 0xa3, 0x2b, 0xaf, 0x76, 0xbf, 0x0e, + 0x6d, 0x36, 0xec, 0x07, 0x8f, 0x76, 0xe4, 0xd5, 0x6e, 0xf2, 0xb4, 0x70, + 0xe8, 0xb6, 0x41, 0x2b, 0xc3, 0x16, 0x5f, 0x2a, 0x53, 0x9f, 0xc1, 0xa1, + 0x23, 0x2f, 0xbf, 0xdb, 0xd2, 0xf5, 0x6d, 0x9d, 0xbc, 0x83, 0x78, 0x40, + 0x51, 0x4b, 0xde, 0x73, 0xd4, 0x3d, 0x38, 0x79, 0x12, 0xf2, 0x76, 0x9b, + 0x26, 0xe3, 0xbd, 0x8f, 0x52, 0xa8, 0xad, 0x58, 0x64, 0xb0, 0xe2, 0x69, + 0x4d, 0x2e, 0xaf, 0xfa, 0x34, 0x66, 0xbe, 0xc7, 0xf0, 0x8d, 0xb8, 0x55, + 0x24, 0x7f, 0xf0, 0x86, 0xf8, 0x6f, 0xf3, 0x5d, 0x11, 0x2f, 0x3d, 0x9c, + 0xc8, 0x60, 0x81, 0x45, 0xf4, 0xf7, 0x6d, 0x6f, 0x35, 0xe9, 0xff, 0x69, + 0xcd, 0x5a, 0x79, 0x39, 0x77, 0x78, 0x72, 0xf9, 0x42, 0x9f, 0x11, 0x12, + 0x12, 0x60, 0xb3, 0x6d, 0xdd, 0xe5, 0xd5, 0x47, 0xc5, 0x80, 0x65, 0x9f, + 0xa6, 0xd3, 0xe9, 0x25, 0x74, 0x40, 0xaf, 0x02, 0x5f, 0x90, 0xa7, 0xc2, + 0x12, 0x25, 0xff, 0x19, 0x04, 0xc1, 0x65, 0x97, 0x15, 0xc2, 0xde, 0x04, + 0xf2, 0x6d, 0x65, 0x75, 0xcf, 0xc0, 0x29, 0x10, 0xa1, 0xb8, 0xeb, 0xae, + 0xc5, 0xed, 0xe8, 0x37, 0x02, 0x71, 0xb2, 0x8b, 0x12, 0x65, 0xd7, 0xcd, + 0xf9, 0xc3, 0x89, 0x58, 0x8a, 0x5c, 0x78, 0x9e, 0xb7, 0x18, 0x8f, 0xc7, + 0x5a, 0x09, 0x51, 0x5d, 0x2c, 0x78, 0x62, 0xbd, 0x5e, 0x22, 0xdf, 0x68, + 0x4e, 0xc0, 0x5b, 0x3c, 0xff, 0x9b, 0x45, 0xb8, 0xc6, 0xfe, 0xef, 0xf8, + 0xf8, 0xf8, 0x41, 0x75, 0x13, 0xd0, 0x4f, 0x8d, 0xfb, 0xdf, 0x39, 0x0c, + 0xe0, 0x24, 0x1a, 0xc0, 0x49, 0x34, 0x80, 0x93, 0x68, 0x00, 0x27, 0xd1, + 0x00, 0x4e, 0xa2, 0x01, 0x9c, 0x44, 0x03, 0x38, 0x89, 0x06, 0x70, 0x12, + 0x0d, 0x50, 0x27, 0xf1, 0x60, 0x0a, 0x44, 0xa6, 0x28, 0x4a, 0xe4, 0xf2, + 0x6c, 0xde, 0xc8, 0x64, 0x2d, 0x5c, 0xa2, 0x93, 0xe7, 0x70, 0xec, 0xf8, + 0x06, 0x48, 0x19, 0x41, 0x87, 0x23, 0xf2, 0x01, 0xeb, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + +unsigned char SaveButton_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x11, 0xf2, 0xad, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x05, 0x40, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x8d, + 0x71, 0xdb, 0x36, 0x14, 0xc7, 0xdf, 0x23, 0x25, 0x51, 0x3a, 0xfb, 0xae, + 0xca, 0x04, 0xe1, 0x06, 0x51, 0x27, 0xa8, 0x3a, 0x41, 0xdc, 0x09, 0x6a, + 0x4f, 0xd0, 0x74, 0x82, 0x38, 0x13, 0x38, 0x99, 0xc0, 0xea, 0x04, 0x76, + 0x27, 0xb0, 0x32, 0x41, 0x9d, 0x09, 0xc2, 0x4c, 0x60, 0xe6, 0xce, 0xb6, + 0x48, 0xca, 0xe4, 0xeb, 0x83, 0x2c, 0x5f, 0x48, 0x48, 0x0a, 0x40, 0x81, + 0xa4, 0x29, 0x19, 0xbf, 0x3b, 0x25, 0x26, 0x45, 0x10, 0xe0, 0x5f, 0xf8, + 0x7a, 0x0f, 0x8f, 0x00, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0x62, 0xb1, + 0xbc, 0x44, 0x10, 0x2a, 0xe2, 0xf6, 0x36, 0x19, 0xb9, 0x2e, 0xf0, 0x07, + 0xdf, 0x10, 0xd1, 0x90, 0x10, 0x7d, 0x20, 0xf2, 0x73, 0x97, 0x0c, 0x97, + 0x9f, 0x26, 0x09, 0x11, 0x21, 0xe0, 0x87, 0xfc, 0xd8, 0xeb, 0xf5, 0xfe, + 0x81, 0x1a, 0x30, 0x12, 0x70, 0x36, 0x9b, 0x8f, 0x59, 0xb4, 0xb7, 0x19, + 0xd1, 0x31, 0x34, 0x2f, 0x4e, 0x49, 0x28, 0xa0, 0x2c, 0xfb, 0x7d, 0x30, + 0x18, 0x04, 0x50, 0x21, 0x5b, 0x09, 0x38, 0x9b, 0xcd, 0x7c, 0x74, 0x3b, + 0xe7, 0x5c, 0xc3, 0xc6, 0xb0, 0x53, 0x54, 0x2f, 0x62, 0x69, 0x01, 0xe3, + 0x38, 0x3e, 0x22, 0xc0, 0x73, 0x68, 0x7d, 0x8d, 0xdb, 0x44, 0xb5, 0x22, + 0x96, 0x12, 0x70, 0x29, 0xde, 0xc5, 0x86, 0xaf, 0x43, 0x2e, 0xdc, 0x14, + 0xc1, 0xb9, 0x46, 0xc4, 0x00, 0x91, 0x02, 0xbe, 0xfe, 0xfb, 0xc1, 0xc1, + 0xc1, 0xcd, 0xf2, 0xfb, 0xef, 0x7c, 0x3e, 0x84, 0x06, 0x59, 0xb4, 0x14, + 0xc7, 0x39, 0xe3, 0xc7, 0x3c, 0x2a, 0x7e, 0x53, 0x4f, 0x73, 0x56, 0x16, + 0x26, 0x8a, 0x93, 0x1b, 0xfe, 0x50, 0xe1, 0x13, 0x25, 0x57, 0xf3, 0xf9, + 0xfc, 0x37, 0x68, 0x31, 0xb3, 0x38, 0x9e, 0xac, 0x94, 0x3b, 0x8e, 0xbf, + 0x8a, 0x67, 0x82, 0xa6, 0x88, 0x93, 0xe4, 0x7c, 0x55, 0xbc, 0xe8, 0x2f, + 0xd8, 0x11, 0x9e, 0x55, 0x44, 0x31, 0xda, 0xca, 0x99, 0x73, 0xf3, 0x7c, + 0x0f, 0x3b, 0xc6, 0xb3, 0x89, 0xb8, 0x52, 0xfb, 0xb8, 0xd9, 0xc2, 0x8e, + 0xf2, 0x2c, 0x22, 0x72, 0x26, 0x5f, 0xf3, 0x19, 0xb6, 0xbd, 0xcf, 0x53, + 0xd1, 0xa8, 0x88, 0x49, 0x92, 0x8c, 0xa4, 0xcc, 0x6e, 0x60, 0x0f, 0xa8, + 0x4a, 0x44, 0x47, 0x75, 0x01, 0x91, 0xe3, 0x4b, 0x27, 0xa6, 0xb0, 0x07, + 0x0c, 0x3c, 0xef, 0x98, 0x80, 0x24, 0xf3, 0x0e, 0xc5, 0xb4, 0xe7, 0xaa, + 0x8c, 0x88, 0x4a, 0x01, 0x59, 0xb1, 0x37, 0x85, 0x2c, 0xd0, 0xb9, 0x86, + 0x3d, 0xa1, 0x0a, 0x11, 0x35, 0x04, 0x84, 0x51, 0xe1, 0xf6, 0x3c, 0x49, + 0x86, 0x3d, 0x62, 0x93, 0x88, 0x8e, 0xeb, 0x5e, 0x08, 0xa7, 0x88, 0x2a, + 0xbd, 0xba, 0x09, 0x63, 0xd1, 0x64, 0x13, 0x16, 0x06, 0xec, 0x19, 0xeb, + 0x44, 0x24, 0x82, 0x51, 0x92, 0x3c, 0x28, 0xe7, 0xb9, 0x4a, 0x01, 0x51, + 0xb2, 0x79, 0x85, 0x79, 0x06, 0x7b, 0xc8, 0x5a, 0x11, 0x51, 0xed, 0x2c, + 0x51, 0xda, 0xc2, 0x62, 0x0a, 0xc3, 0xff, 0xf9, 0x4f, 0xc7, 0x5e, 0xaf, + 0xeb, 0x73, 0x33, 0xfe, 0xa6, 0x4a, 0x27, 0xaa, 0x7f, 0x14, 0xcd, 0x8f, + 0xc0, 0x18, 0x0c, 0x06, 0x83, 0xee, 0x14, 0x1a, 0x40, 0x94, 0x39, 0x4e, + 0xe6, 0xf9, 0x59, 0x46, 0xd8, 0xf7, 0x7a, 0xaf, 0x7e, 0x96, 0xa6, 0x03, + 0x35, 0x20, 0x9c, 0x0e, 0x5c, 0x90, 0x0b, 0xd4, 0xe9, 0x61, 0x95, 0x10, + 0x44, 0x49, 0xf2, 0xb1, 0xdf, 0xeb, 0xfd, 0x0d, 0x35, 0x23, 0x9c, 0x1d, + 0x5c, 0x61, 0xf2, 0xa7, 0xcc, 0xfb, 0x40, 0xc8, 0xd5, 0xbe, 0x65, 0x26, + 0xca, 0xda, 0xc7, 0x57, 0xbd, 0x85, 0x2a, 0x21, 0x78, 0x07, 0x2d, 0xa5, + 0x92, 0x3a, 0xb2, 0x4a, 0xe5, 0x23, 0x75, 0x6b, 0xa7, 0x4e, 0xb5, 0x34, + 0x61, 0xcf, 0xeb, 0x7e, 0x98, 0xcd, 0x92, 0x6f, 0x8e, 0x03, 0xc6, 0x26, + 0x9f, 0x68, 0x56, 0x69, 0xfa, 0xf0, 0x09, 0x5a, 0x8a, 0xce, 0x20, 0x42, + 0xf9, 0x63, 0xee, 0x54, 0x2b, 0x5b, 0x88, 0x6a, 0x23, 0x65, 0x9f, 0xb7, + 0xa6, 0x26, 0xfc, 0x72, 0xb0, 0x02, 0x1a, 0x62, 0x05, 0x34, 0xc4, 0x0a, + 0x68, 0x88, 0x15, 0xd0, 0x10, 0x2b, 0xa0, 0x21, 0x56, 0x40, 0x43, 0xac, + 0x80, 0x86, 0x58, 0x01, 0x0d, 0xb1, 0x02, 0x1a, 0x62, 0x05, 0x34, 0xc4, + 0x0a, 0x68, 0x88, 0x15, 0xd0, 0x10, 0x2b, 0xa0, 0x21, 0x56, 0x40, 0x43, + 0xac, 0x80, 0x86, 0x58, 0x01, 0x0d, 0xb1, 0x02, 0x1a, 0x52, 0xcb, 0x9a, + 0xc8, 0x26, 0x16, 0xeb, 0xae, 0xf1, 0xfc, 0x4f, 0x44, 0x18, 0xf1, 0x62, + 0xc2, 0x88, 0x57, 0xff, 0x9f, 0x96, 0x0d, 0xfd, 0x12, 0xb7, 0x09, 0x38, + 0x7d, 0x48, 0x80, 0x21, 0xff, 0xfa, 0xd7, 0x44, 0xd9, 0xe7, 0x5e, 0xaf, + 0x37, 0x6d, 0x3a, 0xfe, 0xfa, 0x89, 0x46, 0xd6, 0x44, 0x1a, 0x78, 0x2d, + 0x82, 0x05, 0xa5, 0x4f, 0x03, 0xcf, 0x3b, 0x05, 0x43, 0x5a, 0xb7, 0x26, + 0xc2, 0xe2, 0x1d, 0xa3, 0xe3, 0xfe, 0x57, 0xf3, 0x3b, 0x25, 0x43, 0x04, + 0x7c, 0xdf, 0x78, 0xe0, 0x38, 0xd4, 0x2c, 0xa0, 0x88, 0x50, 0x60, 0xf1, + 0x1a, 0x7c, 0xa7, 0xe4, 0x31, 0x34, 0x4d, 0x27, 0xaa, 0xaa, 0x2a, 0x6a, + 0xeb, 0x03, 0x45, 0x4d, 0xe0, 0x7e, 0xea, 0x6c, 0xe5, 0x0b, 0x82, 0x29, + 0xff, 0x7b, 0xd9, 0xe9, 0x38, 0x81, 0xeb, 0xba, 0x8b, 0x05, 0x73, 0xbd, + 0x68, 0x87, 0x65, 0x72, 0xa2, 0xd7, 0x77, 0x77, 0x77, 0xaf, 0xfa, 0xfd, + 0xfe, 0xeb, 0x2c, 0xa3, 0x71, 0x46, 0x24, 0xe2, 0x6f, 0xfc, 0x1f, 0x57, + 0xa0, 0x2f, 0x62, 0xba, 0xf9, 0x8f, 0x3f, 0xa0, 0x0d, 0xc8, 0xef, 0x86, + 0xe8, 0xfe, 0xba, 0x4d, 0xbd, 0x16, 0x21, 0xca, 0xb3, 0x2e, 0x5c, 0x97, + 0x7f, 0xc0, 0x31, 0x6c, 0x81, 0x7c, 0x1f, 0xd5, 0xf5, 0x3a, 0x4d, 0x58, + 0x1e, 0xdd, 0x7e, 0x01, 0x0d, 0x78, 0x84, 0x1d, 0xe7, 0x8f, 0x11, 0xe8, + 0x94, 0x6b, 0x4d, 0xe5, 0x11, 0x06, 0x62, 0xf4, 0x15, 0xa1, 0x69, 0x9c, + 0xc1, 0x34, 0x7f, 0xde, 0x75, 0x3b, 0xa5, 0xe3, 0x73, 0xd6, 0xf4, 0x9f, + 0x81, 0x2a, 0x4d, 0x2d, 0x7d, 0xa0, 0x08, 0x4c, 0x87, 0xe2, 0xd4, 0x24, + 0xf4, 0x3c, 0xef, 0x03, 0xd4, 0x08, 0xa5, 0x69, 0xe1, 0xfe, 0xcb, 0xa6, + 0x5d, 0x3b, 0xa5, 0x05, 0x14, 0xfd, 0x8f, 0xea, 0x9a, 0xd5, 0xc0, 0xf4, + 0xfa, 0x83, 0x83, 0xb8, 0x76, 0xcb, 0x79, 0xf8, 0x50, 0x12, 0xee, 0x93, + 0xe5, 0xee, 0x49, 0x39, 0xb7, 0x54, 0x0b, 0x28, 0xc5, 0x44, 0x73, 0x4d, + 0xd2, 0x68, 0xc2, 0xc5, 0xc0, 0x74, 0xc7, 0xc1, 0xda, 0x05, 0x5c, 0x4e, + 0xa4, 0x83, 0xfc, 0x39, 0x31, 0xe0, 0x40, 0x09, 0xd2, 0x14, 0x8b, 0x02, + 0x52, 0x05, 0x02, 0x22, 0x91, 0x54, 0x28, 0xf4, 0x95, 0x69, 0xa4, 0xb8, + 0x6a, 0xd2, 0x28, 0x48, 0x15, 0xc8, 0xd6, 0x88, 0x4e, 0x6b, 0x29, 0x52, + 0x78, 0xc3, 0x5e, 0x1c, 0x57, 0x20, 0xa0, 0x54, 0x28, 0x22, 0x39, 0x93, + 0x35, 0xc5, 0x90, 0x46, 0xea, 0xa6, 0x22, 0xfb, 0x49, 0x6a, 0x72, 0x7a, + 0xad, 0xe5, 0x07, 0xdc, 0x52, 0x0a, 0x35, 0x56, 0xe7, 0x95, 0x0e, 0xa5, + 0x80, 0x69, 0x4a, 0x5f, 0xf2, 0xc7, 0x6c, 0x7b, 0x8e, 0x60, 0x7f, 0x91, + 0x9e, 0x0d, 0xcd, 0x05, 0x74, 0x5d, 0x69, 0x00, 0x40, 0x1c, 0x43, 0x4b, + 0xd9, 0xa6, 0xbb, 0x29, 0x5c, 0x0f, 0x45, 0x73, 0x73, 0x3e, 0x8f, 0x94, + 0x13, 0x7c, 0xa5, 0x80, 0xec, 0xe9, 0x10, 0x02, 0xe6, 0x9b, 0xc6, 0x70, + 0xdb, 0x49, 0x6a, 0x9b, 0x11, 0xaf, 0xf4, 0x42, 0xc1, 0xe4, 0xa4, 0xe0, + 0xf0, 0xf0, 0xd0, 0xbc, 0x06, 0x2e, 0x2e, 0x42, 0x9c, 0xe4, 0x8f, 0xd1, + 0x75, 0x77, 0xee, 0x5d, 0x61, 0x15, 0xe8, 0x42, 0xe1, 0x99, 0xd8, 0x39, + 0x31, 0xd5, 0x49, 0xa7, 0x25, 0x60, 0x9a, 0x3e, 0xfc, 0x5b, 0x38, 0xc1, + 0x56, 0xc6, 0xfd, 0x7d, 0xd4, 0xda, 0xc8, 0xf9, 0xb2, 0xb0, 0x29, 0x78, + 0x2a, 0x7b, 0x8b, 0x78, 0x40, 0x99, 0xe8, 0xa4, 0xd5, 0x12, 0x70, 0x30, + 0x18, 0x4c, 0x65, 0x53, 0xc9, 0x71, 0x9d, 0xb3, 0x45, 0xc6, 0x3b, 0xce, + 0x7d, 0x14, 0xbd, 0x13, 0xae, 0xb0, 0xfc, 0x39, 0x76, 0x00, 0x4e, 0xba, + 0xdd, 0xee, 0x67, 0x9d, 0xf4, 0xda, 0x96, 0x08, 0x9b, 0x4a, 0x27, 0x20, + 0x4d, 0x13, 0x16, 0x3e, 0xb8, 0x64, 0x7e, 0xb5, 0xec, 0x3f, 0x76, 0x8a, + 0xc5, 0x36, 0x06, 0x5c, 0x76, 0x07, 0x1d, 0xd9, 0x63, 0x14, 0x66, 0x59, + 0xaa, 0x6d, 0x76, 0x6a, 0xbb, 0xb3, 0xc4, 0x16, 0x21, 0xec, 0xdf, 0x3b, + 0x59, 0xd9, 0xf6, 0x84, 0xab, 0x3e, 0x3a, 0x20, 0xf6, 0x54, 0x60, 0x71, + 0x71, 0x8a, 0xc2, 0xcd, 0x8e, 0x3c, 0x57, 0x2c, 0xf8, 0x31, 0xb2, 0x67, + 0xda, 0x63, 0x26, 0x1b, 0x3e, 0x6e, 0x49, 0x25, 0x2c, 0x0c, 0xf2, 0xc5, + 0x3c, 0x8f, 0x16, 0x53, 0x15, 0xd1, 0x5c, 0x79, 0xae, 0xba, 0xc6, 0xd7, + 0xc2, 0x4e, 0x8f, 0x93, 0x7e, 0x89, 0xed, 0x50, 0x5e, 0xe0, 0xc6, 0x3b, + 0x1b, 0x09, 0x85, 0x78, 0x3c, 0xf9, 0xbe, 0x2c, 0x93, 0xa8, 0xb4, 0x33, + 0x41, 0x64, 0x40, 0x59, 0xfa, 0x2b, 0x9b, 0x6b, 0x13, 0xd8, 0x17, 0xd8, + 0xc9, 0x2b, 0x9e, 0xa9, 0xac, 0x78, 0x02, 0xa3, 0x97, 0x66, 0xc4, 0xe6, + 0x13, 0x62, 0xe3, 0xb1, 0xa5, 0xef, 0xcf, 0x87, 0xdd, 0x22, 0x14, 0xd3, + 0x33, 0xae, 0x08, 0x97, 0xba, 0x03, 0xc6, 0x3a, 0x2a, 0xdc, 0xfe, 0xee, + 0x76, 0x24, 0xdc, 0xec, 0x6c, 0xfa, 0x8d, 0x08, 0xd8, 0xdc, 0x23, 0x1c, + 0x0a, 0xa7, 0x02, 0xc1, 0x56, 0x4b, 0x97, 0xa6, 0x84, 0x90, 0x1f, 0xf0, + 0x68, 0xb1, 0x14, 0x1a, 0x3c, 0xda, 0xf5, 0x78, 0x9d, 0x24, 0xd1, 0x17, + 0x9d, 0x49, 0xb2, 0xc5, 0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0xb2, + 0x89, 0xff, 0x01, 0xb5, 0x56, 0x6a, 0xf0, 0xc1, 0xda, 0x1a, 0x44, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; +inline constexpr size_t PauseButton_png_len = sizeof(PauseButton_png) /sizeof(PauseButton_png[0]); +inline constexpr size_t PlayButton_png_len = sizeof(PlayButton_png) /sizeof(PlayButton_png[0]); +inline constexpr size_t ResetButton_png_len = sizeof(ResetButton_png) /sizeof(ResetButton_png[0]); +inline constexpr size_t SaveButton_png_len = sizeof(SaveButton_png) /sizeof(SaveButton_png[0]); inline constexpr size_t AutoInternLogo_png_len = sizeof(AutoInternLogo_png) / sizeof(AutoInternLogo_png[0]); inline constexpr size_t SearchDevices_png_len = diff --git a/src/imagesHeaderToolbar.hpp b/src/imagesHeaderToolbar.hpp deleted file mode 100644 index ad61d2e5..00000000 --- a/src/imagesHeaderToolbar.hpp +++ /dev/null @@ -1,432 +0,0 @@ -// imagesHeader.hpp -#ifndef IMAGES_HEADER_TOOLBAR_HPP -#define IMAGES_HEADER_TOOLBAR_HPP - -unsigned char PauseButton_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x02, 0xaf, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9b, 0xdb, - 0x6d, 0x1a, 0x41, 0x14, 0x86, 0xff, 0x33, 0xcb, 0xc5, 0xc8, 0x7e, 0xa0, - 0x04, 0xd2, 0x81, 0x5d, 0x41, 0x70, 0x05, 0x90, 0x0a, 0xec, 0x54, 0x10, - 0x77, 0x90, 0x12, 0x92, 0x54, 0x60, 0x52, 0x81, 0xa1, 0x02, 0x70, 0x05, - 0xa1, 0x83, 0x6c, 0x07, 0xe1, 0x01, 0x09, 0x76, 0x66, 0x77, 0x4e, 0x66, - 0x20, 0x31, 0xcc, 0x5a, 0x8a, 0xc2, 0xee, 0x22, 0x59, 0x3a, 0xf3, 0x49, - 0x88, 0x65, 0x58, 0x66, 0xff, 0xf9, 0xe6, 0xc2, 0xd3, 0x21, 0x94, 0xd8, - 0x6c, 0xcc, 0x30, 0x49, 0x30, 0xb2, 0x8c, 0x01, 0x08, 0x7d, 0x9c, 0x80, - 0x02, 0x96, 0xcc, 0xf6, 0xb9, 0xdb, 0xed, 0x4e, 0x71, 0x06, 0x7c, 0x36, - 0xa5, 0xf8, 0x8e, 0x41, 0xfd, 0x2a, 0xd9, 0x8a, 0x02, 0xb3, 0x5e, 0xaf, - 0xbd, 0x38, 0x6e, 0xa7, 0x43, 0xe7, 0x9b, 0x01, 0x25, 0xad, 0x47, 0x30, - 0x0f, 0x51, 0x1b, 0x4e, 0xd9, 0xda, 0xdb, 0x5e, 0xaf, 0x97, 0xa2, 0x01, - 0xd6, 0xeb, 0xf5, 0x75, 0xab, 0xdd, 0x79, 0x72, 0x97, 0x03, 0xd4, 0x26, - 0xcc, 0xb6, 0x13, 0xb0, 0x1b, 0xbc, 0x4a, 0xe6, 0xcd, 0x3c, 0xe0, 0x85, - 0x55, 0x6e, 0xf4, 0xed, 0xd5, 0xd5, 0xd5, 0x12, 0x35, 0xf8, 0x33, 0x78, - 0x9f, 0xed, 0xa4, 0x19, 0xff, 0x37, 0x07, 0x09, 0x3b, 0x01, 0xdb, 0x4c, - 0xff, 0x44, 0xb3, 0x83, 0x7f, 0x79, 0x50, 0xb7, 0xd3, 0xb9, 0x21, 0xa2, - 0x15, 0x2a, 0x72, 0xb6, 0x6c, 0x84, 0xc5, 0x45, 0xa7, 0x73, 0xdb, 0xf2, - 0xfb, 0xca, 0x05, 0x1d, 0x04, 0x5f, 0x32, 0x16, 0xad, 0x96, 0xfa, 0xca, - 0xcc, 0x27, 0x05, 0xb7, 0xcc, 0xf7, 0xcc, 0xb8, 0x3f, 0x7a, 0xca, 0x20, - 0xcb, 0xcc, 0x9d, 0xbb, 0xf8, 0x86, 0x0a, 0x6c, 0x36, 0xfa, 0x1e, 0xa5, - 0xc1, 0xbb, 0x19, 0x9b, 0x24, 0x89, 0x9a, 0x9e, 0x92, 0xcd, 0x4d, 0x40, - 0xbf, 0xb0, 0x76, 0x1c, 0x64, 0x63, 0x0c, 0xdd, 0xca, 0x1f, 0x42, 0x6b, - 0xf3, 0xc5, 0x59, 0xe6, 0xbf, 0xaf, 0x2c, 0xd3, 0x8f, 0xa8, 0x41, 0xb9, - 0xbf, 0xed, 0x36, 0x7b, 0x42, 0x45, 0xb6, 0xda, 0xcc, 0xc3, 0x6c, 0xd9, - 0x67, 0xd4, 0x60, 0xab, 0x75, 0xd0, 0x9f, 0xcf, 0xaa, 0x2c, 0x70, 0x1d, - 0xde, 0xa6, 0x6a, 0x9d, 0xe0, 0x45, 0x91, 0x87, 0xb3, 0x4d, 0x74, 0x8d, - 0x8a, 0x50, 0x69, 0xdf, 0x1b, 0x63, 0x66, 0xa8, 0x01, 0xb1, 0x0a, 0xb2, - 0x59, 0x6b, 0x07, 0xaa, 0x7c, 0x93, 0xfb, 0x9b, 0xa9, 0xbc, 0x5f, 0x9b, - 0xc6, 0x2d, 0xf3, 0x40, 0xc0, 0xe5, 0xe5, 0xe5, 0x2f, 0xd4, 0xc0, 0xda, - 0xf2, 0xd8, 0xa8, 0xaf, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, - 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, - 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, - 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, - 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, - 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, - 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, - 0x00, 0xc2, 0x89, 0x02, 0x20, 0x1c, 0x45, 0x8c, 0xa0, 0x8a, 0xc2, 0x5a, - 0xaa, 0x55, 0x9e, 0x96, 0x24, 0x49, 0xf9, 0xf7, 0x6f, 0xa6, 0x02, 0x45, - 0xa9, 0xd7, 0x63, 0x53, 0x44, 0x48, 0x8f, 0x1b, 0x98, 0xec, 0x03, 0x6a, - 0x50, 0x30, 0x8f, 0x83, 0x06, 0xae, 0x2e, 0x80, 0x40, 0x41, 0xcd, 0x61, - 0x66, 0x4c, 0xad, 0x6c, 0x20, 0x3b, 0x3a, 0xfe, 0xe8, 0x84, 0x2c, 0x5b, - 0x45, 0x91, 0xcf, 0x48, 0x25, 0x87, 0x8e, 0x19, 0xc3, 0x7d, 0xe5, 0x18, - 0xcf, 0xac, 0x55, 0xff, 0x1d, 0x5e, 0x29, 0xdb, 0x07, 0xd1, 0x28, 0x2c, - 0x9b, 0xf3, 0xed, 0x98, 0xa0, 0x22, 0xcc, 0xbc, 0x70, 0x16, 0xc6, 0x47, - 0xd9, 0x1e, 0x5c, 0xb6, 0xbe, 0x5b, 0xa5, 0xdf, 0x4f, 0xe8, 0x66, 0x97, - 0x8d, 0x49, 0x7d, 0xe2, 0x52, 0x55, 0xac, 0x9b, 0xfc, 0xe9, 0xbe, 0x70, - 0x52, 0xeb, 0xb9, 0x1f, 0x38, 0x1a, 0x87, 0xd3, 0x8b, 0x6e, 0xf7, 0x1d, - 0x2a, 0xe2, 0x8b, 0xa6, 0x32, 0x6d, 0x7e, 0xe0, 0x4c, 0x45, 0x9d, 0x3e, - 0xdb, 0xee, 0x10, 0xe4, 0xa2, 0xf8, 0xe8, 0xde, 0x52, 0x34, 0xcb, 0x2a, - 0x37, 0xe6, 0x03, 0x6a, 0xe0, 0x2b, 0x4e, 0x73, 0xa3, 0x7d, 0x1f, 0x0d, - 0x9f, 0x23, 0xfb, 0xd2, 0x59, 0x7f, 0xb5, 0x13, 0xe0, 0x6b, 0x68, 0xd9, - 0x16, 0xbe, 0x21, 0x45, 0x23, 0x70, 0xda, 0x44, 0xdd, 0xb0, 0xc7, 0xf7, - 0xe1, 0xb2, 0xdd, 0xa0, 0xa9, 0x6c, 0x8c, 0xc5, 0xab, 0xe2, 0xe9, 0x63, - 0x8c, 0x31, 0xef, 0xdd, 0x3e, 0x1e, 0x5b, 0xcb, 0xa7, 0x15, 0x3c, 0x12, - 0xaf, 0xdc, 0xa1, 0xb5, 0x72, 0x07, 0xcb, 0xa4, 0xdd, 0x6e, 0x3f, 0xe3, - 0x0c, 0xe4, 0x79, 0x3e, 0x72, 0xb9, 0x86, 0x55, 0xb2, 0x29, 0x52, 0xa9, - 0xdf, 0xf3, 0xe5, 0x6c, 0xbf, 0x01, 0xcd, 0x4e, 0x60, 0x22, 0xc6, 0x05, - 0x25, 0x40, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, - 0x60, 0x82 -}; - -unsigned char PlayButton_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x40, - 0x08, 0x06, 0x00, 0x00, 0x00, 0x4f, 0xf7, 0xb4, 0xb2, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x04, 0xa3, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xdd, 0x5b, 0xd1, - 0x55, 0xdb, 0x30, 0x14, 0x7d, 0x92, 0x13, 0xdb, 0xf9, 0x63, 0x84, 0x74, - 0x82, 0xc2, 0x04, 0x85, 0x09, 0x0a, 0x13, 0x34, 0x4c, 0x40, 0x98, 0x80, - 0x30, 0x01, 0xe9, 0x04, 0xa1, 0x13, 0x90, 0x0d, 0x92, 0x4e, 0x00, 0x9d, - 0x80, 0x6c, 0x50, 0x7a, 0x0e, 0x87, 0x58, 0x0a, 0x58, 0x7d, 0xcf, 0x58, - 0x24, 0xb1, 0x95, 0xd8, 0x18, 0xdb, 0x91, 0xb9, 0xe7, 0x10, 0x1c, 0x4b, - 0xfe, 0xb8, 0x79, 0x4f, 0xf7, 0xca, 0x7a, 0x12, 0x03, 0x03, 0xe6, 0xf3, - 0xc5, 0x21, 0x63, 0xea, 0x2b, 0x63, 0xb0, 0x4f, 0xdf, 0x19, 0x63, 0x0f, - 0x4a, 0x85, 0xbf, 0x3d, 0xcf, 0x1b, 0x43, 0x93, 0x31, 0x9f, 0xcf, 0xbb, - 0x81, 0x5c, 0x4c, 0x02, 0x21, 0x95, 0xf9, 0x4f, 0xdc, 0x4b, 0x29, 0x7f, - 0x40, 0x83, 0xc0, 0xf4, 0xc5, 0xe3, 0xe3, 0xe3, 0x7e, 0xab, 0xed, 0x4e, - 0xf0, 0x72, 0x2f, 0xc7, 0x73, 0x77, 0x2a, 0x7c, 0x39, 0xe9, 0x74, 0x3a, - 0x33, 0xb0, 0x1c, 0x9c, 0x3e, 0x28, 0x72, 0x48, 0xee, 0x06, 0xf2, 0x91, - 0x23, 0xec, 0x33, 0xee, 0xdc, 0xcf, 0x85, 0x18, 0x28, 0xa5, 0xf2, 0x3e, - 0xb3, 0x13, 0x44, 0x11, 0x14, 0x52, 0x8e, 0x94, 0x82, 0xde, 0x5a, 0x8b, - 0x82, 0x29, 0x7e, 0x8e, 0x39, 0xe7, 0x0f, 0x0a, 0xc2, 0xc3, 0x54, 0xfb, - 0xb2, 0xe3, 0x8c, 0x33, 0x36, 0x70, 0x5d, 0xf7, 0x17, 0xd8, 0x88, 0x68, - 0xdc, 0x25, 0xc6, 0x9a, 0x10, 0xe2, 0xc2, 0xd4, 0x8f, 0x7e, 0x88, 0x4d, - 0xe3, 0x53, 0x08, 0x39, 0xa2, 0x3e, 0x60, 0x1b, 0x84, 0x78, 0x3e, 0x4e, - 0x0a, 0xc9, 0xb6, 0xfe, 0xf3, 0xb9, 0xec, 0x61, 0xbf, 0xfb, 0x0d, 0x44, - 0xff, 0x52, 0xda, 0x82, 0x45, 0xe0, 0x61, 0x18, 0xae, 0x8d, 0x21, 0x06, - 0x6c, 0xba, 0xed, 0x81, 0x4e, 0xc7, 0xbd, 0xf6, 0xdc, 0xf6, 0x01, 0x03, - 0x35, 0x30, 0x34, 0xef, 0xe1, 0xf3, 0x17, 0xf4, 0x23, 0x91, 0x68, 0x81, - 0x05, 0xe0, 0x50, 0x00, 0xe4, 0x8b, 0xe8, 0x89, 0x97, 0xa8, 0xa4, 0x5f, - 0xd0, 0x2b, 0xef, 0x0c, 0x3d, 0x48, 0xb4, 0x6e, 0x6d, 0x48, 0xdb, 0x42, - 0x04, 0x35, 0xc8, 0x26, 0x3c, 0xd7, 0x3d, 0x50, 0x21, 0x9c, 0xe2, 0xd7, - 0x59, 0xb2, 0x5d, 0x01, 0xf4, 0x18, 0xe7, 0x93, 0x5d, 0x7a, 0xe7, 0x87, - 0x08, 0x6a, 0x50, 0xda, 0x62, 0x34, 0x8f, 0x30, 0x9a, 0xd7, 0xe9, 0x56, - 0xd6, 0x0d, 0x15, 0x5c, 0x53, 0xda, 0xee, 0x22, 0x9a, 0xa5, 0x10, 0x24, - 0xc4, 0xd1, 0x3c, 0xe5, 0x0c, 0x0e, 0xc0, 0x10, 0x4d, 0x22, 0x4a, 0xde, - 0x19, 0x48, 0x79, 0x55, 0xa7, 0x77, 0x96, 0x46, 0x50, 0x03, 0xfd, 0xf0, - 0xce, 0xf7, 0xdc, 0x2f, 0xb1, 0x08, 0x3d, 0xa4, 0x3a, 0x28, 0xe8, 0xa3, - 0xdd, 0xdc, 0xd6, 0x95, 0xb6, 0xa5, 0x13, 0xd4, 0x88, 0x45, 0xe8, 0x60, - 0x5b, 0xda, 0xd6, 0x21, 0x42, 0x95, 0x11, 0x24, 0xe8, 0xb4, 0xdd, 0x2e, - 0x42, 0xaf, 0x53, 0x3e, 0xa8, 0x08, 0x95, 0x12, 0xd4, 0x20, 0x11, 0x5a, - 0x49, 0xdb, 0x14, 0xb4, 0x77, 0xe2, 0xa4, 0xe3, 0x3b, 0x94, 0x8c, 0x5a, - 0x08, 0x6a, 0x68, 0xef, 0x44, 0x46, 0xd3, 0x74, 0x2b, 0xeb, 0xe2, 0x9c, - 0x77, 0x5c, 0x76, 0xda, 0xd6, 0x4a, 0x90, 0x40, 0x69, 0xeb, 0xbb, 0xee, - 0x51, 0x5d, 0xde, 0x59, 0x3b, 0x41, 0x8d, 0xba, 0xbc, 0x73, 0x67, 0x04, - 0x09, 0x4b, 0x11, 0xc2, 0xb4, 0xcd, 0xf0, 0xce, 0xa2, 0x44, 0x77, 0x4a, - 0x50, 0x23, 0x4a, 0x5b, 0x14, 0x21, 0x50, 0xe1, 0x39, 0x98, 0x88, 0xa2, - 0x77, 0x16, 0x4d, 0x5b, 0x2b, 0x08, 0x6a, 0xf8, 0xbe, 0x3f, 0xcc, 0x91, - 0xb6, 0x37, 0xef, 0x89, 0xa6, 0x55, 0x04, 0x09, 0x59, 0xde, 0x89, 0x44, - 0x8f, 0xdf, 0xe3, 0x9d, 0xd6, 0x11, 0xd4, 0xc8, 0xeb, 0x9d, 0x59, 0x69, - 0x6b, 0x2d, 0x41, 0x8d, 0xb7, 0xf7, 0x4e, 0x60, 0x86, 0x35, 0xd9, 0xec, - 0x29, 0x9f, 0xf5, 0x04, 0x09, 0x51, 0xda, 0x7a, 0xed, 0x93, 0x2c, 0xef, - 0x7c, 0x7a, 0x0a, 0xfa, 0xc9, 0xb6, 0x46, 0x10, 0xd4, 0xd0, 0xde, 0x89, - 0xab, 0x78, 0xc3, 0x74, 0x2b, 0xeb, 0x72, 0x87, 0x5f, 0x25, 0xbd, 0xb3, - 0x51, 0x04, 0x09, 0x14, 0x4d, 0xd7, 0x6d, 0x9f, 0x6f, 0xf7, 0x4e, 0x3e, - 0xd1, 0xef, 0x9c, 0x8d, 0x23, 0xa8, 0xa1, 0xbd, 0xd3, 0x9c, 0xb6, 0xac, - 0x2b, 0xe5, 0xf3, 0x19, 0x5d, 0x35, 0x96, 0xa0, 0x86, 0x4e, 0x5b, 0x1c, - 0x89, 0x6b, 0x22, 0xa4, 0x40, 0xf5, 0x29, 0x8a, 0x8d, 0x27, 0x48, 0xd0, - 0xde, 0x09, 0xeb, 0x2b, 0x08, 0x7b, 0x52, 0xbe, 0x7c, 0xfb, 0x14, 0x04, - 0x09, 0xb4, 0x94, 0x89, 0x75, 0x88, 0xf1, 0xfa, 0x3d, 0xf8, 0x1c, 0x11, - 0x5c, 0x82, 0xa5, 0x16, 0xb3, 0x3e, 0x0d, 0x41, 0xb2, 0x06, 0x1c, 0x77, - 0x6b, 0xab, 0xe9, 0x58, 0xc4, 0x9d, 0x7d, 0x0a, 0x82, 0x51, 0x45, 0x9a, - 0x3b, 0x54, 0xdb, 0xec, 0x2e, 0xef, 0xaa, 0x59, 0xbb, 0xdd, 0xfe, 0xdd, - 0x68, 0x82, 0xa4, 0x92, 0xf8, 0xae, 0x38, 0x64, 0x5c, 0x25, 0xc8, 0x45, - 0x75, 0xc1, 0x6b, 0xfa, 0xdf, 0x82, 0x86, 0x82, 0xaa, 0x5c, 0x42, 0x2e, - 0xae, 0xc0, 0x54, 0xb4, 0xc5, 0xda, 0xa6, 0xe7, 0x7b, 0x97, 0x74, 0xd9, - 0xb8, 0x08, 0xea, 0x7d, 0x04, 0x8c, 0xc3, 0x08, 0x0c, 0xe4, 0xe8, 0x5d, - 0x92, 0xe6, 0xad, 0xfa, 0x7b, 0x63, 0x22, 0x18, 0xa7, 0x63, 0x1f, 0xdf, - 0x2a, 0xce, 0xc0, 0xb8, 0xf4, 0xaf, 0x66, 0x0e, 0xe7, 0x3d, 0x1a, 0x77, - 0xab, 0x77, 0x1b, 0x41, 0x90, 0x44, 0x04, 0xd3, 0x71, 0x84, 0xe4, 0xba, - 0x86, 0x66, 0xf4, 0x3f, 0x35, 0xc4, 0x92, 0xc1, 0x4f, 0xf2, 0xc2, 0x64, - 0xa3, 0xd5, 0x04, 0x29, 0x6a, 0x72, 0xb1, 0xa0, 0x62, 0x4d, 0xcf, 0xdc, - 0x01, 0xa6, 0x4a, 0xbd, 0x9c, 0xfa, 0x5b, 0x76, 0x7b, 0x58, 0x4b, 0xf0, - 0x29, 0x08, 0xb0, 0x48, 0xb3, 0xa0, 0xbd, 0x02, 0xa6, 0x4a, 0x14, 0x45, - 0xed, 0x14, 0x85, 0x24, 0x73, 0x63, 0x92, 0x75, 0x04, 0xa3, 0xfd, 0x3a, - 0xae, 0x77, 0x85, 0xe1, 0x3b, 0x34, 0xb5, 0x63, 0x79, 0x6e, 0x88, 0xe3, - 0xec, 0xd2, 0x94, 0x8e, 0x26, 0x58, 0x43, 0x90, 0xd2, 0x51, 0x2c, 0x16, - 0x03, 0x4c, 0x3b, 0x12, 0x11, 0x43, 0x07, 0x98, 0x3a, 0x0e, 0x1b, 0x24, - 0x45, 0x24, 0x0b, 0x56, 0x10, 0xd4, 0x22, 0x02, 0x09, 0xb3, 0x8e, 0xf1, - 0x80, 0xeb, 0xa5, 0x03, 0x5c, 0x52, 0xfc, 0x09, 0x05, 0xb0, 0x53, 0x82, - 0xe4, 0x69, 0xcc, 0x69, 0x8d, 0x36, 0xa5, 0x23, 0xbd, 0xe3, 0xa9, 0x30, - 0x3c, 0xff, 0xc8, 0x96, 0xb1, 0x9d, 0x11, 0xa4, 0x75, 0xcd, 0x6c, 0x4f, - 0x73, 0xdf, 0x95, 0x8e, 0x26, 0xd4, 0x4e, 0x90, 0xd2, 0x91, 0x3b, 0x0a, - 0xa5, 0x1f, 0x8c, 0xfb, 0x68, 0x68, 0x1d, 0x74, 0x93, 0xa7, 0x15, 0x41, - 0x6d, 0x04, 0x97, 0x22, 0xa2, 0xce, 0x4c, 0x1a, 0x92, 0xc7, 0xd3, 0x8a, - 0xa0, 0x96, 0xb9, 0x68, 0xec, 0x69, 0xf7, 0x91, 0x42, 0xa6, 0x41, 0x22, - 0xd2, 0xf7, 0x7d, 0xf7, 0xa8, 0x8a, 0xed, 0x99, 0x95, 0x46, 0x30, 0x4b, - 0x44, 0xde, 0xeb, 0x69, 0x45, 0x50, 0x09, 0xc1, 0x95, 0x89, 0xf1, 0x05, - 0x98, 0xf3, 0xd1, 0x38, 0x31, 0xae, 0x02, 0xa5, 0x13, 0xcc, 0x33, 0x31, - 0xa6, 0x7a, 0x03, 0xd4, 0x84, 0xd2, 0x08, 0x46, 0x22, 0x22, 0x25, 0x9a, - 0xb5, 0x3a, 0x36, 0x77, 0xa8, 0x46, 0x44, 0xb2, 0x50, 0x8a, 0xc8, 0xbc, - 0x89, 0x08, 0xd6, 0xee, 0xd2, 0xad, 0x6a, 0x86, 0x51, 0x3b, 0xa9, 0x4a, - 0x44, 0xb2, 0xf0, 0xa1, 0x08, 0x46, 0x8b, 0x3d, 0x0e, 0x5c, 0x6c, 0x17, - 0x11, 0xb7, 0x52, 0x11, 0xc9, 0x42, 0x21, 0x82, 0xab, 0x9e, 0x06, 0x1b, - 0x3c, 0xad, 0xc8, 0xc4, 0xb8, 0x0a, 0xa4, 0x08, 0x2a, 0x66, 0x9c, 0xf0, - 0xbe, 0x41, 0x08, 0x71, 0x1c, 0x2f, 0xf6, 0x98, 0xfa, 0x7d, 0x68, 0x62, - 0x5c, 0x09, 0x22, 0x49, 0x4f, 0xec, 0xbd, 0x36, 0xd5, 0xbf, 0x73, 0x1c, - 0x1a, 0xb9, 0xa9, 0x7a, 0x63, 0x5d, 0x11, 0x44, 0xc7, 0x0a, 0xd0, 0xb3, - 0x26, 0x98, 0x56, 0x87, 0xeb, 0x2d, 0x6c, 0x0a, 0x21, 0xce, 0xe6, 0x15, - 0xfc, 0xc3, 0x74, 0xfb, 0x1a, 0xbe, 0x2e, 0x1b, 0xe4, 0x5e, 0xec, 0xb1, - 0x05, 0x11, 0xc1, 0x68, 0xc6, 0xc1, 0x9d, 0x5b, 0xc8, 0x7f, 0x30, 0x24, - 0x7e, 0xb8, 0xdc, 0x89, 0x71, 0x15, 0x28, 0x76, 0xb4, 0x27, 0xf6, 0xb4, - 0x26, 0x1c, 0xed, 0x59, 0x43, 0xd6, 0xe1, 0x0f, 0x3a, 0x17, 0x11, 0x04, - 0xc1, 0x19, 0x34, 0x08, 0xcc, 0x74, 0x33, 0x4a, 0x59, 0xe6, 0x7c, 0x5f, - 0x3d, 0x5e, 0x87, 0xd7, 0xe3, 0x56, 0xab, 0xf5, 0xc7, 0xe6, 0x74, 0x34, - 0xe1, 0x3f, 0xe5, 0x21, 0x6e, 0xce, 0x0a, 0x36, 0x99, 0x91, 0x00, 0x00, - 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 -}; - -unsigned char ResetButton_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, - 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x11, 0xf2, 0xad, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x04, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x8d, - 0x71, 0xdb, 0x36, 0x14, 0x80, 0x1f, 0x48, 0x89, 0x92, 0xcf, 0xbe, 0xab, - 0x3a, 0x41, 0x39, 0x82, 0x37, 0xb0, 0x32, 0x41, 0xb2, 0x41, 0x9d, 0x09, - 0x92, 0x4e, 0xe0, 0x8c, 0x50, 0x4f, 0x60, 0x77, 0x82, 0xb8, 0x13, 0x58, - 0x99, 0x20, 0xee, 0x04, 0x66, 0x27, 0xb0, 0x7a, 0x67, 0x57, 0x24, 0x24, - 0x12, 0x79, 0xa0, 0xa5, 0x84, 0x04, 0x29, 0x9b, 0xf8, 0x21, 0x09, 0x46, - 0xf8, 0xee, 0x74, 0x0e, 0x71, 0x82, 0x4c, 0x7f, 0x7a, 0x20, 0x81, 0xf7, - 0xc0, 0x00, 0x38, 0x1c, 0x07, 0x0f, 0x63, 0x6c, 0x96, 0x50, 0xfa, 0x95, - 0x52, 0xfa, 0x3b, 0x38, 0xe4, 0xd8, 0xc9, 0x8b, 0x13, 0xca, 0xf8, 0xcb, - 0x49, 0x94, 0xa4, 0x28, 0x6f, 0x88, 0x12, 0x3d, 0xe8, 0x99, 0x2c, 0x4d, - 0x2f, 0x2b, 0x6d, 0x0c, 0xae, 0x5d, 0x24, 0x4a, 0xb0, 0x5a, 0xad, 0xce, - 0xc5, 0x28, 0x74, 0xc3, 0x59, 0x12, 0x27, 0xd1, 0x00, 0x4e, 0xa2, 0x01, - 0x9c, 0x44, 0x03, 0x38, 0x89, 0x06, 0x70, 0x12, 0x0d, 0xe0, 0x24, 0x1a, - 0xc0, 0x76, 0x89, 0x04, 0x2c, 0x03, 0x85, 0x85, 0x69, 0xea, 0xcf, 0x7c, - 0x9f, 0xcc, 0x70, 0xa1, 0x17, 0xe6, 0x8d, 0x1e, 0x9b, 0x13, 0x20, 0x15, - 0x61, 0x1e, 0x81, 0xf3, 0x20, 0x08, 0xfe, 0x82, 0x1e, 0xe9, 0x5d, 0xe0, - 0x6a, 0xb5, 0x9e, 0x83, 0x97, 0xcd, 0x09, 0xf1, 0xce, 0x70, 0x61, 0x7c, - 0x8a, 0x4d, 0x33, 0x99, 0xfe, 0x7d, 0x4b, 0xec, 0x45, 0x20, 0x4f, 0x20, - 0xc4, 0x94, 0x7e, 0xdc, 0x46, 0x55, 0x08, 0x9a, 0xb0, 0x2c, 0x7d, 0x73, - 0x74, 0x74, 0xb4, 0x80, 0x1e, 0x18, 0x41, 0x87, 0xec, 0xc4, 0x25, 0x74, - 0xfd, 0x01, 0xe5, 0x49, 0x45, 0xda, 0x3e, 0x08, 0x81, 0xeb, 0x69, 0x4f, - 0xf2, 0xf2, 0xdf, 0x0f, 0x1d, 0xf1, 0x7f, 0x1c, 0x7f, 0xf4, 0x88, 0x77, - 0x01, 0xaf, 0x0f, 0xd1, 0x25, 0x9e, 0x54, 0xc4, 0x18, 0xfe, 0x24, 0x10, - 0xe5, 0x2d, 0x04, 0x4e, 0xf1, 0xf8, 0x54, 0x7c, 0x23, 0x97, 0x37, 0x09, - 0x82, 0xf7, 0xd0, 0x23, 0xad, 0x47, 0x20, 0xbf, 0x29, 0x10, 0x7f, 0x74, - 0x85, 0xe1, 0x37, 0xdf, 0xf3, 0x96, 0x25, 0x30, 0xb8, 0xc3, 0x9f, 0x37, - 0x93, 0xc9, 0xf8, 0x86, 0x10, 0xf2, 0x6f, 0xa5, 0xbf, 0xe7, 0xdf, 0x8a, - 0x9d, 0x6c, 0x90, 0xd7, 0x3a, 0x8f, 0x8f, 0x8f, 0xa7, 0x38, 0xe5, 0x78, - 0xa8, 0x9b, 0x86, 0xc4, 0x49, 0x72, 0x9f, 0x24, 0xc9, 0x05, 0x1f, 0xd6, - 0xfb, 0xfa, 0x73, 0x79, 0xf8, 0xde, 0x7b, 0xb1, 0x2f, 0xe6, 0x10, 0xaf, - 0xe0, 0x67, 0x67, 0xdf, 0xfc, 0x8d, 0x0b, 0xe5, 0xe2, 0x1a, 0xf4, 0x77, - 0xf2, 0x2a, 0xaf, 0x98, 0xde, 0x72, 0x31, 0x0d, 0xfa, 0x1f, 0xae, 0xbc, - 0xed, 0xb0, 0xad, 0xc8, 0x6b, 0x12, 0x75, 0x9c, 0x43, 0x8f, 0xbc, 0xda, - 0x3f, 0xbe, 0xe9, 0xb2, 0xeb, 0xa0, 0xe5, 0x71, 0xea, 0x0a, 0x44, 0x71, - 0x1c, 0x7f, 0x68, 0xd2, 0xf7, 0xe0, 0xe5, 0xf1, 0x79, 0x9e, 0xcd, 0xc3, - 0x96, 0xdf, 0xed, 0x57, 0x49, 0xf2, 0x29, 0x49, 0xe8, 0x55, 0x93, 0xeb, - 0x70, 0xa7, 0xd4, 0x0b, 0x48, 0x3e, 0xab, 0xf7, 0x35, 0x1f, 0x79, 0xfc, - 0xf3, 0x8a, 0x33, 0x81, 0x97, 0xa6, 0x4f, 0x32, 0x18, 0x29, 0x6b, 0x7a, - 0xbe, 0xcf, 0x23, 0x2d, 0xfc, 0xd1, 0xc2, 0x22, 0x96, 0x65, 0x7f, 0x34, - 0xeb, 0x3b, 0xfa, 0x0c, 0xc2, 0x7a, 0xb8, 0x8d, 0x49, 0x32, 0x03, 0x12, - 0x16, 0x0e, 0x67, 0x94, 0x6e, 0x1a, 0x5d, 0x5a, 0x5a, 0x67, 0x1b, 0x41, - 0xca, 0xb9, 0x3a, 0x71, 0xb2, 0xdd, 0xd6, 0x35, 0x2f, 0x49, 0xd6, 0x17, - 0xe2, 0x7c, 0xd4, 0x54, 0x14, 0x6a, 0xb1, 0x5a, 0xd1, 0x73, 0x71, 0x85, - 0x01, 0x92, 0xec, 0x24, 0xb6, 0x7d, 0xc3, 0x88, 0x85, 0x55, 0x11, 0x97, - 0x0a, 0x7d, 0x23, 0x5e, 0xbf, 0x54, 0x33, 0xc5, 0x5d, 0x5c, 0xd8, 0x6b, - 0xa2, 0x50, 0xfa, 0xcb, 0x36, 0x0a, 0xca, 0xaa, 0x4c, 0x9a, 0xad, 0xbb, - 0xc3, 0x15, 0xc8, 0xd3, 0x69, 0x42, 0x14, 0xe2, 0xf9, 0xce, 0x41, 0x03, - 0xad, 0x9b, 0x48, 0x96, 0xc1, 0x59, 0xa9, 0x81, 0xb1, 0x1b, 0x4c, 0x6c, - 0x46, 0x60, 0x29, 0x98, 0xe9, 0x59, 0x62, 0x6a, 0xec, 0xae, 0xd8, 0xe6, - 0x79, 0xa3, 0x33, 0xd0, 0x40, 0xef, 0x2e, 0xec, 0x91, 0x77, 0xa5, 0x43, - 0x8f, 0xdc, 0x80, 0xed, 0x64, 0x50, 0x3a, 0x47, 0x46, 0xf6, 0xa6, 0xd9, - 0x1a, 0xa1, 0x27, 0xf0, 0xb9, 0x86, 0xf1, 0x1d, 0x1c, 0xd2, 0xff, 0x80, - 0xe5, 0x30, 0x96, 0xfe, 0x5d, 0x6e, 0xa8, 0x26, 0x6a, 0x65, 0x50, 0xce, - 0x48, 0x3f, 0x6f, 0x8c, 0x5c, 0x3f, 0x14, 0x9a, 0x96, 0xd3, 0x49, 0xf0, - 0x2b, 0x0c, 0x00, 0x7e, 0x1d, 0x84, 0x42, 0x66, 0x7c, 0x12, 0x8c, 0x43, - 0x31, 0x91, 0xdb, 0x14, 0xe5, 0x08, 0x8c, 0xe3, 0x8d, 0xf8, 0xcd, 0x45, - 0x30, 0x10, 0x50, 0x56, 0x54, 0x3c, 0x7e, 0x7a, 0x7a, 0x52, 0xfe, 0xe2, - 0xcd, 0x6d, 0xb0, 0xc4, 0x1a, 0x06, 0x0c, 0x04, 0x06, 0xe5, 0x73, 0x9d, - 0x4c, 0x26, 0xbf, 0x80, 0x22, 0x1a, 0x02, 0xb7, 0x45, 0xef, 0x1f, 0xc7, - 0x83, 0x11, 0x48, 0x18, 0x8b, 0x8a, 0xc7, 0x8c, 0x91, 0x10, 0x14, 0x31, - 0x16, 0x81, 0xf9, 0x14, 0x61, 0x30, 0x98, 0x29, 0xa9, 0x72, 0x34, 0x04, - 0x96, 0xaf, 0x23, 0x58, 0x76, 0x0c, 0x61, 0x20, 0x30, 0x52, 0x2e, 0xad, - 0x12, 0x52, 0x8e, 0x48, 0x19, 0x94, 0x05, 0xfa, 0xbe, 0x30, 0x64, 0x09, - 0x18, 0xfb, 0x56, 0xdb, 0x86, 0x00, 0xf4, 0x1f, 0x81, 0x69, 0x9a, 0x8a, - 0x43, 0x36, 0x84, 0x81, 0x80, 0x53, 0xb0, 0xb0, 0x78, 0x3c, 0x1a, 0x8d, - 0x94, 0xe7, 0xaf, 0xca, 0x02, 0xb7, 0x4b, 0xb6, 0xa2, 0xc4, 0x19, 0x9e, - 0xd8, 0x6f, 0x60, 0x39, 0x7c, 0xfd, 0x0e, 0xe5, 0x08, 0x5c, 0xea, 0x5c, - 0xbf, 0xf5, 0x6e, 0x22, 0xc2, 0xba, 0x12, 0xb3, 0x1d, 0xef, 0xc0, 0x72, - 0xd2, 0x54, 0x58, 0x79, 0xb0, 0xf2, 0xdf, 0x20, 0x8b, 0x96, 0x40, 0xc2, - 0xc8, 0x42, 0xf8, 0x34, 0xeb, 0x05, 0xe2, 0x7a, 0xfd, 0xad, 0xd0, 0xa4, - 0xb5, 0x7e, 0xd7, 0xcc, 0xc6, 0x6c, 0xbe, 0x94, 0x1a, 0x18, 0xdf, 0x04, - 0x64, 0x41, 0x96, 0x77, 0x0f, 0x3c, 0xd5, 0xc6, 0x80, 0x95, 0xbe, 0xe4, - 0xcd, 0x86, 0x7e, 0x01, 0x0d, 0xb4, 0x04, 0x6e, 0xf7, 0xe4, 0x45, 0x85, - 0xa6, 0x4e, 0x6a, 0x0d, 0xea, 0x39, 0x47, 0x7f, 0x5e, 0x3e, 0x66, 0xd1, - 0xc9, 0xc9, 0x89, 0xd6, 0x10, 0xd6, 0xa6, 0xae, 0xd6, 0x00, 0x2d, 0x82, - 0xa5, 0xc9, 0x6b, 0xfe, 0x3b, 0x78, 0x19, 0x00, 0x24, 0x31, 0x95, 0x3d, - 0x37, 0x4a, 0x5d, 0x96, 0xb7, 0xad, 0x5a, 0xc3, 0x56, 0xde, 0xf7, 0x2f, - 0x4a, 0x46, 0x62, 0xb5, 0x76, 0x63, 0x51, 0xf6, 0xbc, 0x12, 0x85, 0x31, - 0xbd, 0x05, 0xc3, 0x08, 0xf2, 0x76, 0xaf, 0xaf, 0x8d, 0xfa, 0xd6, 0xd4, - 0x9e, 0x79, 0x81, 0x1d, 0x6c, 0x41, 0x8c, 0x42, 0xd3, 0x27, 0x57, 0x2f, - 0x2f, 0xb9, 0x6f, 0x1a, 0x41, 0xbc, 0xc8, 0xaf, 0xda, 0xb7, 0x33, 0xf8, - 0x09, 0x71, 0x71, 0xaf, 0x6d, 0x9a, 0x94, 0xfe, 0x5c, 0x4d, 0x79, 0x7c, - 0x3b, 0x87, 0xea, 0x7e, 0x9d, 0xc1, 0xa3, 0x2b, 0xaf, 0x76, 0xbf, 0x0e, - 0x6d, 0x36, 0xec, 0x07, 0x8f, 0x76, 0xe4, 0xd5, 0x6e, 0xf2, 0xb4, 0x70, - 0xe8, 0xb6, 0x41, 0x2b, 0xc3, 0x16, 0x5f, 0x2a, 0x53, 0x9f, 0xc1, 0xa1, - 0x23, 0x2f, 0xbf, 0xdb, 0xd2, 0xf5, 0x6d, 0x9d, 0xbc, 0x83, 0x78, 0x40, - 0x51, 0x4b, 0xde, 0x73, 0xd4, 0x3d, 0x38, 0x79, 0x12, 0xf2, 0x76, 0x9b, - 0x26, 0xe3, 0xbd, 0x8f, 0x52, 0xa8, 0xad, 0x58, 0x64, 0xb0, 0xe2, 0x69, - 0x4d, 0x2e, 0xaf, 0xfa, 0x34, 0x66, 0xbe, 0xc7, 0xf0, 0x8d, 0xb8, 0x55, - 0x24, 0x7f, 0xf0, 0x86, 0xf8, 0x6f, 0xf3, 0x5d, 0x11, 0x2f, 0x3d, 0x9c, - 0xc8, 0x60, 0x81, 0x45, 0xf4, 0xf7, 0x6d, 0x6f, 0x35, 0xe9, 0xff, 0x69, - 0xcd, 0x5a, 0x79, 0x39, 0x77, 0x78, 0x72, 0xf9, 0x42, 0x9f, 0x11, 0x12, - 0x12, 0x60, 0xb3, 0x6d, 0xdd, 0xe5, 0xd5, 0x47, 0xc5, 0x80, 0x65, 0x9f, - 0xa6, 0xd3, 0xe9, 0x25, 0x74, 0x40, 0xaf, 0x02, 0x5f, 0x90, 0xa7, 0xc2, - 0x12, 0x25, 0xff, 0x19, 0x04, 0xc1, 0x65, 0x97, 0x15, 0xc2, 0xde, 0x04, - 0xf2, 0x6d, 0x65, 0x75, 0xcf, 0xc0, 0x29, 0x10, 0xa1, 0xb8, 0xeb, 0xae, - 0xc5, 0xed, 0xe8, 0x37, 0x02, 0x71, 0xb2, 0x8b, 0x12, 0x65, 0xd7, 0xcd, - 0xf9, 0xc3, 0x89, 0x58, 0x8a, 0x5c, 0x78, 0x9e, 0xb7, 0x18, 0x8f, 0xc7, - 0x5a, 0x09, 0x51, 0x5d, 0x2c, 0x78, 0x62, 0xbd, 0x5e, 0x22, 0xdf, 0x68, - 0x4e, 0xc0, 0x5b, 0x3c, 0xff, 0x9b, 0x45, 0xb8, 0xc6, 0xfe, 0xef, 0xf8, - 0xf8, 0xf8, 0x41, 0x75, 0x13, 0xd0, 0x4f, 0x8d, 0xfb, 0xdf, 0x39, 0x0c, - 0xe0, 0x24, 0x1a, 0xc0, 0x49, 0x34, 0x80, 0x93, 0x68, 0x00, 0x27, 0xd1, - 0x00, 0x4e, 0xa2, 0x01, 0x9c, 0x44, 0x03, 0x38, 0x89, 0x06, 0x70, 0x12, - 0x0d, 0x50, 0x27, 0xf1, 0x60, 0x0a, 0x44, 0xa6, 0x28, 0x4a, 0xe4, 0xf2, - 0x6c, 0xde, 0xc8, 0x64, 0x2d, 0x5c, 0xa2, 0x93, 0xe7, 0x70, 0xec, 0xf8, - 0x06, 0x48, 0x19, 0x41, 0x87, 0x23, 0xf2, 0x01, 0xeb, 0x00, 0x00, 0x00, - 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 -}; - -unsigned char SaveButton_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, - 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x11, 0xf2, 0xad, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x05, 0x40, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x8d, - 0x71, 0xdb, 0x36, 0x14, 0xc7, 0xdf, 0x23, 0x25, 0x51, 0x3a, 0xfb, 0xae, - 0xca, 0x04, 0xe1, 0x06, 0x51, 0x27, 0xa8, 0x3a, 0x41, 0xdc, 0x09, 0x6a, - 0x4f, 0xd0, 0x74, 0x82, 0x38, 0x13, 0x38, 0x99, 0xc0, 0xea, 0x04, 0x76, - 0x27, 0xb0, 0x32, 0x41, 0x9d, 0x09, 0xc2, 0x4c, 0x60, 0xe6, 0xce, 0xb6, - 0x48, 0xca, 0xe4, 0xeb, 0x83, 0x2c, 0x5f, 0x48, 0x48, 0x0a, 0x40, 0x81, - 0xa4, 0x29, 0x19, 0xbf, 0x3b, 0x25, 0x26, 0x45, 0x10, 0xe0, 0x5f, 0xf8, - 0x7a, 0x0f, 0x8f, 0x00, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0x62, 0xb1, - 0xbc, 0x44, 0x10, 0x2a, 0xe2, 0xf6, 0x36, 0x19, 0xb9, 0x2e, 0xf0, 0x07, - 0xdf, 0x10, 0xd1, 0x90, 0x10, 0x7d, 0x20, 0xf2, 0x73, 0x97, 0x0c, 0x97, - 0x9f, 0x26, 0x09, 0x11, 0x21, 0xe0, 0x87, 0xfc, 0xd8, 0xeb, 0xf5, 0xfe, - 0x81, 0x1a, 0x30, 0x12, 0x70, 0x36, 0x9b, 0x8f, 0x59, 0xb4, 0xb7, 0x19, - 0xd1, 0x31, 0x34, 0x2f, 0x4e, 0x49, 0x28, 0xa0, 0x2c, 0xfb, 0x7d, 0x30, - 0x18, 0x04, 0x50, 0x21, 0x5b, 0x09, 0x38, 0x9b, 0xcd, 0x7c, 0x74, 0x3b, - 0xe7, 0x5c, 0xc3, 0xc6, 0xb0, 0x53, 0x54, 0x2f, 0x62, 0x69, 0x01, 0xe3, - 0x38, 0x3e, 0x22, 0xc0, 0x73, 0x68, 0x7d, 0x8d, 0xdb, 0x44, 0xb5, 0x22, - 0x96, 0x12, 0x70, 0x29, 0xde, 0xc5, 0x86, 0xaf, 0x43, 0x2e, 0xdc, 0x14, - 0xc1, 0xb9, 0x46, 0xc4, 0x00, 0x91, 0x02, 0xbe, 0xfe, 0xfb, 0xc1, 0xc1, - 0xc1, 0xcd, 0xf2, 0xfb, 0xef, 0x7c, 0x3e, 0x84, 0x06, 0x59, 0xb4, 0x14, - 0xc7, 0x39, 0xe3, 0xc7, 0x3c, 0x2a, 0x7e, 0x53, 0x4f, 0x73, 0x56, 0x16, - 0x26, 0x8a, 0x93, 0x1b, 0xfe, 0x50, 0xe1, 0x13, 0x25, 0x57, 0xf3, 0xf9, - 0xfc, 0x37, 0x68, 0x31, 0xb3, 0x38, 0x9e, 0xac, 0x94, 0x3b, 0x8e, 0xbf, - 0x8a, 0x67, 0x82, 0xa6, 0x88, 0x93, 0xe4, 0x7c, 0x55, 0xbc, 0xe8, 0x2f, - 0xd8, 0x11, 0x9e, 0x55, 0x44, 0x31, 0xda, 0xca, 0x99, 0x73, 0xf3, 0x7c, - 0x0f, 0x3b, 0xc6, 0xb3, 0x89, 0xb8, 0x52, 0xfb, 0xb8, 0xd9, 0xc2, 0x8e, - 0xf2, 0x2c, 0x22, 0x72, 0x26, 0x5f, 0xf3, 0x19, 0xb6, 0xbd, 0xcf, 0x53, - 0xd1, 0xa8, 0x88, 0x49, 0x92, 0x8c, 0xa4, 0xcc, 0x6e, 0x60, 0x0f, 0xa8, - 0x4a, 0x44, 0x47, 0x75, 0x01, 0x91, 0xe3, 0x4b, 0x27, 0xa6, 0xb0, 0x07, - 0x0c, 0x3c, 0xef, 0x98, 0x80, 0x24, 0xf3, 0x0e, 0xc5, 0xb4, 0xe7, 0xaa, - 0x8c, 0x88, 0x4a, 0x01, 0x59, 0xb1, 0x37, 0x85, 0x2c, 0xd0, 0xb9, 0x86, - 0x3d, 0xa1, 0x0a, 0x11, 0x35, 0x04, 0x84, 0x51, 0xe1, 0xf6, 0x3c, 0x49, - 0x86, 0x3d, 0x62, 0x93, 0x88, 0x8e, 0xeb, 0x5e, 0x08, 0xa7, 0x88, 0x2a, - 0xbd, 0xba, 0x09, 0x63, 0xd1, 0x64, 0x13, 0x16, 0x06, 0xec, 0x19, 0xeb, - 0x44, 0x24, 0x82, 0x51, 0x92, 0x3c, 0x28, 0xe7, 0xb9, 0x4a, 0x01, 0x51, - 0xb2, 0x79, 0x85, 0x79, 0x06, 0x7b, 0xc8, 0x5a, 0x11, 0x51, 0xed, 0x2c, - 0x51, 0xda, 0xc2, 0x62, 0x0a, 0xc3, 0xff, 0xf9, 0x4f, 0xc7, 0x5e, 0xaf, - 0xeb, 0x73, 0x33, 0xfe, 0xa6, 0x4a, 0x27, 0xaa, 0x7f, 0x14, 0xcd, 0x8f, - 0xc0, 0x18, 0x0c, 0x06, 0x83, 0xee, 0x14, 0x1a, 0x40, 0x94, 0x39, 0x4e, - 0xe6, 0xf9, 0x59, 0x46, 0xd8, 0xf7, 0x7a, 0xaf, 0x7e, 0x96, 0xa6, 0x03, - 0x35, 0x20, 0x9c, 0x0e, 0x5c, 0x90, 0x0b, 0xd4, 0xe9, 0x61, 0x95, 0x10, - 0x44, 0x49, 0xf2, 0xb1, 0xdf, 0xeb, 0xfd, 0x0d, 0x35, 0x23, 0x9c, 0x1d, - 0x5c, 0x61, 0xf2, 0xa7, 0xcc, 0xfb, 0x40, 0xc8, 0xd5, 0xbe, 0x65, 0x26, - 0xca, 0xda, 0xc7, 0x57, 0xbd, 0x85, 0x2a, 0x21, 0x78, 0x07, 0x2d, 0xa5, - 0x92, 0x3a, 0xb2, 0x4a, 0xe5, 0x23, 0x75, 0x6b, 0xa7, 0x4e, 0xb5, 0x34, - 0x61, 0xcf, 0xeb, 0x7e, 0x98, 0xcd, 0x92, 0x6f, 0x8e, 0x03, 0xc6, 0x26, - 0x9f, 0x68, 0x56, 0x69, 0xfa, 0xf0, 0x09, 0x5a, 0x8a, 0xce, 0x20, 0x42, - 0xf9, 0x63, 0xee, 0x54, 0x2b, 0x5b, 0x88, 0x6a, 0x23, 0x65, 0x9f, 0xb7, - 0xa6, 0x26, 0xfc, 0x72, 0xb0, 0x02, 0x1a, 0x62, 0x05, 0x34, 0xc4, 0x0a, - 0x68, 0x88, 0x15, 0xd0, 0x10, 0x2b, 0xa0, 0x21, 0x56, 0x40, 0x43, 0xac, - 0x80, 0x86, 0x58, 0x01, 0x0d, 0xb1, 0x02, 0x1a, 0x62, 0x05, 0x34, 0xc4, - 0x0a, 0x68, 0x88, 0x15, 0xd0, 0x10, 0x2b, 0xa0, 0x21, 0x56, 0x40, 0x43, - 0xac, 0x80, 0x86, 0x58, 0x01, 0x0d, 0xb1, 0x02, 0x1a, 0x52, 0xcb, 0x9a, - 0xc8, 0x26, 0x16, 0xeb, 0xae, 0xf1, 0xfc, 0x4f, 0x44, 0x18, 0xf1, 0x62, - 0xc2, 0x88, 0x57, 0xff, 0x9f, 0x96, 0x0d, 0xfd, 0x12, 0xb7, 0x09, 0x38, - 0x7d, 0x48, 0x80, 0x21, 0xff, 0xfa, 0xd7, 0x44, 0xd9, 0xe7, 0x5e, 0xaf, - 0x37, 0x6d, 0x3a, 0xfe, 0xfa, 0x89, 0x46, 0xd6, 0x44, 0x1a, 0x78, 0x2d, - 0x82, 0x05, 0xa5, 0x4f, 0x03, 0xcf, 0x3b, 0x05, 0x43, 0x5a, 0xb7, 0x26, - 0xc2, 0xe2, 0x1d, 0xa3, 0xe3, 0xfe, 0x57, 0xf3, 0x3b, 0x25, 0x43, 0x04, - 0x7c, 0xdf, 0x78, 0xe0, 0x38, 0xd4, 0x2c, 0xa0, 0x88, 0x50, 0x60, 0xf1, - 0x1a, 0x7c, 0xa7, 0xe4, 0x31, 0x34, 0x4d, 0x27, 0xaa, 0xaa, 0x2a, 0x6a, - 0xeb, 0x03, 0x45, 0x4d, 0xe0, 0x7e, 0xea, 0x6c, 0xe5, 0x0b, 0x82, 0x29, - 0xff, 0x7b, 0xd9, 0xe9, 0x38, 0x81, 0xeb, 0xba, 0x8b, 0x05, 0x73, 0xbd, - 0x68, 0x87, 0x65, 0x72, 0xa2, 0xd7, 0x77, 0x77, 0x77, 0xaf, 0xfa, 0xfd, - 0xfe, 0xeb, 0x2c, 0xa3, 0x71, 0x46, 0x24, 0xe2, 0x6f, 0xfc, 0x1f, 0x57, - 0xa0, 0x2f, 0x62, 0xba, 0xf9, 0x8f, 0x3f, 0xa0, 0x0d, 0xc8, 0xef, 0x86, - 0xe8, 0xfe, 0xba, 0x4d, 0xbd, 0x16, 0x21, 0xca, 0xb3, 0x2e, 0x5c, 0x97, - 0x7f, 0xc0, 0x31, 0x6c, 0x81, 0x7c, 0x1f, 0xd5, 0xf5, 0x3a, 0x4d, 0x58, - 0x1e, 0xdd, 0x7e, 0x01, 0x0d, 0x78, 0x84, 0x1d, 0xe7, 0x8f, 0x11, 0xe8, - 0x94, 0x6b, 0x4d, 0xe5, 0x11, 0x06, 0x62, 0xf4, 0x15, 0xa1, 0x69, 0x9c, - 0xc1, 0x34, 0x7f, 0xde, 0x75, 0x3b, 0xa5, 0xe3, 0x73, 0xd6, 0xf4, 0x9f, - 0x81, 0x2a, 0x4d, 0x2d, 0x7d, 0xa0, 0x08, 0x4c, 0x87, 0xe2, 0xd4, 0x24, - 0xf4, 0x3c, 0xef, 0x03, 0xd4, 0x08, 0xa5, 0x69, 0xe1, 0xfe, 0xcb, 0xa6, - 0x5d, 0x3b, 0xa5, 0x05, 0x14, 0xfd, 0x8f, 0xea, 0x9a, 0xd5, 0xc0, 0xf4, - 0xfa, 0x83, 0x83, 0xb8, 0x76, 0xcb, 0x79, 0xf8, 0x50, 0x12, 0xee, 0x93, - 0xe5, 0xee, 0x49, 0x39, 0xb7, 0x54, 0x0b, 0x28, 0xc5, 0x44, 0x73, 0x4d, - 0xd2, 0x68, 0xc2, 0xc5, 0xc0, 0x74, 0xc7, 0xc1, 0xda, 0x05, 0x5c, 0x4e, - 0xa4, 0x83, 0xfc, 0x39, 0x31, 0xe0, 0x40, 0x09, 0xd2, 0x14, 0x8b, 0x02, - 0x52, 0x05, 0x02, 0x22, 0x91, 0x54, 0x28, 0xf4, 0x95, 0x69, 0xa4, 0xb8, - 0x6a, 0xd2, 0x28, 0x48, 0x15, 0xc8, 0xd6, 0x88, 0x4e, 0x6b, 0x29, 0x52, - 0x78, 0xc3, 0x5e, 0x1c, 0x57, 0x20, 0xa0, 0x54, 0x28, 0x22, 0x39, 0x93, - 0x35, 0xc5, 0x90, 0x46, 0xea, 0xa6, 0x22, 0xfb, 0x49, 0x6a, 0x72, 0x7a, - 0xad, 0xe5, 0x07, 0xdc, 0x52, 0x0a, 0x35, 0x56, 0xe7, 0x95, 0x0e, 0xa5, - 0x80, 0x69, 0x4a, 0x5f, 0xf2, 0xc7, 0x6c, 0x7b, 0x8e, 0x60, 0x7f, 0x91, - 0x9e, 0x0d, 0xcd, 0x05, 0x74, 0x5d, 0x69, 0x00, 0x40, 0x1c, 0x43, 0x4b, - 0xd9, 0xa6, 0xbb, 0x29, 0x5c, 0x0f, 0x45, 0x73, 0x73, 0x3e, 0x8f, 0x94, - 0x13, 0x7c, 0xa5, 0x80, 0xec, 0xe9, 0x10, 0x02, 0xe6, 0x9b, 0xc6, 0x70, - 0xdb, 0x49, 0x6a, 0x9b, 0x11, 0xaf, 0xf4, 0x42, 0xc1, 0xe4, 0xa4, 0xe0, - 0xf0, 0xf0, 0xd0, 0xbc, 0x06, 0x2e, 0x2e, 0x42, 0x9c, 0xe4, 0x8f, 0xd1, - 0x75, 0x77, 0xee, 0x5d, 0x61, 0x15, 0xe8, 0x42, 0xe1, 0x99, 0xd8, 0x39, - 0x31, 0xd5, 0x49, 0xa7, 0x25, 0x60, 0x9a, 0x3e, 0xfc, 0x5b, 0x38, 0xc1, - 0x56, 0xc6, 0xfd, 0x7d, 0xd4, 0xda, 0xc8, 0xf9, 0xb2, 0xb0, 0x29, 0x78, - 0x2a, 0x7b, 0x8b, 0x78, 0x40, 0x99, 0xe8, 0xa4, 0xd5, 0x12, 0x70, 0x30, - 0x18, 0x4c, 0x65, 0x53, 0xc9, 0x71, 0x9d, 0xb3, 0x45, 0xc6, 0x3b, 0xce, - 0x7d, 0x14, 0xbd, 0x13, 0xae, 0xb0, 0xfc, 0x39, 0x76, 0x00, 0x4e, 0xba, - 0xdd, 0xee, 0x67, 0x9d, 0xf4, 0xda, 0x96, 0x08, 0x9b, 0x4a, 0x27, 0x20, - 0x4d, 0x13, 0x16, 0x3e, 0xb8, 0x64, 0x7e, 0xb5, 0xec, 0x3f, 0x76, 0x8a, - 0xc5, 0x36, 0x06, 0x5c, 0x76, 0x07, 0x1d, 0xd9, 0x63, 0x14, 0x66, 0x59, - 0xaa, 0x6d, 0x76, 0x6a, 0xbb, 0xb3, 0xc4, 0x16, 0x21, 0xec, 0xdf, 0x3b, - 0x59, 0xd9, 0xf6, 0x84, 0xab, 0x3e, 0x3a, 0x20, 0xf6, 0x54, 0x60, 0x71, - 0x71, 0x8a, 0xc2, 0xcd, 0x8e, 0x3c, 0x57, 0x2c, 0xf8, 0x31, 0xb2, 0x67, - 0xda, 0x63, 0x26, 0x1b, 0x3e, 0x6e, 0x49, 0x25, 0x2c, 0x0c, 0xf2, 0xc5, - 0x3c, 0x8f, 0x16, 0x53, 0x15, 0xd1, 0x5c, 0x79, 0xae, 0xba, 0xc6, 0xd7, - 0xc2, 0x4e, 0x8f, 0x93, 0x7e, 0x89, 0xed, 0x50, 0x5e, 0xe0, 0xc6, 0x3b, - 0x1b, 0x09, 0x85, 0x78, 0x3c, 0xf9, 0xbe, 0x2c, 0x93, 0xa8, 0xb4, 0x33, - 0x41, 0x64, 0x40, 0x59, 0xfa, 0x2b, 0x9b, 0x6b, 0x13, 0xd8, 0x17, 0xd8, - 0xc9, 0x2b, 0x9e, 0xa9, 0xac, 0x78, 0x02, 0xa3, 0x97, 0x66, 0xc4, 0xe6, - 0x13, 0x62, 0xe3, 0xb1, 0xa5, 0xef, 0xcf, 0x87, 0xdd, 0x22, 0x14, 0xd3, - 0x33, 0xae, 0x08, 0x97, 0xba, 0x03, 0xc6, 0x3a, 0x2a, 0xdc, 0xfe, 0xee, - 0x76, 0x24, 0xdc, 0xec, 0x6c, 0xfa, 0x8d, 0x08, 0xd8, 0xdc, 0x23, 0x1c, - 0x0a, 0xa7, 0x02, 0xc1, 0x56, 0x4b, 0x97, 0xa6, 0x84, 0x90, 0x1f, 0xf0, - 0x68, 0xb1, 0x14, 0x1a, 0x3c, 0xda, 0xf5, 0x78, 0x9d, 0x24, 0xd1, 0x17, - 0x9d, 0x49, 0xb2, 0xc5, 0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0xb2, - 0x89, 0xff, 0x01, 0xb5, 0x56, 0x6a, 0xf0, 0xc1, 0xda, 0x1a, 0x44, 0x00, - 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 -}; - -inline constexpr size_t PauseButton_png_len = sizeof(PauseButton_png) /sizeof(PauseButton_png[0]); -inline constexpr size_t PlayButton_png_len = sizeof(PlayButton_png) /sizeof(PlayButton_png[0]); -inline constexpr size_t ResetButton_png_len = sizeof(ResetButton_png) /sizeof(ResetButton_png[0]); -inline constexpr size_t SaveButton_png_len = sizeof(SaveButton_png) /sizeof(SaveButton_png[0]); - -#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index c84809e2..a017a00d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,6 @@ #include "settingspopup.hpp" #include "style.hpp" #include -#include "imagesHeaderToolbar.hpp" int main() { const std::string configpath = "config/config.json"; @@ -14,14 +13,10 @@ int main() { load_json_file(load_json(config, "languagepath") + load_json(config, "language") + ".json"); // local variables - auto now = std::chrono::system_clock::now(); - std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); - std::tm now_tm = *std::gmtime(&now_time_t); double xmax_paused{0}; bool open_settings = false; bool open_generate_training_data = false; static bool flagPaused = true; - bool flagDataNotSaved = true; bool Development = false; bool flagInitState = true; @@ -51,6 +46,8 @@ int main() { } ImGui::BeginChild("Left Side", {windowSize.x * .18f, 0.f}); + + // ############################################# Side Menu set_side_menu(config, flagPaused, open_settings, open_generate_training_data); // there're four "BeginChild"s, one as the left side @@ -60,172 +57,10 @@ int main() { ImGui::BeginChild("Right Side", {0.f, 0.f}); if (sampler.has_value() && !flagPaused) sampler->copyOut(captureData); - ImGui::BeginChild("Buttonstripe", {-1.f, windowSize.y * .1f}, false, - ImGuiWindowFlags_NoScrollbar); - // ############################ Popup Save - if (ImGui::BeginPopupModal(appLanguage[Key::Save_Recorded_Data], nullptr, - ImGuiWindowFlags_AlwaysAutoResize)) { - ImGui::SetItemDefaultFocus(); - saves_popup(config, language, captureData, now, now_time_t, now_tm, - flagDataNotSaved); - ImGui::EndPopup(); - } - // ############################ Popup Reset - if (ImGui::BeginPopupModal(appLanguage[Key::Reset_q], nullptr, - ImGuiWindowFlags_AlwaysAutoResize)) { - ImGui::SetItemDefaultFocus(); - ImGui::Text(appLanguage[Key::Measure_not_saved]); - if (ImGui::Button(appLanguage[Key::Continue_del])) { - rstSettings(); - ImGui::CloseCurrentPopup(); - } - ImGui::SameLine(); - if (ImGui::Button(appLanguage[Key::Back])) - ImGui::CloseCurrentPopup(); - ImGui::EndPopup(); - } - - // Initializing all variables for images in the toolbar - static constexpr size_t size{4}; // number of pictures - int PngRenderedCnt = 0; - static bool loaded_png[size]{}; - static int image_height[size]; - static int image_width[size]; - static GLuint image_texture[size]; - static constexpr float iconsSacle{0.8f}; - // The order matters because of the counter for the images !!! - static const unsigned char *imagesNames[] = { - PlayButton_png, PauseButton_png, SaveButton_png, ResetButton_png}; - static const unsigned int imagesLen[] = { - PlayButton_png_len, PauseButton_png_len, SaveButton_png_len, - ResetButton_png_len}; - // Load the images for the SideBarMenu - for (int i = 0; i < size; i++) - if (!loaded_png[i]) { - if (LoadTextureFromHeader(imagesNames[i], imagesLen[i], - &image_texture[i], &image_width[i], - &image_height[i])) - loaded_png[i] = true; - else - fmt::println("Error Loading Png #{}.", i); - } - - // ImGui::SetCursorPosY(windowSize.y * 0.05f); - - if (flagPaused) { - // ######################## Buttonstripe - if (!devices.empty()) - if (!sampler.has_value()) { - PngRenderedCnt = 0; - set_button_style_to(config, "start"); // Start Button - if (ImGui::ImageButton( - appLanguage[Key::Start], - (void *)(intptr_t)image_texture[PngRenderedCnt], - ImVec2(image_width[PngRenderedCnt] * iconsSacle, - image_height[PngRenderedCnt] * iconsSacle))) { - sampler.emplace(deviceManager, std::move(devices)); - flagPaused = false; - flagDataNotSaved = true; - for (auto &device : devices) { - device->send(Omniscope::Start{}); - } - } - ImGui::PopStyleColor(3); - } - // set_button_style_to(config, "standart"); - } else { - // ############################ Stop Button - PngRenderedCnt = 1; - set_button_style_to(config, "stop"); - if (ImGui::ImageButton( - appLanguage[Key::Stop], - (void *)(intptr_t)image_texture[PngRenderedCnt], - ImVec2(image_width[PngRenderedCnt] * iconsSacle, - image_height[PngRenderedCnt] * iconsSacle))) { - flagPaused = true; - for (auto &device : sampler->sampleDevices) { - device.first->send(Omniscope::Stop{}); - } - } - ImGui::PopStyleColor(3); - } - if (flagPaused) { - // Start/reset the measurement when the measurement is paused, - // followed by a query as to whether the old data should be saved - if (sampler.has_value()) { - ImGui::SameLine(); - PngRenderedCnt = 0; - set_button_style_to(config, "start"); - if (ImGui::ImageButton( - appLanguage[Key::Continue], - (void *)(intptr_t)image_texture[PngRenderedCnt], - ImVec2(image_width[PngRenderedCnt] * iconsSacle, - image_height[PngRenderedCnt] * iconsSacle))) { - flagPaused = false; - flagDataNotSaved = true; - for (auto &device : sampler->sampleDevices) { - device.first->send(Omniscope::Start{}); - } - } - ImGui::PopStyleColor(3); - ImGui::SameLine(); - PngRenderedCnt = 3; - - set_button_style_to(config, "stop"); - if (ImGui::ImageButton( - appLanguage[Key::Reset], - (void *)(intptr_t)image_texture[PngRenderedCnt], - ImVec2(image_width[PngRenderedCnt] * iconsSacle, - image_height[PngRenderedCnt] * iconsSacle))) { - if (flagDataNotSaved) { - ImGui::OpenPopup(appLanguage[Key::Reset_q]); - for (auto &device : sampler->sampleDevices) { - device.first->send(Omniscope::Stop{}); - } - } else { - rstSettings(); - flagPaused = true; - } - } - ImGui::PopStyleColor(3); - } - ImGui::SameLine(); - - // gray out "Save" button when pop-up is open - const bool pushStyle = - ImGui::IsPopupOpen(appLanguage[Key::Save_Recorded_Data]); - - if (pushStyle) - ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); - PngRenderedCnt = 2; - if (ImGui::ImageButton( - appLanguage[Key::Save], - (void *)(intptr_t)image_texture[PngRenderedCnt], - ImVec2(image_width[PngRenderedCnt] * iconsSacle, - image_height[PngRenderedCnt] * iconsSacle))) { - if (sampler.has_value()) - ImGui::OpenPopup(appLanguage[Key::Save_Recorded_Data]); - else - ImGui::OpenPopup(appLanguage[Key::Save_warning], - ImGuiPopupFlags_NoOpenOverExistingPopup); - } - info_popup(appLanguage[Key::Save_warning], - appLanguage[Key::No_dvc_available]); - - if (pushStyle) - ImGui::PopStyleColor(); - } else { - ImGui::SameLine(); - ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); - PngRenderedCnt = 2; - ImGui::ImageButton(appLanguage[Key::Save], - (void *)(intptr_t)image_texture[PngRenderedCnt], - ImVec2(image_width[PngRenderedCnt] * iconsSacle, - image_height[PngRenderedCnt] * iconsSacle)); - ImGui::PopStyleColor(); - } - ImGui::EndChild(); // end child "Buttonstripe" + // ######################################### Toolbar + set_toolbar(config, language, flagPaused); + // ############################ Settings Menu static int title = 0; static std::vector titles(2); // two languages diff --git a/src/style.cpp b/src/style.cpp index 58d3a32b..0fc2cf68 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -10,6 +10,7 @@ #include #include #include +#include "popups.hpp" void SetupImGuiStyle(bool bStyleDark_, float alpha_, const nlohmann::json &config) { @@ -335,6 +336,184 @@ void set_side_menu(const nlohmann::json &config, bool &flagPaused, .c_str()); } +void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, bool &flagPaused){ + + // variable declaration + auto now = std::chrono::system_clock::now(); + std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); + std::tm now_tm = *std::gmtime(&now_time_t); + auto windowSize{ImGui::GetIO().DisplaySize}; + bool flagDataNotSaved = true; + + // begin Toolbar ############################################ + ImGui::BeginChild("Buttonstripe", {-1.f, windowSize.y * .1f}, false, + ImGuiWindowFlags_NoScrollbar); + // ############################ Popup Save + if (ImGui::BeginPopupModal(appLanguage[Key::Save_Recorded_Data], nullptr, + ImGuiWindowFlags_AlwaysAutoResize)) { + ImGui::SetItemDefaultFocus(); + saves_popup(config, language, captureData, now, now_time_t, now_tm, + flagDataNotSaved); + ImGui::EndPopup(); + } + // ############################ Popup Reset + if (ImGui::BeginPopupModal(appLanguage[Key::Reset_q], nullptr, + ImGuiWindowFlags_AlwaysAutoResize)) { + ImGui::SetItemDefaultFocus(); + ImGui::Text(appLanguage[Key::Measure_not_saved]); + if (ImGui::Button(appLanguage[Key::Continue_del])) { + rstSettings(); + ImGui::CloseCurrentPopup(); + } + ImGui::SameLine(); + if (ImGui::Button(appLanguage[Key::Back])) + ImGui::CloseCurrentPopup(); + ImGui::EndPopup(); + } + + // Initializing all variables for images in the toolbar + static constexpr size_t size{4}; // number of pictures + int PngRenderedCnt = 0; + static bool loaded_png[size]{}; + static int image_height[size]; + static int image_width[size]; + static GLuint image_texture[size]; + static constexpr float iconsSacle{0.8f}; + + // The order matters because of the counter for the images !!! + static const unsigned char *imagesNames[] = { + PlayButton_png, PauseButton_png, SaveButton_png, ResetButton_png}; + static const unsigned int imagesLen[] = { + PlayButton_png_len, PauseButton_png_len, SaveButton_png_len, + ResetButton_png_len}; + // Load the images for the SideBarMenu + for (int i = 0; i < size; i++) + if (!loaded_png[i]) { + if (LoadTextureFromHeader(imagesNames[i], imagesLen[i], + &image_texture[i], &image_width[i], + &image_height[i])) + loaded_png[i] = true; + else + fmt::println("Error Loading Png #{}.", i); + } + + // ImGui::SetCursorPosY(windowSize.y * 0.05f); + + if (flagPaused) { + // ######################## Buttonstripe + if (!devices.empty()) + if (!sampler.has_value()) { + PngRenderedCnt = 0; + set_button_style_to(config, "start"); // Start Button + if (ImGui::ImageButton( + appLanguage[Key::Start], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { + sampler.emplace(deviceManager, std::move(devices)); + flagPaused = false; + flagDataNotSaved = true; + for (auto &device : devices) { + device->send(Omniscope::Start{}); + } + } + ImGui::PopStyleColor(3); + } + // set_button_style_to(config, "standart"); + } else { + // ############################ Stop Button + PngRenderedCnt = 1; + set_button_style_to(config, "stop"); + if (ImGui::ImageButton( + appLanguage[Key::Stop], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { + flagPaused = true; + for (auto &device : sampler->sampleDevices) { + device.first->send(Omniscope::Stop{}); + } + } + ImGui::PopStyleColor(3); + } + if (flagPaused) { + // Start/reset the measurement when the measurement is paused, + // followed by a query as to whether the old data should be saved + if (sampler.has_value()) { + ImGui::SameLine(); + PngRenderedCnt = 0; + set_button_style_to(config, "start"); + if (ImGui::ImageButton( + appLanguage[Key::Continue], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { + flagPaused = false; + flagDataNotSaved = true; + for (auto &device : sampler->sampleDevices) { + device.first->send(Omniscope::Start{}); + } + } + ImGui::PopStyleColor(3); + ImGui::SameLine(); + PngRenderedCnt = 3; + + set_button_style_to(config, "stop"); + if (ImGui::ImageButton( + appLanguage[Key::Reset], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { + if (flagDataNotSaved) { + ImGui::OpenPopup(appLanguage[Key::Reset_q]); + for (auto &device : sampler->sampleDevices) { + device.first->send(Omniscope::Stop{}); + } + } else { + rstSettings(); + flagPaused = true; + } + } + ImGui::PopStyleColor(3); + } + ImGui::SameLine(); + + // gray out "Save" button when pop-up is open + const bool pushStyle = + ImGui::IsPopupOpen(appLanguage[Key::Save_Recorded_Data]); + + if (pushStyle) + ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); + PngRenderedCnt = 2; + if (ImGui::ImageButton( + appLanguage[Key::Save], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { + if (sampler.has_value()) + ImGui::OpenPopup(appLanguage[Key::Save_Recorded_Data]); + else + ImGui::OpenPopup(appLanguage[Key::Save_warning], + ImGuiPopupFlags_NoOpenOverExistingPopup); + } + info_popup(appLanguage[Key::Save_warning], + appLanguage[Key::No_dvc_available]); + + if (pushStyle) + ImGui::PopStyleColor(); + } else { + ImGui::SameLine(); + ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); + PngRenderedCnt = 2; + ImGui::ImageButton(appLanguage[Key::Save], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle)); + ImGui::PopStyleColor(); + } + ImGui::EndChild(); // end child "Buttonstripe" +} + // For Development void PopupStyleEditor() { ImGuiStyle &style = ImGui::GetStyle(); diff --git a/src/style.hpp b/src/style.hpp index 8eb5e832..191b3bcc 100644 --- a/src/style.hpp +++ b/src/style.hpp @@ -17,6 +17,7 @@ void SetupImGuiStyle(bool, float, const nlohmann::json &); void set_button_style_to(const nlohmann::json &, const std::string &); bool LoadTextureFromHeader(unsigned char const *, int, GLuint *, int *, int *); void set_side_menu(const nlohmann::json &, bool &, bool &, bool &); +void set_toolbar(const nlohmann::json &, const nlohmann::json &, bool &); void PopupStyleEditor(); From b1a11bb21a3a82370e384d809e14f6cca80fef78 Mon Sep 17 00:00:00 2001 From: akmaily Date: Tue, 28 May 2024 12:31:43 +0200 Subject: [PATCH 35/47] Deleted the unnecessary auto device --- src/style.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/style.cpp b/src/style.cpp index 0fc2cf68..079aa0a7 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -413,9 +413,6 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, b sampler.emplace(deviceManager, std::move(devices)); flagPaused = false; flagDataNotSaved = true; - for (auto &device : devices) { - device->send(Omniscope::Start{}); - } } ImGui::PopStyleColor(3); } From 462ed0dcaec25a7975d0be93917f88d578502daa Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Wed, 29 May 2024 13:01:23 +0330 Subject: [PATCH 36/47] keep loaded data after reset --- src/languages.hpp | 2 +- src/main.cpp | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/languages.hpp b/src/languages.hpp index da56b272..c3c11e68 100644 --- a/src/languages.hpp +++ b/src/languages.hpp @@ -239,7 +239,7 @@ inline const std::map germanLan{ {Key::FontSize, "Schriftgröße"}, {Key::SettingsText, "Legen sie hier ihre persönlichen Einstellungen fest"}, {Key::Saving, "speichern ..."}, - {Key::Load_file_Data, "Dateidaten laden"}}; + {Key::Load_file_Data, "Alte Daten laden"}}; inline auto appLanguage = englishLan; namespace fs = std::filesystem; diff --git a/src/main.cpp b/src/main.cpp index cfe74d2c..ca80bd00 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,6 +19,7 @@ int main() { bool flagDataNotSaved{true}, Development{false}, flagInitState{true}, loadedFileChkBx{false}, open_generate_training_data{false}, open_settings{false}; + std::optional id; // main loop auto render = [&]() { @@ -72,8 +73,7 @@ int main() { ImGui::Text(appLanguage[Key::Measure_not_saved]); if (ImGui::Button(appLanguage[Key::Continue_del])) { rstSettings(); - loadedFileName.clear(); - loadedFileChkBx = false; + id = load_file(loadedFileName); ImGui::CloseCurrentPopup(); } ImGui::SameLine(); @@ -121,8 +121,7 @@ int main() { ImGui::OpenPopup(appLanguage[Key::Reset_q]); else { rstSettings(); - loadedFileName.clear(); - loadedFileChkBx = false; + id = load_file(loadedFileName); flagPaused = true; } } @@ -213,7 +212,6 @@ int main() { ImGui::SameLine(); ImGui::Text(appLanguage[Key::Devices_found]); devicesList(); - static std::optional id; if (!loadedFileName.empty()) if (ImGui::Checkbox("##", &loadedFileChkBx)) if (loadedFileChkBx) From ee1cff338bee24f2797c1ef2268b9b0ebf47414e Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Mon, 3 Jun 2024 14:01:02 +0330 Subject: [PATCH 37/47] bug fix --- src/main.cpp | 6 ++++-- src/style.cpp | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index ca80bd00..5d2fe9b1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -73,7 +73,8 @@ int main() { ImGui::Text(appLanguage[Key::Measure_not_saved]); if (ImGui::Button(appLanguage[Key::Continue_del])) { rstSettings(); - id = load_file(loadedFileName); + if(loadedFileChkBx) + id = load_file(loadedFileName); ImGui::CloseCurrentPopup(); } ImGui::SameLine(); @@ -121,7 +122,8 @@ int main() { ImGui::OpenPopup(appLanguage[Key::Reset_q]); else { rstSettings(); - id = load_file(loadedFileName); + if (loadedFileChkBx) + id = load_file(loadedFileName); flagPaused = true; } } diff --git a/src/style.cpp b/src/style.cpp index 643ddda1..dfc266f4 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -355,13 +355,13 @@ load_file(fs::path &loadedFileName) { // load and display data from file size_t indx{2}; std::string first_line; std::getline(readfile, first_line); - std::istringstream ss{first_line}; + std::istringstream input{first_line}; constexpr size_t fieldsSz{6}; Omniscope::Id id; // extract input fields data from the first line for (size_t i = 0; i < fieldsSz; i++) { std::string substr; - std::getline(ss, substr, ','); + std::getline(input, substr, ','); if (i == 3) // fourth element (Type of scope) id.type = substr; if (i == 4) // fifth element (serial of scope) From fc6fa4bf87797129b521299a97a06a8861f91967 Mon Sep 17 00:00:00 2001 From: akmaily Date: Mon, 3 Jun 2024 21:49:53 +0200 Subject: [PATCH 38/47] made the variables static and deleted redundant devices connections --- src/style.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/style.cpp b/src/style.cpp index 079aa0a7..0f785d5e 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -339,11 +339,11 @@ void set_side_menu(const nlohmann::json &config, bool &flagPaused, void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, bool &flagPaused){ // variable declaration - auto now = std::chrono::system_clock::now(); - std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); - std::tm now_tm = *std::gmtime(&now_time_t); - auto windowSize{ImGui::GetIO().DisplaySize}; - bool flagDataNotSaved = true; + static auto now = std::chrono::system_clock::now(); + static std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); + static std::tm now_tm = *std::gmtime(&now_time_t); + static auto windowSize{ImGui::GetIO().DisplaySize}; + static bool flagDataNotSaved = true; // begin Toolbar ############################################ ImGui::BeginChild("Buttonstripe", {-1.f, windowSize.y * .1f}, false, @@ -463,9 +463,6 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, b image_height[PngRenderedCnt] * iconsSacle))) { if (flagDataNotSaved) { ImGui::OpenPopup(appLanguage[Key::Reset_q]); - for (auto &device : sampler->sampleDevices) { - device.first->send(Omniscope::Stop{}); - } } else { rstSettings(); flagPaused = true; From 0ad4805eede15b26e76771ffa97b3885a405ebe9 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Tue, 4 Jun 2024 10:22:45 +0330 Subject: [PATCH 39/47] reset button and code changes --- src/handler.cpp | 10 ++++++++-- src/handler.hpp | 3 ++- src/main.cpp | 31 +++++++++++++++++-------------- src/style.cpp | 23 +++++++++++------------ src/style.hpp | 8 +++----- 5 files changed, 41 insertions(+), 34 deletions(-) diff --git a/src/handler.cpp b/src/handler.cpp index 185ed814..9d78c6da 100644 --- a/src/handler.cpp +++ b/src/handler.cpp @@ -156,10 +156,16 @@ void set_inital_config(nlohmann::json &config) { config["text"]["active_language"] == "German" ? germanLan : englishLan; } -void rstSettings() { +void rstSettings(const dvcPair &loadedDvc) { sampler.reset(); devices.clear(); savedFileNames.clear(); deviceManager.clearDevices(); - captureData.clear(); + // erase all elements excpet loadedDvc + for (auto it = captureData.begin(); it != captureData.end();) { + if (it->first != loadedDvc.first) + it = captureData.erase(it); + else + ++it; + } } diff --git a/src/handler.hpp b/src/handler.hpp index 8be71ee9..a3950760 100644 --- a/src/handler.hpp +++ b/src/handler.hpp @@ -8,6 +8,7 @@ #include #include +using dvcPair = std::pair>>; // global variables inline OmniscopeDeviceManager deviceManager{}; inline std::vector> devices; @@ -23,6 +24,6 @@ void devicesList(); void set_config(const std::string &); void set_json(nlohmann::json &); void set_inital_config(nlohmann::json &); -void rstSettings(); +void rstSettings(const dvcPair&); #endif diff --git a/src/main.cpp b/src/main.cpp index 5d2fe9b1..30d5f4b3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,7 +19,7 @@ int main() { bool flagDataNotSaved{true}, Development{false}, flagInitState{true}, loadedFileChkBx{false}, open_generate_training_data{false}, open_settings{false}; - std::optional id; + dvcPair loadedDvc; // main loop auto render = [&]() { @@ -49,7 +49,7 @@ int main() { ImGui::BeginChild("Left Side", {windowSize.x * .18f, 0.f}); static fs::path loadedFileName; set_side_menu(config, open_settings, open_generate_training_data, - loadedFileName); + loadedFileName, loadedDvc); // there're four "BeginChild"s, one as the left side // and three on the right side ImGui::EndChild(); // end child "Left Side" @@ -72,9 +72,7 @@ int main() { ImGui::SetItemDefaultFocus(); ImGui::Text(appLanguage[Key::Measure_not_saved]); if (ImGui::Button(appLanguage[Key::Continue_del])) { - rstSettings(); - if(loadedFileChkBx) - id = load_file(loadedFileName); + rstSettings(loadedDvc); ImGui::CloseCurrentPopup(); } ImGui::SameLine(); @@ -121,9 +119,7 @@ int main() { if (flagDataNotSaved) ImGui::OpenPopup(appLanguage[Key::Reset_q]); else { - rstSettings(); - if (loadedFileChkBx) - id = load_file(loadedFileName); + rstSettings(loadedDvc); flagPaused = true; } } @@ -214,15 +210,22 @@ int main() { ImGui::SameLine(); ImGui::Text(appLanguage[Key::Devices_found]); devicesList(); - if (!loadedFileName.empty()) + if (loadedDvc.second.size()) { // if device was successfully loaded from file if (ImGui::Checkbox("##", &loadedFileChkBx)) if (loadedFileChkBx) - id = load_file(loadedFileName); - else if (id.has_value()) + captureData[loadedDvc.first] = loadedDvc.second; + else fmt::println("{} device erased from list.", - captureData.erase(id.value())); - ImGui::SameLine(); - ImGui::TextUnformatted(loadedFileName.filename().string().c_str()); + captureData.erase(loadedDvc.first)); + ImGui::SameLine(); + ImGui::TextUnformatted(loadedFileName.filename().string().c_str()); + ImGui::SameLine(); + if (ImGui::Button(appLanguage[Key::Reset])) { + captureData.erase(loadedDvc.first); + loadedDvc = {}; + loadedFileChkBx = false; + } + } ImGui::EndChild(); // end child "Devicelist" ImGui::EndChild(); // end child "Right Side" ImGui::End(); diff --git a/src/style.cpp b/src/style.cpp index dfc266f4..9e92a53f 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -243,8 +243,8 @@ bool LoadTextureFromHeader(unsigned char const *png_data, int png_data_len, } void set_side_menu(const nlohmann::json &config, bool &open_settings, - bool &open_generate_training_data, - fs::path &loadedFileName) { + bool &open_generate_training_data, fs::path &loadedFileName, + dvcPair &loadedDvc) { auto windowSize{ImGui::GetIO().DisplaySize}; // Initializing all variables for images @@ -299,6 +299,7 @@ void set_side_menu(const nlohmann::json &config, bool &open_settings, fileBrowser.Display(); if (fileBrowser.HasSelected()) { loadedFileName = fileBrowser.GetSelected(); + load_file(loadedFileName, loadedDvc); fileBrowser.ClearSelected(); } @@ -346,39 +347,37 @@ void set_side_menu(const nlohmann::json &config, bool &open_settings, .c_str()); } -std::optional -load_file(fs::path &loadedFileName) { // load and display data from file +void load_file(fs::path &loadedFileName, + dvcPair &loadedDvc) { // load and display data from file std::ifstream readfile(loadedFileName, std::ios::binary); if (!readfile.is_open()) fmt::println("Failed to open file {}", loadedFileName); else { - size_t indx{2}; std::string first_line; std::getline(readfile, first_line); std::istringstream input{first_line}; constexpr size_t fieldsSz{6}; - Omniscope::Id id; // extract input fields data from the first line for (size_t i = 0; i < fieldsSz; i++) { std::string substr; std::getline(input, substr, ','); if (i == 3) // fourth element (Type of scope) - id.type = substr; + loadedDvc.first.type = substr; if (i == 4) // fifth element (serial of scope) - id.serial = substr; + loadedDvc.first.serial = substr; } - while (!readfile.eof()) { + size_t indx{2}; // y_values start from line 2 of the file + while (!readfile.eof()) { // fill the vector of the values double value{}; readfile >> value; - captureData[id].emplace_back(indx++, value); + loadedDvc.second.emplace_back(indx++, value); static constexpr size_t bigNumber{10'000'000}; readfile.ignore(bigNumber, '\n'); // new line separator between elements } readfile.close(); // pop the extra last element - captureData[id].pop_back(); - return id; + loadedDvc.second.pop_back(); } } diff --git a/src/style.hpp b/src/style.hpp index e105e677..a9beaf02 100644 --- a/src/style.hpp +++ b/src/style.hpp @@ -16,14 +16,12 @@ inline constexpr ImVec4 normColStyle{0.1f, 0.1f, 0.1f, 1.f}; void SetupImGuiStyle(bool, float); void set_button_style_to(const nlohmann::json &, const std::string &); bool LoadTextureFromHeader(unsigned char const *, int, GLuint *, int *, int *); -void set_side_menu(const nlohmann::json &, bool &, bool &, fs::path &); -std::optional load_file(fs::path &loadedFileName); - +void set_side_menu(const nlohmann::json &, bool &, bool &, fs::path &, + dvcPair &); +void load_file(fs::path &loadedFileName, dvcPair&); void PopupStyleEditor(); - void PushPlotRegionColors(); void PopPlotRegionColors(); - void SetDeviceMenuStyle(); namespace ImGui { From 1c6217cbedf93812a507cc48176910ed9485afeb Mon Sep 17 00:00:00 2001 From: akmaily Date: Wed, 5 Jun 2024 10:38:38 +0200 Subject: [PATCH 40/47] Windowsize non static --- src/style.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/style.cpp b/src/style.cpp index 5a5017bb..9b7e5caf 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -354,7 +354,7 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, b static auto now = std::chrono::system_clock::now(); static std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); static std::tm now_tm = *std::gmtime(&now_time_t); - static auto windowSize{ImGui::GetIO().DisplaySize}; + auto windowSize{ImGui::GetIO().DisplaySize}; static bool flagDataNotSaved = true; // begin Toolbar ############################################ @@ -389,7 +389,7 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, b static int image_height[size]; static int image_width[size]; static GLuint image_texture[size]; - static constexpr float iconsSacle{0.8f}; + static constexpr float iconsSacle{0.8}; // The order matters because of the counter for the images !!! static const unsigned char *imagesNames[] = { From b7a7c21abb38c364797ad0ceab1e998718eb52cc Mon Sep 17 00:00:00 2001 From: akmaily Date: Wed, 5 Jun 2024 16:20:17 +0200 Subject: [PATCH 41/47] Quik final fixes --- src/main.cpp | 1 - src/style.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 4c35b940..3b115c3a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,4 +1,3 @@ - #include "popups.hpp" #include "settingspopup.hpp" #include "style.hpp" diff --git a/src/style.cpp b/src/style.cpp index 9b7e5caf..0236c18d 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -389,7 +389,7 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, b static int image_height[size]; static int image_width[size]; static GLuint image_texture[size]; - static constexpr float iconsSacle{0.8}; + float iconsSacle = 0.8f; // The order matters because of the counter for the images !!! static const unsigned char *imagesNames[] = { From 9a909cf2059153683b2fecc65b396f62608714e7 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Fri, 7 Jun 2024 11:40:44 +0330 Subject: [PATCH 42/47] loading files data step 2 implementation --- src/handler.cpp | 89 ++- src/handler.hpp | 6 +- src/imagesHeader.hpp | 1622 ++++++++++++++++++++++-------------------- src/languages.hpp | 15 +- src/main.cpp | 62 +- src/style.cpp | 341 ++++----- src/style.hpp | 9 +- 7 files changed, 1123 insertions(+), 1021 deletions(-) diff --git a/src/handler.cpp b/src/handler.cpp index 9d78c6da..0a68b877 100644 --- a/src/handler.cpp +++ b/src/handler.cpp @@ -1,7 +1,9 @@ -#include "handler.hpp" -#include "get_from_github.hpp" #include #include +#include "handler.hpp" +#include "get_from_github.hpp" +#include "../imgui-filebrowser/imfilebrowser.h" +#include "../imgui-stdlib/imgui_stdlib.h" void addPlots(const char *name, std::function axesSetup) { @@ -131,6 +133,83 @@ void devicesList() { doDevice(device, appLanguage[Key::Ready]); } +void load_files(decltype(captureData) &loadedDvcs, + std::map &Dvcs_filenames, bool& loadFile) { + static std::set loadedFileNames; + auto do_load = [&loadedDvcs, &Dvcs_filenames] { + pairDvc loadedDvc{}; + for (const auto &path : loadedFileNames) { + std::ifstream readfile(path, std::ios::binary); + if (!readfile.is_open()) + fmt::println("Failed to open file {}", path.string()); + else { + std::string first_line; + std::getline(readfile, first_line); + std::istringstream input{first_line}; + static constexpr size_t fieldsSz{6}; + // extract input fields data from the first line + for (size_t i = 0; i < fieldsSz; i++) { + std::string substr; + std::getline(input, substr, ','); + if (i == 3) // fourth element (Type of scope) + loadedDvc.first.type = substr; + if (i == 4) // fifth element (serial of scope) + loadedDvc.first.serial = substr; + } + size_t indx{2}; // y_values start from line 2 of the file + while (!readfile.eof()) { // fill the vector of the values + double value{}; + readfile >> value; + loadedDvc.second.emplace_back(indx++, value); + static constexpr size_t bigNumber{10'000'000}; + readfile.ignore(bigNumber, + '\n'); // new line separator between elements + } + readfile.close(); + // pop the extra last element + loadedDvc.second.pop_back(); + loadedDvcs.emplace(loadedDvc); + Dvcs_filenames.emplace(loadedDvc.first, path.filename().string()); + } + } + }; + + if (ImGui::BeginPopupModal(appLanguage[Key::Load_file_data], nullptr, + ImGuiWindowFlags_AlwaysAutoResize)) { + ImGui::SetItemDefaultFocus(); + static ImGui::FileBrowser fileBrowser; + static std::vector pathArr{""}; + for (auto& path : pathArr) { + ImGui::PushID(&path); + ImGui::InputTextWithHint("##", appLanguage[Key::Path], &path); + ImGui::SameLine(); + if (ImGui::Button(appLanguage[Key::Browse])) + fileBrowser.Open(); + fileBrowser.Display(); + if (fileBrowser.HasSelected()) { + loadedFileNames.emplace(fileBrowser.GetSelected()); // absolute path + path = fileBrowser.GetSelected().string(); + fileBrowser.ClearSelected(); + } else if (!path.empty()) + loadedFileNames.emplace(path); + ImGui::PopID(); + } + if (ImGui::Button(" + ")) + pathArr.emplace_back(""); + ImGui::SetItemTooltip(appLanguage[Key::Load_another_file]); + if (ImGui::Button(appLanguage[Key::Back])) { + loadFile = false; + ImGui::CloseCurrentPopup(); + } + ImGui::SameLine(); + if (ImGui::Button(appLanguage[Key::Load_file])) { + do_load(); + ImGui::CloseCurrentPopup(); + loadFile = false; + } + ImGui::EndPopup(); + } +} void set_config(const std::string &configpath) { if (std::filesystem::exists(configpath)) fmt::print("found config.json\n\r"); @@ -156,14 +235,14 @@ void set_inital_config(nlohmann::json &config) { config["text"]["active_language"] == "German" ? germanLan : englishLan; } -void rstSettings(const dvcPair &loadedDvc) { +void rstSettings(const decltype(captureData) &loadedDvcs) { sampler.reset(); devices.clear(); savedFileNames.clear(); deviceManager.clearDevices(); - // erase all elements excpet loadedDvc + // erase all elements excpet loadedDvcs for (auto it = captureData.begin(); it != captureData.end();) { - if (it->first != loadedDvc.first) + if (!loadedDvcs.contains(it->first)) it = captureData.erase(it); else ++it; diff --git a/src/handler.hpp b/src/handler.hpp index a3950760..ad545028 100644 --- a/src/handler.hpp +++ b/src/handler.hpp @@ -8,7 +8,7 @@ #include #include -using dvcPair = std::pair>>; +using pairDvc = std::pair>>; // global variables inline OmniscopeDeviceManager deviceManager{}; inline std::vector> devices; @@ -21,9 +21,11 @@ inline std::map>> void addPlots(const char *, std::function); void initDevices(); void devicesList(); +void load_files(decltype(captureData) &, + std::map &, bool&); void set_config(const std::string &); void set_json(nlohmann::json &); void set_inital_config(nlohmann::json &); -void rstSettings(const dvcPair&); +void rstSettings(const decltype(captureData) &); #endif diff --git a/src/imagesHeader.hpp b/src/imagesHeader.hpp index 475b6759..9201e62e 100644 --- a/src/imagesHeader.hpp +++ b/src/imagesHeader.hpp @@ -9572,6 +9572,50 @@ inline constexpr unsigned char SearchDevices_png[] = { 0xC3, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82}; + unsigned char Load_file_png[] = { + 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x9D, 0x92, 0x5D, 0xF2, 0x00, 0x00, 0x00, + 0x06, 0x62, 0x4B, 0x47, 0x44, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xA0, + 0xBD, 0xA7, 0x93, 0x00, 0x00, 0x01, 0xA4, 0x49, 0x44, 0x41, 0x54, 0x38, + 0x8D, 0x95, 0x93, 0x41, 0x8B, 0xD3, 0x50, 0x14, 0x85, 0x3F, 0xA6, 0xE3, + 0xA8, 0x50, 0x9C, 0x45, 0x77, 0x85, 0x82, 0xE9, 0xB6, 0x0B, 0xA1, 0x8F, + 0xE0, 0x76, 0x08, 0x25, 0x59, 0x97, 0x74, 0x6B, 0xF7, 0xAF, 0x20, 0xF8, + 0x13, 0x66, 0x18, 0x70, 0xA3, 0x6D, 0xD6, 0x5D, 0xBA, 0xEB, 0x42, 0x54, + 0x08, 0xFE, 0x81, 0xCA, 0x20, 0xB4, 0x94, 0x22, 0x4D, 0x77, 0xFD, 0x07, + 0x42, 0x93, 0x8D, 0x60, 0x24, 0xCE, 0x75, 0x93, 0xD1, 0x34, 0xB6, 0x4D, + 0xE6, 0xC0, 0x59, 0xBC, 0x7B, 0xCF, 0x3B, 0xF7, 0x70, 0x1F, 0x0F, 0x52, + 0x68, 0xAD, 0x5F, 0xB7, 0xDB, 0xED, 0xB0, 0xD1, 0x68, 0xDC, 0x1A, 0x86, + 0xF1, 0x5B, 0x29, 0x15, 0x6A, 0xAD, 0xAF, 0xB9, 0x0F, 0xBA, 0xDD, 0xEE, + 0x57, 0xDB, 0xB6, 0x65, 0xB5, 0x5A, 0xC9, 0x1D, 0xD6, 0xEB, 0xB5, 0x38, + 0x8E, 0x23, 0xAE, 0xEB, 0xDE, 0x94, 0x32, 0xE9, 0x74, 0x3A, 0xEF, 0x94, + 0x52, 0xB2, 0xD9, 0x6C, 0x44, 0x44, 0xC4, 0xF3, 0x3C, 0xF1, 0x3C, 0x4F, + 0x44, 0x44, 0x92, 0x24, 0x11, 0xC7, 0x71, 0x44, 0x6B, 0x7D, 0x55, 0xE4, + 0x73, 0x52, 0xAB, 0xD5, 0x3A, 0xD5, 0x6A, 0x95, 0xE9, 0x74, 0x0A, 0x40, + 0x14, 0x45, 0x44, 0x51, 0x04, 0x40, 0xA5, 0x52, 0x61, 0x38, 0x1C, 0x32, + 0x9B, 0xCD, 0x5E, 0x16, 0x19, 0x9D, 0x4E, 0x26, 0x93, 0x27, 0xC7, 0x04, + 0xAD, 0x56, 0x8B, 0x30, 0x0C, 0xCF, 0x0B, 0x13, 0xF9, 0xBE, 0x5F, 0x01, + 0x88, 0xE3, 0x98, 0xD1, 0x68, 0xC4, 0x78, 0x3C, 0xA6, 0xD9, 0x6C, 0xFE, + 0xA7, 0x03, 0x24, 0xC3, 0x0F, 0xC0, 0xD9, 0x8E, 0x42, 0x29, 0x15, 0x2E, + 0x16, 0x0B, 0x99, 0xCF, 0xE7, 0xD2, 0xEF, 0xF7, 0x25, 0x08, 0x02, 0xC9, + 0x22, 0x08, 0x02, 0x31, 0x4D, 0x73, 0x9B, 0xB9, 0x72, 0x06, 0x7C, 0x4A, + 0xF9, 0xCF, 0x4C, 0x6B, 0x7D, 0x6D, 0x59, 0x96, 0xC4, 0x71, 0x2C, 0x79, + 0x24, 0x49, 0x22, 0xB6, 0x6D, 0xCB, 0x60, 0x30, 0xB8, 0xCC, 0x25, 0x7C, + 0x00, 0x7C, 0x04, 0x3E, 0x03, 0x0F, 0xFF, 0x56, 0x5D, 0xD7, 0xBD, 0xB1, + 0x2C, 0x4B, 0x96, 0xCB, 0xE5, 0x4E, 0x12, 0xDB, 0xB6, 0xA5, 0xD7, 0xEB, + 0x7D, 0x39, 0xB0, 0x96, 0xBB, 0x64, 0xEF, 0x77, 0xAA, 0x5A, 0xEB, 0x2B, + 0xA5, 0xD4, 0xB6, 0x5E, 0xAF, 0xDF, 0x1A, 0x86, 0x21, 0xA6, 0x69, 0x6E, + 0x73, 0x49, 0x5E, 0xA5, 0xCC, 0x9B, 0xC9, 0x81, 0x41, 0x70, 0xA0, 0x79, + 0x99, 0x72, 0xAF, 0xF6, 0xE4, 0x98, 0xDB, 0x7D, 0x70, 0x5A, 0x42, 0xF3, + 0x0C, 0x78, 0x94, 0x39, 0x3F, 0x07, 0x7E, 0x02, 0xDF, 0xB2, 0xA2, 0x32, + 0x89, 0x1E, 0x03, 0x3E, 0xF0, 0x34, 0xA5, 0x9F, 0xD6, 0x4A, 0x21, 0xBF, + 0xA3, 0x0B, 0xE0, 0x47, 0xCA, 0x8B, 0x02, 0x6D, 0x61, 0xF3, 0x45, 0xCA, + 0x32, 0xDA, 0x72, 0xCD, 0x7D, 0xDA, 0x43, 0x3B, 0xFA, 0x05, 0x1C, 0xFD, + 0xCC, 0x29, 0xCE, 0x53, 0xED, 0xC1, 0x57, 0x7B, 0x0B, 0x7C, 0x27, 0xFF, + 0x31, 0xF7, 0x0F, 0x7C, 0x03, 0xF0, 0x07, 0x07, 0x5F, 0xD1, 0xF4, 0xEA, + 0x9B, 0xC7, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, + 0x42, 0x60, 0x82}; + //******************************************************************************** //******************************************************************************** @@ -9833,815 +9877,813 @@ inline constexpr unsigned char Help_png[] = { 0x82}; unsigned char RefreshIcon_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xc5, 0x78, 0x1b, 0xeb, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x03, 0x21, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x99, 0xe1, - 0x71, 0xda, 0x30, 0x14, 0xc7, 0x9f, 0xec, 0x60, 0xca, 0xb7, 0x64, 0x82, - 0xb2, 0x41, 0xd3, 0x09, 0x0a, 0x13, 0x90, 0x0d, 0xca, 0x06, 0xb4, 0x13, - 0x24, 0x9d, 0x20, 0x6c, 0x40, 0x47, 0x60, 0x03, 0xc8, 0x04, 0xcd, 0x06, - 0xd0, 0x09, 0xe0, 0x03, 0x77, 0xc6, 0x72, 0x8a, 0xfa, 0x9e, 0x63, 0xee, - 0x84, 0x90, 0x6d, 0x59, 0x96, 0x73, 0x36, 0xc7, 0xff, 0x8e, 0x3b, 0x64, - 0x24, 0x3f, 0xfd, 0x78, 0x4f, 0xd2, 0x7b, 0x36, 0x40, 0x8d, 0x12, 0x42, - 0xdc, 0xc2, 0xa5, 0x28, 0x8c, 0xa2, 0xdf, 0x11, 0xe7, 0x7f, 0x2e, 0x02, - 0x8a, 0x60, 0xf6, 0x11, 0x17, 0xf4, 0x69, 0x3d, 0x54, 0x14, 0xc5, 0x8f, - 0x47, 0x98, 0x8b, 0x80, 0xa2, 0x89, 0x13, 0xc0, 0x15, 0xaa, 0xe9, 0xba, - 0x42, 0xb5, 0x45, 0xbb, 0x1d, 0xbf, 0x47, 0x88, 0xd5, 0x47, 0x41, 0x31, - 0x70, 0xac, 0x30, 0x8c, 0x07, 0xbe, 0x0f, 0x23, 0x01, 0x62, 0x20, 0x04, - 0xf4, 0xf1, 0x52, 0xe6, 0xa4, 0x19, 0x83, 0xd7, 0xa0, 0xd3, 0x19, 0x32, - 0xc6, 0xb6, 0xe0, 0x48, 0x4e, 0x80, 0xe8, 0x9f, 0xde, 0x73, 0xfe, 0x83, - 0x01, 0x9b, 0x40, 0x0e, 0x80, 0x76, 0x02, 0x8e, 0xa1, 0x6e, 0xa0, 0xa2, - 0xc8, 0x23, 0x11, 0x8f, 0x67, 0x08, 0xd3, 0x07, 0x1b, 0x09, 0x31, 0x77, - 0xe9, 0x21, 0x0f, 0x2a, 0x08, 0xbd, 0x32, 0x65, 0x9e, 0x58, 0xe0, 0xd7, - 0x7e, 0x4e, 0xb7, 0x6d, 0xfa, 0x39, 0x13, 0x03, 0xf1, 0xd4, 0xed, 0x76, - 0x7f, 0x81, 0x43, 0x59, 0x01, 0xbd, 0x87, 0x58, 0xbc, 0x00, 0x01, 0x13, - 0xcd, 0xcf, 0x5b, 0x8f, 0xb1, 0xe9, 0x8d, 0xef, 0x3d, 0x74, 0x83, 0xce, - 0xdd, 0x5b, 0xcc, 0x87, 0xba, 0x7b, 0xd4, 0x01, 0x63, 0x2d, 0x82, 0x51, - 0x77, 0xad, 0x64, 0xe7, 0x8a, 0xa2, 0x47, 0x79, 0xe7, 0xda, 0xed, 0x76, - 0xb4, 0xc3, 0x6d, 0x74, 0xfd, 0xa0, 0x29, 0xc2, 0xc4, 0xf3, 0xe9, 0x1c, - 0x26, 0x5a, 0xd1, 0xe4, 0xe5, 0x7e, 0xed, 0x80, 0x09, 0xf9, 0x58, 0x07, - 0x13, 0x86, 0x61, 0x5f, 0xee, 0x57, 0x15, 0x26, 0x09, 0xe9, 0x3d, 0x9f, - 0x70, 0x1e, 0x3f, 0xab, 0xf7, 0x76, 0xaa, 0xf3, 0x03, 0xd2, 0x3d, 0x0c, - 0x09, 0x0f, 0xdd, 0x99, 0x6c, 0xa3, 0xcc, 0x01, 0x6c, 0xbc, 0x29, 0x90, - 0x77, 0x40, 0xd9, 0xcd, 0xc4, 0xe1, 0x30, 0xec, 0xf5, 0x7a, 0x6b, 0xf9, - 0x9a, 0xef, 0xfb, 0x14, 0x7a, 0x27, 0x13, 0x28, 0xbb, 0x01, 0xe0, 0x81, - 0x3c, 0x90, 0x46, 0xf7, 0x39, 0x7f, 0x9b, 0x80, 0x6b, 0xa9, 0xde, 0xe1, - 0x9c, 0x3f, 0x67, 0xf5, 0x45, 0xaf, 0x8d, 0xab, 0xac, 0x19, 0x4d, 0x4d, - 0xb5, 0x01, 0x97, 0xa2, 0xc3, 0x53, 0x0d, 0xa1, 0xa2, 0xd8, 0x26, 0x28, - 0xdb, 0x0d, 0x20, 0x59, 0x43, 0x4a, 0xd8, 0xe2, 0xfd, 0x06, 0xe0, 0x4a, - 0xb4, 0x38, 0x4f, 0xd7, 0x03, 0x9f, 0x41, 0xcd, 0x52, 0x6d, 0x52, 0xdb, - 0x64, 0x9c, 0xd1, 0x1a, 0x12, 0x20, 0xc7, 0x74, 0x32, 0x6c, 0x0e, 0x35, - 0x4b, 0x08, 0xf6, 0x22, 0xb7, 0x0f, 0x42, 0x0c, 0x4c, 0xc6, 0x19, 0x25, - 0xa7, 0xf4, 0x0f, 0xc9, 0x6d, 0xca, 0x00, 0x5c, 0xe6, 0x5f, 0x3a, 0xbd, - 0xd7, 0x52, 0xb1, 0xbc, 0x76, 0xb6, 0x9f, 0xba, 0xc1, 0x5d, 0xd1, 0xb8, - 0x42, 0x0f, 0x69, 0xd6, 0xca, 0xb6, 0x6e, 0x18, 0x52, 0x6a, 0x43, 0xb6, - 0x73, 0x8b, 0x90, 0x9f, 0x8b, 0xc6, 0xd9, 0xe4, 0x72, 0xb5, 0xc3, 0x54, - 0xb1, 0x55, 0x29, 0xdb, 0x6e, 0xa2, 0x6c, 0x80, 0x3e, 0xf2, 0x59, 0x40, - 0x69, 0x5b, 0x85, 0x40, 0x69, 0x26, 0xa0, 0xc6, 0x72, 0xed, 0x50, 0xa9, - 0x8d, 0xd3, 0x8c, 0x83, 0xb1, 0xbf, 0x45, 0xe3, 0x8c, 0x3c, 0x84, 0x37, - 0x5a, 0xcb, 0x6d, 0xce, 0xff, 0x7d, 0x83, 0x9a, 0x85, 0x36, 0x06, 0xca, - 0xa5, 0x57, 0x83, 0x61, 0x86, 0x40, 0x00, 0xcb, 0x93, 0x36, 0x33, 0x3b, - 0x13, 0x2a, 0x89, 0x1d, 0x46, 0x72, 0x13, 0x8b, 0xc6, 0x25, 0xb8, 0x12, - 0xa5, 0x1d, 0x6a, 0x6e, 0x65, 0x1b, 0x76, 0x54, 0x4f, 0x61, 0x1e, 0xf8, - 0x1d, 0xf2, 0xed, 0xf5, 0xd5, 0x54, 0x2b, 0x8e, 0x63, 0xb7, 0x51, 0xa1, - 0xe6, 0x56, 0x94, 0x40, 0x42, 0x49, 0xc9, 0xc5, 0x61, 0x1e, 0x14, 0x3d, - 0xab, 0x50, 0xcb, 0x14, 0x70, 0x2d, 0x4d, 0x06, 0x5c, 0xca, 0x88, 0xae, - 0xd2, 0xd5, 0x41, 0xe9, 0xbc, 0x53, 0xe4, 0x51, 0x2b, 0xa5, 0x19, 0xf0, - 0xca, 0x26, 0x41, 0xd5, 0x97, 0xed, 0x7c, 0xa3, 0x96, 0xed, 0x29, 0xcc, - 0xaa, 0x76, 0xef, 0xc8, 0x06, 0x93, 0x2c, 0x18, 0xcb, 0x63, 0xd3, 0x35, - 0x54, 0x0d, 0xa6, 0x26, 0xef, 0xd8, 0xca, 0x14, 0x26, 0x2d, 0xdb, 0x57, - 0xcd, 0x7e, 0xa0, 0x62, 0x00, 0x43, 0x5e, 0xce, 0xe8, 0x27, 0x30, 0x0a, - 0x16, 0xd0, 0x14, 0xe5, 0xc1, 0x24, 0x65, 0x41, 0x14, 0x3d, 0xa4, 0x05, - 0xdc, 0x26, 0x0b, 0xc6, 0xf6, 0x58, 0x70, 0xff, 0xf6, 0x01, 0x61, 0xf0, - 0x39, 0xb7, 0x2e, 0x54, 0x8e, 0xe9, 0x53, 0xee, 0x44, 0x3d, 0x06, 0xd3, - 0x20, 0x08, 0x7e, 0x82, 0xa5, 0x9c, 0x02, 0xe5, 0xc0, 0x18, 0x48, 0xac, - 0x7d, 0xcf, 0x1b, 0x77, 0x3a, 0x9d, 0x17, 0xa8, 0x20, 0x67, 0xe5, 0x03, - 0x85, 0x08, 0xa6, 0x27, 0x23, 0x8b, 0xa1, 0xdb, 0xe4, 0x31, 0x57, 0x10, - 0x7c, 0xad, 0x0a, 0x43, 0x72, 0xea, 0x21, 0x82, 0xe2, 0x71, 0x8c, 0xf1, - 0x0f, 0xf7, 0x39, 0xdd, 0x10, 0x00, 0xd6, 0x98, 0xf0, 0x2e, 0xf1, 0xdd, - 0xd0, 0xdc, 0x05, 0x44, 0xad, 0xca, 0x7a, 0xaf, 0x4a, 0x07, 0x24, 0x9e, - 0x29, 0x5f, 0xa0, 0x8d, 0xba, 0xbe, 0x01, 0x6f, 0x8b, 0xae, 0x50, 0x6d, - 0x51, 0x26, 0x54, 0x93, 0x72, 0xb5, 0xb2, 0x52, 0xa1, 0xe8, 0x1d, 0x10, - 0xb4, 0x5d, 0x47, 0xa8, 0x8b, 0x80, 0x39, 0xaa, 0xee, 0x75, 0xf3, 0x1f, - 0x52, 0x5e, 0x86, 0x6b, 0x68, 0x61, 0x37, 0xd9, 0x00, 0x00, 0x00, 0x00, - 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 -}; + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, + 0x08, 0x06, 0x00, 0x00, 0x00, 0xc5, 0x78, 0x1b, 0xeb, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x03, 0x21, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x99, 0xe1, + 0x71, 0xda, 0x30, 0x14, 0xc7, 0x9f, 0xec, 0x60, 0xca, 0xb7, 0x64, 0x82, + 0xb2, 0x41, 0xd3, 0x09, 0x0a, 0x13, 0x90, 0x0d, 0xca, 0x06, 0xb4, 0x13, + 0x24, 0x9d, 0x20, 0x6c, 0x40, 0x47, 0x60, 0x03, 0xc8, 0x04, 0xcd, 0x06, + 0xd0, 0x09, 0xe0, 0x03, 0x77, 0xc6, 0x72, 0x8a, 0xfa, 0x9e, 0x63, 0xee, + 0x84, 0x90, 0x6d, 0x59, 0x96, 0x73, 0x36, 0xc7, 0xff, 0x8e, 0x3b, 0x64, + 0x24, 0x3f, 0xfd, 0x78, 0x4f, 0xd2, 0x7b, 0x36, 0x40, 0x8d, 0x12, 0x42, + 0xdc, 0xc2, 0xa5, 0x28, 0x8c, 0xa2, 0xdf, 0x11, 0xe7, 0x7f, 0x2e, 0x02, + 0x8a, 0x60, 0xf6, 0x11, 0x17, 0xf4, 0x69, 0x3d, 0x54, 0x14, 0xc5, 0x8f, + 0x47, 0x98, 0x8b, 0x80, 0xa2, 0x89, 0x13, 0xc0, 0x15, 0xaa, 0xe9, 0xba, + 0x42, 0xb5, 0x45, 0xbb, 0x1d, 0xbf, 0x47, 0x88, 0xd5, 0x47, 0x41, 0x31, + 0x70, 0xac, 0x30, 0x8c, 0x07, 0xbe, 0x0f, 0x23, 0x01, 0x62, 0x20, 0x04, + 0xf4, 0xf1, 0x52, 0xe6, 0xa4, 0x19, 0x83, 0xd7, 0xa0, 0xd3, 0x19, 0x32, + 0xc6, 0xb6, 0xe0, 0x48, 0x4e, 0x80, 0xe8, 0x9f, 0xde, 0x73, 0xfe, 0x83, + 0x01, 0x9b, 0x40, 0x0e, 0x80, 0x76, 0x02, 0x8e, 0xa1, 0x6e, 0xa0, 0xa2, + 0xc8, 0x23, 0x11, 0x8f, 0x67, 0x08, 0xd3, 0x07, 0x1b, 0x09, 0x31, 0x77, + 0xe9, 0x21, 0x0f, 0x2a, 0x08, 0xbd, 0x32, 0x65, 0x9e, 0x58, 0xe0, 0xd7, + 0x7e, 0x4e, 0xb7, 0x6d, 0xfa, 0x39, 0x13, 0x03, 0xf1, 0xd4, 0xed, 0x76, + 0x7f, 0x81, 0x43, 0x59, 0x01, 0xbd, 0x87, 0x58, 0xbc, 0x00, 0x01, 0x13, + 0xcd, 0xcf, 0x5b, 0x8f, 0xb1, 0xe9, 0x8d, 0xef, 0x3d, 0x74, 0x83, 0xce, + 0xdd, 0x5b, 0xcc, 0x87, 0xba, 0x7b, 0xd4, 0x01, 0x63, 0x2d, 0x82, 0x51, + 0x77, 0xad, 0x64, 0xe7, 0x8a, 0xa2, 0x47, 0x79, 0xe7, 0xda, 0xed, 0x76, + 0xb4, 0xc3, 0x6d, 0x74, 0xfd, 0xa0, 0x29, 0xc2, 0xc4, 0xf3, 0xe9, 0x1c, + 0x26, 0x5a, 0xd1, 0xe4, 0xe5, 0x7e, 0xed, 0x80, 0x09, 0xf9, 0x58, 0x07, + 0x13, 0x86, 0x61, 0x5f, 0xee, 0x57, 0x15, 0x26, 0x09, 0xe9, 0x3d, 0x9f, + 0x70, 0x1e, 0x3f, 0xab, 0xf7, 0x76, 0xaa, 0xf3, 0x03, 0xd2, 0x3d, 0x0c, + 0x09, 0x0f, 0xdd, 0x99, 0x6c, 0xa3, 0xcc, 0x01, 0x6c, 0xbc, 0x29, 0x90, + 0x77, 0x40, 0xd9, 0xcd, 0xc4, 0xe1, 0x30, 0xec, 0xf5, 0x7a, 0x6b, 0xf9, + 0x9a, 0xef, 0xfb, 0x14, 0x7a, 0x27, 0x13, 0x28, 0xbb, 0x01, 0xe0, 0x81, + 0x3c, 0x90, 0x46, 0xf7, 0x39, 0x7f, 0x9b, 0x80, 0x6b, 0xa9, 0xde, 0xe1, + 0x9c, 0x3f, 0x67, 0xf5, 0x45, 0xaf, 0x8d, 0xab, 0xac, 0x19, 0x4d, 0x4d, + 0xb5, 0x01, 0x97, 0xa2, 0xc3, 0x53, 0x0d, 0xa1, 0xa2, 0xd8, 0x26, 0x28, + 0xdb, 0x0d, 0x20, 0x59, 0x43, 0x4a, 0xd8, 0xe2, 0xfd, 0x06, 0xe0, 0x4a, + 0xb4, 0x38, 0x4f, 0xd7, 0x03, 0x9f, 0x41, 0xcd, 0x52, 0x6d, 0x52, 0xdb, + 0x64, 0x9c, 0xd1, 0x1a, 0x12, 0x20, 0xc7, 0x74, 0x32, 0x6c, 0x0e, 0x35, + 0x4b, 0x08, 0xf6, 0x22, 0xb7, 0x0f, 0x42, 0x0c, 0x4c, 0xc6, 0x19, 0x25, + 0xa7, 0xf4, 0x0f, 0xc9, 0x6d, 0xca, 0x00, 0x5c, 0xe6, 0x5f, 0x3a, 0xbd, + 0xd7, 0x52, 0xb1, 0xbc, 0x76, 0xb6, 0x9f, 0xba, 0xc1, 0x5d, 0xd1, 0xb8, + 0x42, 0x0f, 0x69, 0xd6, 0xca, 0xb6, 0x6e, 0x18, 0x52, 0x6a, 0x43, 0xb6, + 0x73, 0x8b, 0x90, 0x9f, 0x8b, 0xc6, 0xd9, 0xe4, 0x72, 0xb5, 0xc3, 0x54, + 0xb1, 0x55, 0x29, 0xdb, 0x6e, 0xa2, 0x6c, 0x80, 0x3e, 0xf2, 0x59, 0x40, + 0x69, 0x5b, 0x85, 0x40, 0x69, 0x26, 0xa0, 0xc6, 0x72, 0xed, 0x50, 0xa9, + 0x8d, 0xd3, 0x8c, 0x83, 0xb1, 0xbf, 0x45, 0xe3, 0x8c, 0x3c, 0x84, 0x37, + 0x5a, 0xcb, 0x6d, 0xce, 0xff, 0x7d, 0x83, 0x9a, 0x85, 0x36, 0x06, 0xca, + 0xa5, 0x57, 0x83, 0x61, 0x86, 0x40, 0x00, 0xcb, 0x93, 0x36, 0x33, 0x3b, + 0x13, 0x2a, 0x89, 0x1d, 0x46, 0x72, 0x13, 0x8b, 0xc6, 0x25, 0xb8, 0x12, + 0xa5, 0x1d, 0x6a, 0x6e, 0x65, 0x1b, 0x76, 0x54, 0x4f, 0x61, 0x1e, 0xf8, + 0x1d, 0xf2, 0xed, 0xf5, 0xd5, 0x54, 0x2b, 0x8e, 0x63, 0xb7, 0x51, 0xa1, + 0xe6, 0x56, 0x94, 0x40, 0x42, 0x49, 0xc9, 0xc5, 0x61, 0x1e, 0x14, 0x3d, + 0xab, 0x50, 0xcb, 0x14, 0x70, 0x2d, 0x4d, 0x06, 0x5c, 0xca, 0x88, 0xae, + 0xd2, 0xd5, 0x41, 0xe9, 0xbc, 0x53, 0xe4, 0x51, 0x2b, 0xa5, 0x19, 0xf0, + 0xca, 0x26, 0x41, 0xd5, 0x97, 0xed, 0x7c, 0xa3, 0x96, 0xed, 0x29, 0xcc, + 0xaa, 0x76, 0xef, 0xc8, 0x06, 0x93, 0x2c, 0x18, 0xcb, 0x63, 0xd3, 0x35, + 0x54, 0x0d, 0xa6, 0x26, 0xef, 0xd8, 0xca, 0x14, 0x26, 0x2d, 0xdb, 0x57, + 0xcd, 0x7e, 0xa0, 0x62, 0x00, 0x43, 0x5e, 0xce, 0xe8, 0x27, 0x30, 0x0a, + 0x16, 0xd0, 0x14, 0xe5, 0xc1, 0x24, 0x65, 0x41, 0x14, 0x3d, 0xa4, 0x05, + 0xdc, 0x26, 0x0b, 0xc6, 0xf6, 0x58, 0x70, 0xff, 0xf6, 0x01, 0x61, 0xf0, + 0x39, 0xb7, 0x2e, 0x54, 0x8e, 0xe9, 0x53, 0xee, 0x44, 0x3d, 0x06, 0xd3, + 0x20, 0x08, 0x7e, 0x82, 0xa5, 0x9c, 0x02, 0xe5, 0xc0, 0x18, 0x48, 0xac, + 0x7d, 0xcf, 0x1b, 0x77, 0x3a, 0x9d, 0x17, 0xa8, 0x20, 0x67, 0xe5, 0x03, + 0x85, 0x08, 0xa6, 0x27, 0x23, 0x8b, 0xa1, 0xdb, 0xe4, 0x31, 0x57, 0x10, + 0x7c, 0xad, 0x0a, 0x43, 0x72, 0xea, 0x21, 0x82, 0xe2, 0x71, 0x8c, 0xf1, + 0x0f, 0xf7, 0x39, 0xdd, 0x10, 0x00, 0xd6, 0x98, 0xf0, 0x2e, 0xf1, 0xdd, + 0xd0, 0xdc, 0x05, 0x44, 0xad, 0xca, 0x7a, 0xaf, 0x4a, 0x07, 0x24, 0x9e, + 0x29, 0x5f, 0xa0, 0x8d, 0xba, 0xbe, 0x01, 0x6f, 0x8b, 0xae, 0x50, 0x6d, + 0x51, 0x26, 0x54, 0x93, 0x72, 0xb5, 0xb2, 0x52, 0xa1, 0xe8, 0x1d, 0x10, + 0xb4, 0x5d, 0x47, 0xa8, 0x8b, 0x80, 0x39, 0xaa, 0xee, 0x75, 0xf3, 0x1f, + 0x52, 0x5e, 0x86, 0x6b, 0x68, 0x61, 0x37, 0xd9, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; unsigned char SettingIcon_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xc5, 0x78, 0x1b, 0xeb, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x05, 0x81, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x5a, 0xe1, - 0x75, 0xdb, 0x36, 0x10, 0x06, 0x48, 0x89, 0x94, 0xe3, 0x1f, 0x55, 0x27, - 0xa8, 0x32, 0x41, 0xec, 0x09, 0x2a, 0x4f, 0x60, 0x67, 0x82, 0xba, 0x13, - 0xc4, 0x9e, 0x40, 0xee, 0x04, 0x75, 0x27, 0x88, 0x3d, 0x81, 0xed, 0x09, - 0xac, 0x4c, 0x10, 0x65, 0x02, 0xa9, 0x13, 0x48, 0x7d, 0x4f, 0x29, 0x49, - 0x50, 0x24, 0x7a, 0x47, 0x91, 0x0d, 0x09, 0x1e, 0x40, 0x90, 0x92, 0x5e, - 0x9c, 0xbc, 0x7c, 0xef, 0xe9, 0xf9, 0x49, 0x00, 0x0e, 0x38, 0xe0, 0x70, - 0xdf, 0xdd, 0xc1, 0x8c, 0xfd, 0xc0, 0xcb, 0x06, 0x67, 0x07, 0x42, 0x10, - 0xc4, 0x63, 0xd7, 0x65, 0xe7, 0x52, 0xca, 0x61, 0x65, 0x42, 0xce, 0x57, - 0x49, 0xc2, 0x9e, 0x8e, 0x8e, 0xfa, 0x53, 0xf6, 0xad, 0x20, 0x14, 0xe2, - 0x36, 0x8c, 0x84, 0x34, 0x7e, 0x84, 0xf8, 0x93, 0x7d, 0x0b, 0xb0, 0x52, - 0xe6, 0x80, 0x4a, 0xed, 0xd5, 0xe4, 0x82, 0x20, 0x18, 0x71, 0xc7, 0x9d, - 0xb7, 0x19, 0x23, 0xd3, 0xe4, 0xec, 0xe8, 0xe8, 0x68, 0xca, 0xf6, 0x84, - 0x1e, 0x6b, 0x09, 0xbc, 0x13, 0x9f, 0x3f, 0xc7, 0x23, 0xd7, 0xe5, 0xc3, - 0xc1, 0xa0, 0x37, 0xc3, 0x3b, 0x51, 0xb4, 0xb9, 0x6e, 0xef, 0x5d, 0x2a, - 0x65, 0xb9, 0xf7, 0xc2, 0xe1, 0xee, 0x4d, 0x79, 0x7c, 0x2a, 0x53, 0xfc, - 0x3e, 0x2a, 0x8d, 0x39, 0x87, 0x3f, 0x53, 0x1b, 0xf9, 0x7b, 0x05, 0x4e, - 0x14, 0x09, 0xf1, 0x5e, 0x35, 0x9b, 0x28, 0x12, 0xef, 0x8b, 0x8b, 0x1f, - 0x89, 0xf8, 0x63, 0xb5, 0x6d, 0x73, 0xae, 0xca, 0x09, 0x02, 0x71, 0xa9, - 0x98, 0xdd, 0x73, 0x21, 0x3f, 0x37, 0xd7, 0xa5, 0x2a, 0x1f, 0x4f, 0xde, - 0x72, 0x99, 0x76, 0x26, 0x97, 0x9b, 0x12, 0x4e, 0x3c, 0xa2, 0x7b, 0xc8, - 0x05, 0xee, 0x24, 0x1c, 0xce, 0x49, 0xe5, 0xd7, 0x34, 0x79, 0x0d, 0xe6, - 0xb4, 0x20, 0x64, 0xcd, 0xd5, 0xf1, 0xb0, 0x14, 0xdc, 0x94, 0xa1, 0x4e, - 0xbe, 0x4c, 0xd3, 0x33, 0x55, 0x16, 0x85, 0x46, 0x85, 0x9a, 0x95, 0xd1, - 0x40, 0xca, 0xc7, 0xc1, 0xc0, 0x7f, 0x4b, 0x35, 0x65, 0xa7, 0x22, 0xd9, - 0x98, 0xb5, 0x82, 0x9d, 0x52, 0x8e, 0xa9, 0xd1, 0xa0, 0xcc, 0x22, 0xff, - 0xe8, 0x27, 0x97, 0xe9, 0xb5, 0xb6, 0x35, 0x49, 0x7e, 0x37, 0x8f, 0x67, - 0xab, 0x7a, 0x3b, 0x87, 0xb5, 0x38, 0xcf, 0x2a, 0xaf, 0xa9, 0x30, 0x2a, - 0xe4, 0xb8, 0xee, 0x84, 0x29, 0xca, 0x70, 0xce, 0xee, 0x06, 0xbe, 0xf7, - 0x1a, 0x3f, 0x9c, 0xc9, 0x9b, 0x7c, 0xf2, 0xd2, 0x6a, 0xd9, 0xb4, 0x69, - 0x27, 0xb1, 0x0d, 0xbd, 0x1b, 0xca, 0x52, 0x9a, 0x56, 0x28, 0xd3, 0xf7, - 0xfa, 0x99, 0x7c, 0xc9, 0xe4, 0x3d, 0x53, 0x94, 0x12, 0x22, 0xee, 0xe6, - 0xea, 0xb3, 0x4b, 0xaa, 0x3a, 0x00, 0x70, 0x0a, 0x54, 0xdf, 0x38, 0x8e, - 0x7f, 0x5d, 0xaf, 0xd7, 0x27, 0x4d, 0xbb, 0xa7, 0x9b, 0xc7, 0x34, 0x3e, - 0x88, 0xa2, 0x3b, 0x75, 0x1d, 0x5d, 0xe6, 0xc9, 0x42, 0x97, 0xaa, 0xa0, - 0xa8, 0x15, 0xbf, 0xec, 0x13, 0x30, 0xff, 0xbc, 0xbc, 0x16, 0x54, 0x5e, - 0xd7, 0x57, 0x6b, 0x72, 0xae, 0x2b, 0x15, 0xff, 0xcf, 0x87, 0x9d, 0x76, - 0xe6, 0x00, 0xf0, 0x7d, 0xff, 0x27, 0x5d, 0x9b, 0x96, 0x58, 0xfb, 0xfd, - 0xfe, 0x02, 0x78, 0x05, 0x95, 0x2a, 0x94, 0x18, 0x0a, 0xb1, 0x79, 0x07, - 0x7f, 0xff, 0x60, 0x16, 0xc8, 0x4c, 0x36, 0x8c, 0x2f, 0x80, 0x20, 0xdf, - 0x14, 0x1b, 0xb1, 0x25, 0x49, 0x39, 0x4b, 0x92, 0xe4, 0x83, 0x8d, 0x0b, - 0x46, 0x80, 0xc9, 0xdd, 0x30, 0xe5, 0x1e, 0xf7, 0x7a, 0xbd, 0x4f, 0xac, - 0x0b, 0xf0, 0x02, 0x2a, 0xf6, 0xbb, 0x6c, 0x3a, 0x25, 0xf4, 0x8c, 0xa1, - 0x88, 0x9f, 0x9b, 0xe2, 0x38, 0x5b, 0xc2, 0xa4, 0x88, 0x96, 0x75, 0x45, - 0xee, 0x18, 0x96, 0xb6, 0xf6, 0xfb, 0x6f, 0x18, 0x5e, 0x59, 0x07, 0xa6, - 0xf9, 0x27, 0x3f, 0x01, 0x12, 0xd4, 0x3d, 0xde, 0xc9, 0x6d, 0xe7, 0x71, - 0x54, 0xe5, 0x2e, 0xe9, 0xec, 0x17, 0x17, 0xe6, 0x70, 0xa7, 0xb5, 0x4b, - 0xe5, 0x8c, 0x4f, 0x74, 0x4a, 0x11, 0xf7, 0x78, 0xd5, 0x14, 0xdb, 0x91, - 0x91, 0x42, 0x91, 0x9c, 0xa5, 0x0c, 0x42, 0x19, 0x29, 0xc7, 0xe5, 0x36, - 0xe0, 0x88, 0x9f, 0x55, 0xa1, 0xb8, 0x20, 0x5c, 0x58, 0x4d, 0x10, 0x70, - 0x92, 0xe3, 0xf0, 0x19, 0x4c, 0x33, 0xcb, 0xbe, 0x4a, 0x39, 0x02, 0x6e, - 0xb9, 0x64, 0x44, 0xd4, 0x91, 0x26, 0xe9, 0xf5, 0xab, 0x57, 0x83, 0xdb, - 0xca, 0xf0, 0x2c, 0x7e, 0x8c, 0x97, 0x4a, 0xd7, 0x99, 0xc3, 0xf9, 0x34, - 0x49, 0x36, 0x7f, 0x59, 0xdd, 0x43, 0x53, 0x3e, 0x43, 0xd9, 0x6f, 0x76, - 0x67, 0xea, 0x7d, 0x97, 0x51, 0x14, 0x5d, 0xe8, 0xe6, 0xc8, 0x03, 0xd4, - 0x79, 0xcd, 0xfc, 0x88, 0x3b, 0x85, 0x61, 0x52, 0xe7, 0x7c, 0xca, 0x9c, - 0x9c, 0x45, 0x73, 0x6a, 0xc2, 0x7a, 0x04, 0x4e, 0xf7, 0xd3, 0x6c, 0xc4, - 0x92, 0x8a, 0xbc, 0x89, 0x7e, 0xf3, 0xd6, 0x4a, 0xd5, 0x2f, 0x60, 0xe9, - 0x13, 0x8a, 0x67, 0x6a, 0x91, 0xd4, 0xe9, 0x08, 0x21, 0x7e, 0x63, 0x96, - 0xc0, 0x53, 0xb4, 0x89, 0x02, 0x70, 0x9e, 0x28, 0x8a, 0x1f, 0xb4, 0x8e, - 0x25, 0x08, 0xc6, 0x45, 0xdf, 0xff, 0x9d, 0x02, 0xde, 0x99, 0xaa, 0x18, - 0x4c, 0xce, 0x9c, 0x4b, 0xb8, 0x33, 0xa3, 0xc1, 0xc0, 0xd3, 0xc4, 0x66, - 0xee, 0x58, 0x1d, 0xe3, 0x79, 0xde, 0x3d, 0xb3, 0x04, 0x38, 0x98, 0x47, - 0xb8, 0xc5, 0xd3, 0xf2, 0x6f, 0x71, 0x9c, 0xd4, 0x72, 0x28, 0x9c, 0xdb, - 0xf7, 0xfb, 0x6f, 0x31, 0x1d, 0xe9, 0xb9, 0x0e, 0x9a, 0xf2, 0xa2, 0xb2, - 0x8a, 0x6d, 0x92, 0xc8, 0x2a, 0x0a, 0xa9, 0x3b, 0x83, 0x99, 0xa6, 0xe7, - 0xf5, 0xee, 0xc1, 0x01, 0xfc, 0xcd, 0x34, 0x40, 0xd2, 0x2c, 0x7f, 0xe7, - 0xcc, 0xb9, 0x63, 0x2d, 0xe1, 0xe4, 0x0e, 0xe3, 0x0b, 0xa4, 0x96, 0x16, - 0x50, 0x31, 0x20, 0xd5, 0x27, 0x99, 0x56, 0xc9, 0xbd, 0xbc, 0x76, 0xa3, - 0xdb, 0x6e, 0x02, 0x51, 0xa2, 0x5a, 0xb0, 0x96, 0x48, 0x12, 0xf9, 0xc9, - 0x24, 0xb3, 0x2d, 0x76, 0x52, 0xe8, 0x25, 0x62, 0x27, 0x85, 0xea, 0x24, - 0xa7, 0x37, 0x17, 0xed, 0x02, 0x1c, 0xfe, 0x8b, 0x59, 0x66, 0x3b, 0xf4, - 0xca, 0x82, 0x64, 0xa9, 0x62, 0x93, 0xca, 0xe4, 0x06, 0xbc, 0xd0, 0x3f, - 0x69, 0x9a, 0xce, 0x74, 0x04, 0x86, 0xe6, 0xc2, 0x4b, 0x5b, 0x92, 0x76, - 0x50, 0x28, 0x27, 0xda, 0xf2, 0x2f, 0x33, 0x5d, 0xdf, 0xad, 0xa7, 0x75, - 0xc7, 0x30, 0x67, 0x85, 0xc4, 0xc9, 0x4d, 0x40, 0xd7, 0x67, 0xe0, 0xa0, - 0x07, 0xca, 0x6d, 0x93, 0x49, 0xa0, 0x81, 0x50, 0xeb, 0x73, 0x2a, 0x15, - 0x20, 0x0d, 0xb9, 0x36, 0x05, 0xbc, 0x98, 0x20, 0x92, 0x13, 0x10, 0xd1, - 0x75, 0x23, 0x61, 0x12, 0x4c, 0xbe, 0x6c, 0x41, 0xac, 0xf3, 0xd0, 0x2e, - 0x12, 0xd1, 0x12, 0xab, 0x68, 0x8a, 0x16, 0x1a, 0x94, 0x7a, 0xd0, 0x4c, - 0x58, 0x53, 0xde, 0x44, 0xb0, 0x39, 0xa1, 0x2e, 0x6d, 0x4e, 0x87, 0xaa, - 0x05, 0x9a, 0x94, 0xe1, 0xba, 0xdd, 0xc3, 0x2a, 0x28, 0xd8, 0xf7, 0x58, - 0xad, 0xb5, 0x51, 0xc1, 0x69, 0x08, 0x69, 0x03, 0x23, 0x23, 0x6d, 0xa8, - 0xd7, 0x01, 0x37, 0xa5, 0xa9, 0xcc, 0xb8, 0x0c, 0x79, 0x8b, 0x0a, 0x78, - 0xb7, 0x0b, 0x81, 0xe2, 0x88, 0xef, 0xd7, 0xf8, 0xa5, 0x16, 0x9c, 0xe6, - 0x01, 0x2f, 0x14, 0x58, 0x1e, 0x21, 0x09, 0xfd, 0xc0, 0xda, 0x42, 0xad, - 0x86, 0xea, 0xf2, 0x21, 0xd8, 0xf5, 0x49, 0x18, 0xb5, 0xcb, 0x85, 0x4a, - 0xf7, 0x6e, 0x42, 0xc9, 0xec, 0x52, 0xd7, 0x30, 0xba, 0x6d, 0xdc, 0x21, - 0x95, 0xe8, 0x74, 0xf9, 0x10, 0xee, 0x6e, 0x5e, 0xd6, 0x6a, 0x07, 0x99, - 0x5e, 0xa9, 0x27, 0x53, 0x60, 0xef, 0x75, 0x0d, 0xc2, 0x7e, 0x97, 0x4d, - 0x63, 0xb2, 0x40, 0xd2, 0x60, 0xf7, 0x4d, 0x01, 0x6f, 0x19, 0x54, 0xc6, - 0xdc, 0x94, 0x32, 0x70, 0x93, 0x30, 0xd5, 0x7e, 0x29, 0x3b, 0x37, 0x29, - 0x86, 0x9c, 0x51, 0x2f, 0x92, 0xf0, 0x59, 0xbf, 0xef, 0x3e, 0xd9, 0x12, - 0x28, 0x44, 0xd9, 0x13, 0x59, 0x3d, 0xf9, 0x15, 0x16, 0x22, 0x5b, 0x13, - 0xf0, 0x4b, 0xa9, 0xcb, 0xb5, 0xad, 0x6b, 0xb4, 0xa9, 0xcb, 0xb1, 0xaf, - 0x81, 0x36, 0x75, 0x0d, 0x84, 0x56, 0x21, 0xac, 0xcb, 0x29, 0x3f, 0x8d, - 0xa8, 0x52, 0x30, 0xee, 0xe0, 0x7a, 0x2d, 0x4e, 0xf0, 0x44, 0xbb, 0x96, - 0x82, 0x8b, 0xf1, 0x54, 0x3b, 0x96, 0x82, 0xd9, 0xbe, 0xea, 0x72, 0xe4, - 0x03, 0x57, 0xae, 0x14, 0x2e, 0x04, 0x8b, 0x23, 0x61, 0xc7, 0x07, 0x2a, - 0x4d, 0x38, 0xb3, 0x2c, 0x57, 0x80, 0xa8, 0xba, 0x76, 0x53, 0x5d, 0xce, - 0x68, 0x47, 0xb9, 0x63, 0xf8, 0xc8, 0x6a, 0x55, 0x9a, 0xdd, 0x1e, 0xa8, - 0x6c, 0x1e, 0xd0, 0xf2, 0xa5, 0x8d, 0xda, 0xc8, 0x45, 0x1c, 0xee, 0xc1, - 0x0b, 0x52, 0xeb, 0x81, 0xe7, 0x9d, 0x51, 0x4d, 0x21, 0xd4, 0x07, 0x60, - 0x71, 0xd6, 0x41, 0xec, 0x16, 0x76, 0x0f, 0x5e, 0x7b, 0x7a, 0x92, 0x64, - 0xc5, 0xc5, 0xad, 0xb4, 0x63, 0x3d, 0x42, 0x4d, 0xe1, 0xa9, 0x27, 0x49, - 0x58, 0xc4, 0x4c, 0x6e, 0x4f, 0x7b, 0x44, 0x8b, 0xb7, 0x7f, 0x92, 0xb4, - 0x4a, 0xf0, 0x4c, 0x0f, 0x54, 0x0e, 0x67, 0xb7, 0xc5, 0x03, 0x15, 0x51, - 0xf0, 0x18, 0xd7, 0x26, 0x74, 0xfa, 0x15, 0x97, 0x8b, 0xca, 0xf8, 0xbe, - 0x77, 0x0a, 0x32, 0x4e, 0x09, 0xf9, 0xd8, 0x7e, 0xe7, 0x7b, 0xde, 0xa9, - 0x6d, 0x71, 0xbf, 0xb5, 0x2f, 0xc6, 0x7b, 0xb5, 0xd9, 0x6c, 0xde, 0x60, - 0xf2, 0x77, 0x7c, 0x7c, 0xbc, 0x28, 0x13, 0x1c, 0x46, 0xea, 0xf0, 0xac, - 0x7f, 0x55, 0xea, 0x0d, 0x1b, 0xc1, 0x2b, 0x44, 0x9c, 0x27, 0x67, 0xa3, - 0xe2, 0x3b, 0x54, 0x41, 0x6f, 0x3d, 0xaf, 0x7f, 0x6d, 0x23, 0xff, 0x20, - 0x0a, 0x99, 0x80, 0x49, 0x62, 0x6e, 0x9a, 0xd6, 0xa0, 0x5e, 0xca, 0x77, - 0xc1, 0x5e, 0x8b, 0x24, 0xf8, 0x1f, 0x21, 0xb8, 0xe3, 0xb6, 0xfd, 0xd1, - 0x5c, 0xf7, 0xa9, 0xcc, 0xc1, 0x60, 0x4e, 0x12, 0x2d, 0x33, 0xcd, 0x8e, - 0x38, 0x58, 0x3c, 0x83, 0x79, 0x3e, 0x24, 0x87, 0x17, 0xd4, 0xbf, 0x97, - 0x75, 0x4e, 0xce, 0x7e, 0xe0, 0x3b, 0xc0, 0x7f, 0xd3, 0x41, 0x00, 0x46, - 0xf4, 0x03, 0x4b, 0x19, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, - 0xae, 0x42, 0x60, 0x82 -}; + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, + 0x08, 0x06, 0x00, 0x00, 0x00, 0xc5, 0x78, 0x1b, 0xeb, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x05, 0x81, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x5a, 0xe1, + 0x75, 0xdb, 0x36, 0x10, 0x06, 0x48, 0x89, 0x94, 0xe3, 0x1f, 0x55, 0x27, + 0xa8, 0x32, 0x41, 0xec, 0x09, 0x2a, 0x4f, 0x60, 0x67, 0x82, 0xba, 0x13, + 0xc4, 0x9e, 0x40, 0xee, 0x04, 0x75, 0x27, 0x88, 0x3d, 0x81, 0xed, 0x09, + 0xac, 0x4c, 0x10, 0x65, 0x02, 0xa9, 0x13, 0x48, 0x7d, 0x4f, 0x29, 0x49, + 0x50, 0x24, 0x7a, 0x47, 0x91, 0x0d, 0x09, 0x1e, 0x40, 0x90, 0x92, 0x5e, + 0x9c, 0xbc, 0x7c, 0xef, 0xe9, 0xf9, 0x49, 0x00, 0x0e, 0x38, 0xe0, 0x70, + 0xdf, 0xdd, 0xc1, 0x8c, 0xfd, 0xc0, 0xcb, 0x06, 0x67, 0x07, 0x42, 0x10, + 0xc4, 0x63, 0xd7, 0x65, 0xe7, 0x52, 0xca, 0x61, 0x65, 0x42, 0xce, 0x57, + 0x49, 0xc2, 0x9e, 0x8e, 0x8e, 0xfa, 0x53, 0xf6, 0xad, 0x20, 0x14, 0xe2, + 0x36, 0x8c, 0x84, 0x34, 0x7e, 0x84, 0xf8, 0x93, 0x7d, 0x0b, 0xb0, 0x52, + 0xe6, 0x80, 0x4a, 0xed, 0xd5, 0xe4, 0x82, 0x20, 0x18, 0x71, 0xc7, 0x9d, + 0xb7, 0x19, 0x23, 0xd3, 0xe4, 0xec, 0xe8, 0xe8, 0x68, 0xca, 0xf6, 0x84, + 0x1e, 0x6b, 0x09, 0xbc, 0x13, 0x9f, 0x3f, 0xc7, 0x23, 0xd7, 0xe5, 0xc3, + 0xc1, 0xa0, 0x37, 0xc3, 0x3b, 0x51, 0xb4, 0xb9, 0x6e, 0xef, 0x5d, 0x2a, + 0x65, 0xb9, 0xf7, 0xc2, 0xe1, 0xee, 0x4d, 0x79, 0x7c, 0x2a, 0x53, 0xfc, + 0x3e, 0x2a, 0x8d, 0x39, 0x87, 0x3f, 0x53, 0x1b, 0xf9, 0x7b, 0x05, 0x4e, + 0x14, 0x09, 0xf1, 0x5e, 0x35, 0x9b, 0x28, 0x12, 0xef, 0x8b, 0x8b, 0x1f, + 0x89, 0xf8, 0x63, 0xb5, 0x6d, 0x73, 0xae, 0xca, 0x09, 0x02, 0x71, 0xa9, + 0x98, 0xdd, 0x73, 0x21, 0x3f, 0x37, 0xd7, 0xa5, 0x2a, 0x1f, 0x4f, 0xde, + 0x72, 0x99, 0x76, 0x26, 0x97, 0x9b, 0x12, 0x4e, 0x3c, 0xa2, 0x7b, 0xc8, + 0x05, 0xee, 0x24, 0x1c, 0xce, 0x49, 0xe5, 0xd7, 0x34, 0x79, 0x0d, 0xe6, + 0xb4, 0x20, 0x64, 0xcd, 0xd5, 0xf1, 0xb0, 0x14, 0xdc, 0x94, 0xa1, 0x4e, + 0xbe, 0x4c, 0xd3, 0x33, 0x55, 0x16, 0x85, 0x46, 0x85, 0x9a, 0x95, 0xd1, + 0x40, 0xca, 0xc7, 0xc1, 0xc0, 0x7f, 0x4b, 0x35, 0x65, 0xa7, 0x22, 0xd9, + 0x98, 0xb5, 0x82, 0x9d, 0x52, 0x8e, 0xa9, 0xd1, 0xa0, 0xcc, 0x22, 0xff, + 0xe8, 0x27, 0x97, 0xe9, 0xb5, 0xb6, 0x35, 0x49, 0x7e, 0x37, 0x8f, 0x67, + 0xab, 0x7a, 0x3b, 0x87, 0xb5, 0x38, 0xcf, 0x2a, 0xaf, 0xa9, 0x30, 0x2a, + 0xe4, 0xb8, 0xee, 0x84, 0x29, 0xca, 0x70, 0xce, 0xee, 0x06, 0xbe, 0xf7, + 0x1a, 0x3f, 0x9c, 0xc9, 0x9b, 0x7c, 0xf2, 0xd2, 0x6a, 0xd9, 0xb4, 0x69, + 0x27, 0xb1, 0x0d, 0xbd, 0x1b, 0xca, 0x52, 0x9a, 0x56, 0x28, 0xd3, 0xf7, + 0xfa, 0x99, 0x7c, 0xc9, 0xe4, 0x3d, 0x53, 0x94, 0x12, 0x22, 0xee, 0xe6, + 0xea, 0xb3, 0x4b, 0xaa, 0x3a, 0x00, 0x70, 0x0a, 0x54, 0xdf, 0x38, 0x8e, + 0x7f, 0x5d, 0xaf, 0xd7, 0x27, 0x4d, 0xbb, 0xa7, 0x9b, 0xc7, 0x34, 0x3e, + 0x88, 0xa2, 0x3b, 0x75, 0x1d, 0x5d, 0xe6, 0xc9, 0x42, 0x97, 0xaa, 0xa0, + 0xa8, 0x15, 0xbf, 0xec, 0x13, 0x30, 0xff, 0xbc, 0xbc, 0x16, 0x54, 0x5e, + 0xd7, 0x57, 0x6b, 0x72, 0xae, 0x2b, 0x15, 0xff, 0xcf, 0x87, 0x9d, 0x76, + 0xe6, 0x00, 0xf0, 0x7d, 0xff, 0x27, 0x5d, 0x9b, 0x96, 0x58, 0xfb, 0xfd, + 0xfe, 0x02, 0x78, 0x05, 0x95, 0x2a, 0x94, 0x18, 0x0a, 0xb1, 0x79, 0x07, + 0x7f, 0xff, 0x60, 0x16, 0xc8, 0x4c, 0x36, 0x8c, 0x2f, 0x80, 0x20, 0xdf, + 0x14, 0x1b, 0xb1, 0x25, 0x49, 0x39, 0x4b, 0x92, 0xe4, 0x83, 0x8d, 0x0b, + 0x46, 0x80, 0xc9, 0xdd, 0x30, 0xe5, 0x1e, 0xf7, 0x7a, 0xbd, 0x4f, 0xac, + 0x0b, 0xf0, 0x02, 0x2a, 0xf6, 0xbb, 0x6c, 0x3a, 0x25, 0xf4, 0x8c, 0xa1, + 0x88, 0x9f, 0x9b, 0xe2, 0x38, 0x5b, 0xc2, 0xa4, 0x88, 0x96, 0x75, 0x45, + 0xee, 0x18, 0x96, 0xb6, 0xf6, 0xfb, 0x6f, 0x18, 0x5e, 0x59, 0x07, 0xa6, + 0xf9, 0x27, 0x3f, 0x01, 0x12, 0xd4, 0x3d, 0xde, 0xc9, 0x6d, 0xe7, 0x71, + 0x54, 0xe5, 0x2e, 0xe9, 0xec, 0x17, 0x17, 0xe6, 0x70, 0xa7, 0xb5, 0x4b, + 0xe5, 0x8c, 0x4f, 0x74, 0x4a, 0x11, 0xf7, 0x78, 0xd5, 0x14, 0xdb, 0x91, + 0x91, 0x42, 0x91, 0x9c, 0xa5, 0x0c, 0x42, 0x19, 0x29, 0xc7, 0xe5, 0x36, + 0xe0, 0x88, 0x9f, 0x55, 0xa1, 0xb8, 0x20, 0x5c, 0x58, 0x4d, 0x10, 0x70, + 0x92, 0xe3, 0xf0, 0x19, 0x4c, 0x33, 0xcb, 0xbe, 0x4a, 0x39, 0x02, 0x6e, + 0xb9, 0x64, 0x44, 0xd4, 0x91, 0x26, 0xe9, 0xf5, 0xab, 0x57, 0x83, 0xdb, + 0xca, 0xf0, 0x2c, 0x7e, 0x8c, 0x97, 0x4a, 0xd7, 0x99, 0xc3, 0xf9, 0x34, + 0x49, 0x36, 0x7f, 0x59, 0xdd, 0x43, 0x53, 0x3e, 0x43, 0xd9, 0x6f, 0x76, + 0x67, 0xea, 0x7d, 0x97, 0x51, 0x14, 0x5d, 0xe8, 0xe6, 0xc8, 0x03, 0xd4, + 0x79, 0xcd, 0xfc, 0x88, 0x3b, 0x85, 0x61, 0x52, 0xe7, 0x7c, 0xca, 0x9c, + 0x9c, 0x45, 0x73, 0x6a, 0xc2, 0x7a, 0x04, 0x4e, 0xf7, 0xd3, 0x6c, 0xc4, + 0x92, 0x8a, 0xbc, 0x89, 0x7e, 0xf3, 0xd6, 0x4a, 0xd5, 0x2f, 0x60, 0xe9, + 0x13, 0x8a, 0x67, 0x6a, 0x91, 0xd4, 0xe9, 0x08, 0x21, 0x7e, 0x63, 0x96, + 0xc0, 0x53, 0xb4, 0x89, 0x02, 0x70, 0x9e, 0x28, 0x8a, 0x1f, 0xb4, 0x8e, + 0x25, 0x08, 0xc6, 0x45, 0xdf, 0xff, 0x9d, 0x02, 0xde, 0x99, 0xaa, 0x18, + 0x4c, 0xce, 0x9c, 0x4b, 0xb8, 0x33, 0xa3, 0xc1, 0xc0, 0xd3, 0xc4, 0x66, + 0xee, 0x58, 0x1d, 0xe3, 0x79, 0xde, 0x3d, 0xb3, 0x04, 0x38, 0x98, 0x47, + 0xb8, 0xc5, 0xd3, 0xf2, 0x6f, 0x71, 0x9c, 0xd4, 0x72, 0x28, 0x9c, 0xdb, + 0xf7, 0xfb, 0x6f, 0x31, 0x1d, 0xe9, 0xb9, 0x0e, 0x9a, 0xf2, 0xa2, 0xb2, + 0x8a, 0x6d, 0x92, 0xc8, 0x2a, 0x0a, 0xa9, 0x3b, 0x83, 0x99, 0xa6, 0xe7, + 0xf5, 0xee, 0xc1, 0x01, 0xfc, 0xcd, 0x34, 0x40, 0xd2, 0x2c, 0x7f, 0xe7, + 0xcc, 0xb9, 0x63, 0x2d, 0xe1, 0xe4, 0x0e, 0xe3, 0x0b, 0xa4, 0x96, 0x16, + 0x50, 0x31, 0x20, 0xd5, 0x27, 0x99, 0x56, 0xc9, 0xbd, 0xbc, 0x76, 0xa3, + 0xdb, 0x6e, 0x02, 0x51, 0xa2, 0x5a, 0xb0, 0x96, 0x48, 0x12, 0xf9, 0xc9, + 0x24, 0xb3, 0x2d, 0x76, 0x52, 0xe8, 0x25, 0x62, 0x27, 0x85, 0xea, 0x24, + 0xa7, 0x37, 0x17, 0xed, 0x02, 0x1c, 0xfe, 0x8b, 0x59, 0x66, 0x3b, 0xf4, + 0xca, 0x82, 0x64, 0xa9, 0x62, 0x93, 0xca, 0xe4, 0x06, 0xbc, 0xd0, 0x3f, + 0x69, 0x9a, 0xce, 0x74, 0x04, 0x86, 0xe6, 0xc2, 0x4b, 0x5b, 0x92, 0x76, + 0x50, 0x28, 0x27, 0xda, 0xf2, 0x2f, 0x33, 0x5d, 0xdf, 0xad, 0xa7, 0x75, + 0xc7, 0x30, 0x67, 0x85, 0xc4, 0xc9, 0x4d, 0x40, 0xd7, 0x67, 0xe0, 0xa0, + 0x07, 0xca, 0x6d, 0x93, 0x49, 0xa0, 0x81, 0x50, 0xeb, 0x73, 0x2a, 0x15, + 0x20, 0x0d, 0xb9, 0x36, 0x05, 0xbc, 0x98, 0x20, 0x92, 0x13, 0x10, 0xd1, + 0x75, 0x23, 0x61, 0x12, 0x4c, 0xbe, 0x6c, 0x41, 0xac, 0xf3, 0xd0, 0x2e, + 0x12, 0xd1, 0x12, 0xab, 0x68, 0x8a, 0x16, 0x1a, 0x94, 0x7a, 0xd0, 0x4c, + 0x58, 0x53, 0xde, 0x44, 0xb0, 0x39, 0xa1, 0x2e, 0x6d, 0x4e, 0x87, 0xaa, + 0x05, 0x9a, 0x94, 0xe1, 0xba, 0xdd, 0xc3, 0x2a, 0x28, 0xd8, 0xf7, 0x58, + 0xad, 0xb5, 0x51, 0xc1, 0x69, 0x08, 0x69, 0x03, 0x23, 0x23, 0x6d, 0xa8, + 0xd7, 0x01, 0x37, 0xa5, 0xa9, 0xcc, 0xb8, 0x0c, 0x79, 0x8b, 0x0a, 0x78, + 0xb7, 0x0b, 0x81, 0xe2, 0x88, 0xef, 0xd7, 0xf8, 0xa5, 0x16, 0x9c, 0xe6, + 0x01, 0x2f, 0x14, 0x58, 0x1e, 0x21, 0x09, 0xfd, 0xc0, 0xda, 0x42, 0xad, + 0x86, 0xea, 0xf2, 0x21, 0xd8, 0xf5, 0x49, 0x18, 0xb5, 0xcb, 0x85, 0x4a, + 0xf7, 0x6e, 0x42, 0xc9, 0xec, 0x52, 0xd7, 0x30, 0xba, 0x6d, 0xdc, 0x21, + 0x95, 0xe8, 0x74, 0xf9, 0x10, 0xee, 0x6e, 0x5e, 0xd6, 0x6a, 0x07, 0x99, + 0x5e, 0xa9, 0x27, 0x53, 0x60, 0xef, 0x75, 0x0d, 0xc2, 0x7e, 0x97, 0x4d, + 0x63, 0xb2, 0x40, 0xd2, 0x60, 0xf7, 0x4d, 0x01, 0x6f, 0x19, 0x54, 0xc6, + 0xdc, 0x94, 0x32, 0x70, 0x93, 0x30, 0xd5, 0x7e, 0x29, 0x3b, 0x37, 0x29, + 0x86, 0x9c, 0x51, 0x2f, 0x92, 0xf0, 0x59, 0xbf, 0xef, 0x3e, 0xd9, 0x12, + 0x28, 0x44, 0xd9, 0x13, 0x59, 0x3d, 0xf9, 0x15, 0x16, 0x22, 0x5b, 0x13, + 0xf0, 0x4b, 0xa9, 0xcb, 0xb5, 0xad, 0x6b, 0xb4, 0xa9, 0xcb, 0xb1, 0xaf, + 0x81, 0x36, 0x75, 0x0d, 0x84, 0x56, 0x21, 0xac, 0xcb, 0x29, 0x3f, 0x8d, + 0xa8, 0x52, 0x30, 0xee, 0xe0, 0x7a, 0x2d, 0x4e, 0xf0, 0x44, 0xbb, 0x96, + 0x82, 0x8b, 0xf1, 0x54, 0x3b, 0x96, 0x82, 0xd9, 0xbe, 0xea, 0x72, 0xe4, + 0x03, 0x57, 0xae, 0x14, 0x2e, 0x04, 0x8b, 0x23, 0x61, 0xc7, 0x07, 0x2a, + 0x4d, 0x38, 0xb3, 0x2c, 0x57, 0x80, 0xa8, 0xba, 0x76, 0x53, 0x5d, 0xce, + 0x68, 0x47, 0xb9, 0x63, 0xf8, 0xc8, 0x6a, 0x55, 0x9a, 0xdd, 0x1e, 0xa8, + 0x6c, 0x1e, 0xd0, 0xf2, 0xa5, 0x8d, 0xda, 0xc8, 0x45, 0x1c, 0xee, 0xc1, + 0x0b, 0x52, 0xeb, 0x81, 0xe7, 0x9d, 0x51, 0x4d, 0x21, 0xd4, 0x07, 0x60, + 0x71, 0xd6, 0x41, 0xec, 0x16, 0x76, 0x0f, 0x5e, 0x7b, 0x7a, 0x92, 0x64, + 0xc5, 0xc5, 0xad, 0xb4, 0x63, 0x3d, 0x42, 0x4d, 0xe1, 0xa9, 0x27, 0x49, + 0x58, 0xc4, 0x4c, 0x6e, 0x4f, 0x7b, 0x44, 0x8b, 0xb7, 0x7f, 0x92, 0xb4, + 0x4a, 0xf0, 0x4c, 0x0f, 0x54, 0x0e, 0x67, 0xb7, 0xc5, 0x03, 0x15, 0x51, + 0xf0, 0x18, 0xd7, 0x26, 0x74, 0xfa, 0x15, 0x97, 0x8b, 0xca, 0xf8, 0xbe, + 0x77, 0x0a, 0x32, 0x4e, 0x09, 0xf9, 0xd8, 0x7e, 0xe7, 0x7b, 0xde, 0xa9, + 0x6d, 0x71, 0xbf, 0xb5, 0x2f, 0xc6, 0x7b, 0xb5, 0xd9, 0x6c, 0xde, 0x60, + 0xf2, 0x77, 0x7c, 0x7c, 0xbc, 0x28, 0x13, 0x1c, 0x46, 0xea, 0xf0, 0xac, + 0x7f, 0x55, 0xea, 0x0d, 0x1b, 0xc1, 0x2b, 0x44, 0x9c, 0x27, 0x67, 0xa3, + 0xe2, 0x3b, 0x54, 0x41, 0x6f, 0x3d, 0xaf, 0x7f, 0x6d, 0x23, 0xff, 0x20, + 0x0a, 0x99, 0x80, 0x49, 0x62, 0x6e, 0x9a, 0xd6, 0xa0, 0x5e, 0xca, 0x77, + 0xc1, 0x5e, 0x8b, 0x24, 0xf8, 0x1f, 0x21, 0xb8, 0xe3, 0xb6, 0xfd, 0xd1, + 0x5c, 0xf7, 0xa9, 0xcc, 0xc1, 0x60, 0x4e, 0x12, 0x2d, 0x33, 0xcd, 0x8e, + 0x38, 0x58, 0x3c, 0x83, 0x79, 0x3e, 0x24, 0x87, 0x17, 0xd4, 0xbf, 0x97, + 0x75, 0x4e, 0xce, 0x7e, 0xe0, 0x3b, 0xc0, 0x7f, 0xd3, 0x41, 0x00, 0x46, + 0xf4, 0x03, 0x4b, 0x19, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, + 0xae, 0x42, 0x60, 0x82}; unsigned char HelpIcon_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xc5, 0x78, 0x1b, 0xeb, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x03, 0x7c, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x99, 0xd1, - 0x51, 0xe3, 0x30, 0x10, 0x86, 0x57, 0x4a, 0xec, 0xc0, 0x0c, 0x0f, 0xe9, - 0xe0, 0x7c, 0x1d, 0xa4, 0x03, 0x42, 0x05, 0xd0, 0x01, 0xb9, 0x0a, 0xe0, - 0x2a, 0x20, 0x57, 0x01, 0x74, 0x40, 0xa8, 0x80, 0x50, 0x01, 0xb9, 0x0a, - 0xc8, 0x55, 0x80, 0x3b, 0x20, 0x0f, 0xcc, 0xd9, 0x96, 0xb1, 0xf7, 0x56, - 0x26, 0xb9, 0x89, 0x6d, 0xd9, 0x20, 0x5b, 0xca, 0x64, 0x18, 0x7f, 0x33, - 0x66, 0x90, 0xe2, 0xb1, 0xfc, 0xaf, 0xb4, 0xd2, 0xee, 0x1a, 0xa0, 0xa3, - 0xa3, 0xa3, 0xe3, 0x2b, 0xc3, 0xc0, 0x30, 0x88, 0x38, 0x0c, 0xc3, 0x70, - 0x08, 0xd0, 0xf7, 0xa8, 0xe5, 0x71, 0x8e, 0xab, 0x34, 0xe5, 0xab, 0x24, - 0xc1, 0xd5, 0xd1, 0x91, 0xbb, 0x04, 0xcb, 0x18, 0x11, 0x94, 0x89, 0x10, - 0xe2, 0x92, 0x31, 0x7e, 0x4c, 0x8d, 0x71, 0xcd, 0xad, 0x2b, 0x1a, 0x72, - 0xc1, 0x19, 0xce, 0x1d, 0xc7, 0x79, 0x60, 0x8c, 0xad, 0xc0, 0x30, 0xad, - 0x04, 0x05, 0x41, 0x3c, 0x66, 0x3d, 0xb8, 0xfa, 0x40, 0x44, 0x05, 0xe8, - 0x23, 0xc0, 0x1d, 0xa4, 0xe9, 0xec, 0xf0, 0xf0, 0xd0, 0x07, 0x43, 0x34, - 0x12, 0x24, 0x67, 0x24, 0x8a, 0xe3, 0x29, 0x20, 0x5c, 0x40, 0x6b, 0xd0, - 0xe7, 0x8c, 0x4d, 0x5d, 0xd7, 0xbd, 0x03, 0x03, 0x68, 0x0b, 0x0a, 0x82, - 0xc0, 0x63, 0xbc, 0xf7, 0x48, 0xff, 0x7a, 0x35, 0xb7, 0xf9, 0x24, 0xd6, - 0x67, 0x0c, 0x68, 0x16, 0x70, 0x08, 0xc8, 0x86, 0x34, 0xd2, 0x88, 0xfa, - 0x87, 0x50, 0xfd, 0x26, 0x37, 0x07, 0xae, 0xfb, 0x13, 0x5a, 0xa2, 0x25, - 0xa8, 0x56, 0x0c, 0xc2, 0x82, 0xfe, 0xce, 0x07, 0x03, 0xe7, 0xae, 0xca, - 0x37, 0x5e, 0x5f, 0x5f, 0x47, 0x8e, 0xeb, 0x5e, 0x20, 0xc2, 0x58, 0xf5, - 0x0c, 0x32, 0xc0, 0xd2, 0x75, 0x9c, 0x13, 0x1b, 0xbe, 0x55, 0x42, 0x8a, - 0x09, 0x23, 0xf1, 0x4c, 0x17, 0xe6, 0xaf, 0xe8, 0x39, 0x8e, 0xe3, 0x63, - 0xd0, 0x24, 0x8a, 0xa2, 0xab, 0xf2, 0xb3, 0xb2, 0xe7, 0xdd, 0x83, 0x6d, - 0xb2, 0x5d, 0x4c, 0x21, 0x26, 0x12, 0xe2, 0x56, 0xfe, 0x06, 0x0d, 0xa9, - 0x34, 0x92, 0x10, 0xd7, 0x60, 0x13, 0x1a, 0xe0, 0xa6, 0x24, 0x86, 0x2c, - 0x0c, 0x06, 0xa8, 0x12, 0x45, 0xfd, 0x63, 0xb0, 0xc1, 0x7a, 0xc0, 0xdc, - 0x60, 0xc2, 0xb0, 0x05, 0x55, 0xa2, 0x68, 0xf6, 0x9f, 0xc0, 0x06, 0x72, - 0x59, 0x15, 0x7d, 0xa6, 0xcd, 0x32, 0xab, 0x42, 0xce, 0x88, 0xc2, 0x70, - 0xe7, 0x60, 0x92, 0x8a, 0xd9, 0x31, 0x3b, 0xc8, 0x16, 0x25, 0xe3, 0x09, - 0xf1, 0x08, 0x26, 0x09, 0x43, 0x71, 0x51, 0x10, 0x64, 0x67, 0x19, 0xac, - 0x51, 0x19, 0x90, 0xf8, 0xa6, 0xf3, 0x0c, 0x5e, 0xff, 0x2b, 0x3b, 0xcb, - 0x37, 0xe1, 0x06, 0x2c, 0x92, 0x85, 0x40, 0x2c, 0x3b, 0xcf, 0xfe, 0x13, - 0x45, 0xf1, 0x99, 0xce, 0x33, 0xea, 0x05, 0x15, 0x62, 0xb4, 0x24, 0x49, - 0x7e, 0x83, 0x6d, 0x52, 0x98, 0xe7, 0x3b, 0xf4, 0xe2, 0xc4, 0x4a, 0x41, - 0xe4, 0x2b, 0xa3, 0x42, 0xd7, 0xd2, 0x64, 0x10, 0x59, 0x05, 0xe7, 0x90, - 0x37, 0x1a, 0x63, 0x23, 0xd0, 0xa0, 0x52, 0x50, 0x92, 0xb0, 0xfc, 0x4e, - 0x86, 0x60, 0x3f, 0x1c, 0x21, 0x28, 0xad, 0xf0, 0x0b, 0x5d, 0x5a, 0x3b, - 0x6a, 0xcd, 0x92, 0x43, 0xaf, 0xd0, 0xde, 0x89, 0x20, 0x45, 0x1c, 0x67, - 0x4a, 0xd0, 0x87, 0x03, 0xed, 0x25, 0x35, 0x82, 0x98, 0xbf, 0xdd, 0xa2, - 0x64, 0x4c, 0x6b, 0x2d, 0x37, 0x45, 0x6e, 0xdd, 0x85, 0x2e, 0x2d, 0x43, - 0xd6, 0x08, 0x7a, 0xf3, 0x0b, 0x1d, 0x1e, 0xec, 0x04, 0x59, 0x8b, 0xd8, - 0x02, 0x41, 0xab, 0x0e, 0x51, 0x29, 0x68, 0xbd, 0xa3, 0x6d, 0x5b, 0x67, - 0x68, 0x2d, 0x60, 0xdc, 0xa2, 0xd7, 0x83, 0xd3, 0xed, 0xb6, 0x4c, 0x12, - 0x41, 0x83, 0x5a, 0x1f, 0x62, 0x54, 0xd0, 0xc8, 0xdd, 0xcc, 0xfb, 0xda, - 0x79, 0x8f, 0x2e, 0x29, 0x62, 0xee, 0x20, 0x65, 0x85, 0x83, 0xf6, 0x23, - 0x6a, 0x05, 0x51, 0xd8, 0xb1, 0xc8, 0xb5, 0x01, 0x2f, 0x6d, 0x04, 0xa6, - 0x1b, 0x64, 0xd1, 0x05, 0x0a, 0x4b, 0xdb, 0xe8, 0x61, 0xbe, 0x4e, 0xec, - 0x5e, 0xf2, 0x79, 0x50, 0x6c, 0x24, 0x0f, 0x52, 0x51, 0x4a, 0x21, 0x22, - 0x71, 0x0b, 0xa6, 0x91, 0x02, 0x0a, 0x01, 0xe3, 0x8b, 0x62, 0x27, 0x6a, - 0x4d, 0x10, 0x45, 0x53, 0x45, 0x92, 0xe7, 0x81, 0x69, 0x54, 0xb3, 0x24, - 0x73, 0x22, 0x93, 0x83, 0xc9, 0xa5, 0x56, 0xce, 0x88, 0x2d, 0xcc, 0xce, - 0x06, 0x2a, 0xed, 0x5e, 0xaa, 0x8a, 0x23, 0x26, 0x44, 0xad, 0xc5, 0x58, - 0x35, 0x98, 0x12, 0x21, 0xe2, 0xeb, 0x0a, 0x51, 0x63, 0x68, 0xc8, 0x5f, - 0xa5, 0xa1, 0xec, 0x26, 0x91, 0x39, 0x64, 0x06, 0xa9, 0x7a, 0x01, 0xb9, - 0x3c, 0x74, 0x2c, 0x9a, 0xcd, 0x8a, 0x88, 0x1f, 0xd5, 0x65, 0xac, 0x76, - 0xa2, 0xb4, 0x0a, 0x8d, 0x59, 0x09, 0x58, 0xc8, 0xb5, 0xcd, 0xd4, 0x49, - 0x17, 0xa3, 0x73, 0x2b, 0xc5, 0x39, 0x22, 0xfb, 0x73, 0x70, 0xd0, 0x5f, - 0x6e, 0xe2, 0x3f, 0x29, 0x96, 0x73, 0x3e, 0x4a, 0x29, 0x7c, 0xa2, 0xb3, - 0x4d, 0xbe, 0xa8, 0x07, 0x9f, 0x80, 0x12, 0xca, 0x89, 0x6e, 0x89, 0xb8, - 0x51, 0x6d, 0x5b, 0x96, 0xb0, 0x10, 0xd8, 0x14, 0xcc, 0xb1, 0xea, 0xf7, - 0xf8, 0xe4, 0x2d, 0x49, 0x67, 0x50, 0x88, 0xae, 0x75, 0x45, 0x7d, 0x3a, - 0xda, 0xde, 0x66, 0x30, 0x18, 0xfc, 0xc2, 0x34, 0x39, 0x01, 0xd0, 0x0b, - 0x4b, 0xd4, 0xe0, 0x7c, 0xe0, 0x3a, 0xdf, 0xfb, 0xfd, 0xfe, 0x03, 0x3d, - 0xb3, 0x54, 0xdb, 0x4e, 0x11, 0x66, 0x3b, 0xf3, 0x29, 0x49, 0x10, 0x88, - 0x09, 0xf9, 0xd0, 0x53, 0x9d, 0x3f, 0x28, 0xae, 0x97, 0x30, 0x8c, 0xee, - 0x55, 0x25, 0x64, 0x5a, 0x9e, 0x93, 0x36, 0x3e, 0x65, 0xec, 0x0b, 0x5e, - 0x56, 0xc8, 0x67, 0xbd, 0x53, 0x60, 0x38, 0x26, 0x3f, 0xf1, 0xf0, 0xdd, - 0x4f, 0x36, 0xcb, 0xc7, 0x67, 0xef, 0x81, 0x2e, 0xf9, 0x15, 0x5f, 0x38, - 0x4e, 0xaf, 0xf6, 0x63, 0x97, 0x14, 0x45, 0x1f, 0x05, 0x4a, 0xe7, 0x50, - 0x13, 0x9f, 0xda, 0x1b, 0xda, 0xce, 0xd4, 0x5e, 0x52, 0x25, 0xaa, 0x2e, - 0x40, 0x6e, 0xb4, 0x29, 0xec, 0x0a, 0xca, 0xc9, 0x66, 0xb4, 0x51, 0xfc, - 0x28, 0xf6, 0x0b, 0x91, 0x58, 0x4f, 0x63, 0xac, 0x92, 0x9f, 0xa9, 0x1d, - 0x84, 0x45, 0xbb, 0x40, 0x8a, 0x10, 0xe2, 0xed, 0xdc, 0x66, 0x3e, 0xd6, - 0xd1, 0xd1, 0xd1, 0xb1, 0xff, 0xfc, 0x03, 0x12, 0x6b, 0xff, 0x19, 0x59, - 0x42, 0x0e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, - 0x42, 0x60, 0x82 -}; + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, + 0x08, 0x06, 0x00, 0x00, 0x00, 0xc5, 0x78, 0x1b, 0xeb, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x03, 0x7c, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x99, 0xd1, + 0x51, 0xe3, 0x30, 0x10, 0x86, 0x57, 0x4a, 0xec, 0xc0, 0x0c, 0x0f, 0xe9, + 0xe0, 0x7c, 0x1d, 0xa4, 0x03, 0x42, 0x05, 0xd0, 0x01, 0xb9, 0x0a, 0xe0, + 0x2a, 0x20, 0x57, 0x01, 0x74, 0x40, 0xa8, 0x80, 0x50, 0x01, 0xb9, 0x0a, + 0xc8, 0x55, 0x80, 0x3b, 0x20, 0x0f, 0xcc, 0xd9, 0x96, 0xb1, 0xf7, 0x56, + 0x26, 0xb9, 0x89, 0x6d, 0xd9, 0x20, 0x5b, 0xca, 0x64, 0x18, 0x7f, 0x33, + 0x66, 0x90, 0xe2, 0xb1, 0xfc, 0xaf, 0xb4, 0xd2, 0xee, 0x1a, 0xa0, 0xa3, + 0xa3, 0xa3, 0xe3, 0x2b, 0xc3, 0xc0, 0x30, 0x88, 0x38, 0x0c, 0xc3, 0x70, + 0x08, 0xd0, 0xf7, 0xa8, 0xe5, 0x71, 0x8e, 0xab, 0x34, 0xe5, 0xab, 0x24, + 0xc1, 0xd5, 0xd1, 0x91, 0xbb, 0x04, 0xcb, 0x18, 0x11, 0x94, 0x89, 0x10, + 0xe2, 0x92, 0x31, 0x7e, 0x4c, 0x8d, 0x71, 0xcd, 0xad, 0x2b, 0x1a, 0x72, + 0xc1, 0x19, 0xce, 0x1d, 0xc7, 0x79, 0x60, 0x8c, 0xad, 0xc0, 0x30, 0xad, + 0x04, 0x05, 0x41, 0x3c, 0x66, 0x3d, 0xb8, 0xfa, 0x40, 0x44, 0x05, 0xe8, + 0x23, 0xc0, 0x1d, 0xa4, 0xe9, 0xec, 0xf0, 0xf0, 0xd0, 0x07, 0x43, 0x34, + 0x12, 0x24, 0x67, 0x24, 0x8a, 0xe3, 0x29, 0x20, 0x5c, 0x40, 0x6b, 0xd0, + 0xe7, 0x8c, 0x4d, 0x5d, 0xd7, 0xbd, 0x03, 0x03, 0x68, 0x0b, 0x0a, 0x82, + 0xc0, 0x63, 0xbc, 0xf7, 0x48, 0xff, 0x7a, 0x35, 0xb7, 0xf9, 0x24, 0xd6, + 0x67, 0x0c, 0x68, 0x16, 0x70, 0x08, 0xc8, 0x86, 0x34, 0xd2, 0x88, 0xfa, + 0x87, 0x50, 0xfd, 0x26, 0x37, 0x07, 0xae, 0xfb, 0x13, 0x5a, 0xa2, 0x25, + 0xa8, 0x56, 0x0c, 0xc2, 0x82, 0xfe, 0xce, 0x07, 0x03, 0xe7, 0xae, 0xca, + 0x37, 0x5e, 0x5f, 0x5f, 0x47, 0x8e, 0xeb, 0x5e, 0x20, 0xc2, 0x58, 0xf5, + 0x0c, 0x32, 0xc0, 0xd2, 0x75, 0x9c, 0x13, 0x1b, 0xbe, 0x55, 0x42, 0x8a, + 0x09, 0x23, 0xf1, 0x4c, 0x17, 0xe6, 0xaf, 0xe8, 0x39, 0x8e, 0xe3, 0x63, + 0xd0, 0x24, 0x8a, 0xa2, 0xab, 0xf2, 0xb3, 0xb2, 0xe7, 0xdd, 0x83, 0x6d, + 0xb2, 0x5d, 0x4c, 0x21, 0x26, 0x12, 0xe2, 0x56, 0xfe, 0x06, 0x0d, 0xa9, + 0x34, 0x92, 0x10, 0xd7, 0x60, 0x13, 0x1a, 0xe0, 0xa6, 0x24, 0x86, 0x2c, + 0x0c, 0x06, 0xa8, 0x12, 0x45, 0xfd, 0x63, 0xb0, 0xc1, 0x7a, 0xc0, 0xdc, + 0x60, 0xc2, 0xb0, 0x05, 0x55, 0xa2, 0x68, 0xf6, 0x9f, 0xc0, 0x06, 0x72, + 0x59, 0x15, 0x7d, 0xa6, 0xcd, 0x32, 0xab, 0x42, 0xce, 0x88, 0xc2, 0x70, + 0xe7, 0x60, 0x92, 0x8a, 0xd9, 0x31, 0x3b, 0xc8, 0x16, 0x25, 0xe3, 0x09, + 0xf1, 0x08, 0x26, 0x09, 0x43, 0x71, 0x51, 0x10, 0x64, 0x67, 0x19, 0xac, + 0x51, 0x19, 0x90, 0xf8, 0xa6, 0xf3, 0x0c, 0x5e, 0xff, 0x2b, 0x3b, 0xcb, + 0x37, 0xe1, 0x06, 0x2c, 0x92, 0x85, 0x40, 0x2c, 0x3b, 0xcf, 0xfe, 0x13, + 0x45, 0xf1, 0x99, 0xce, 0x33, 0xea, 0x05, 0x15, 0x62, 0xb4, 0x24, 0x49, + 0x7e, 0x83, 0x6d, 0x52, 0x98, 0xe7, 0x3b, 0xf4, 0xe2, 0xc4, 0x4a, 0x41, + 0xe4, 0x2b, 0xa3, 0x42, 0xd7, 0xd2, 0x64, 0x10, 0x59, 0x05, 0xe7, 0x90, + 0x37, 0x1a, 0x63, 0x23, 0xd0, 0xa0, 0x52, 0x50, 0x92, 0xb0, 0xfc, 0x4e, + 0x86, 0x60, 0x3f, 0x1c, 0x21, 0x28, 0xad, 0xf0, 0x0b, 0x5d, 0x5a, 0x3b, + 0x6a, 0xcd, 0x92, 0x43, 0xaf, 0xd0, 0xde, 0x89, 0x20, 0x45, 0x1c, 0x67, + 0x4a, 0xd0, 0x87, 0x03, 0xed, 0x25, 0x35, 0x82, 0x98, 0xbf, 0xdd, 0xa2, + 0x64, 0x4c, 0x6b, 0x2d, 0x37, 0x45, 0x6e, 0xdd, 0x85, 0x2e, 0x2d, 0x43, + 0xd6, 0x08, 0x7a, 0xf3, 0x0b, 0x1d, 0x1e, 0xec, 0x04, 0x59, 0x8b, 0xd8, + 0x02, 0x41, 0xab, 0x0e, 0x51, 0x29, 0x68, 0xbd, 0xa3, 0x6d, 0x5b, 0x67, + 0x68, 0x2d, 0x60, 0xdc, 0xa2, 0xd7, 0x83, 0xd3, 0xed, 0xb6, 0x4c, 0x12, + 0x41, 0x83, 0x5a, 0x1f, 0x62, 0x54, 0xd0, 0xc8, 0xdd, 0xcc, 0xfb, 0xda, + 0x79, 0x8f, 0x2e, 0x29, 0x62, 0xee, 0x20, 0x65, 0x85, 0x83, 0xf6, 0x23, + 0x6a, 0x05, 0x51, 0xd8, 0xb1, 0xc8, 0xb5, 0x01, 0x2f, 0x6d, 0x04, 0xa6, + 0x1b, 0x64, 0xd1, 0x05, 0x0a, 0x4b, 0xdb, 0xe8, 0x61, 0xbe, 0x4e, 0xec, + 0x5e, 0xf2, 0x79, 0x50, 0x6c, 0x24, 0x0f, 0x52, 0x51, 0x4a, 0x21, 0x22, + 0x71, 0x0b, 0xa6, 0x91, 0x02, 0x0a, 0x01, 0xe3, 0x8b, 0x62, 0x27, 0x6a, + 0x4d, 0x10, 0x45, 0x53, 0x45, 0x92, 0xe7, 0x81, 0x69, 0x54, 0xb3, 0x24, + 0x73, 0x22, 0x93, 0x83, 0xc9, 0xa5, 0x56, 0xce, 0x88, 0x2d, 0xcc, 0xce, + 0x06, 0x2a, 0xed, 0x5e, 0xaa, 0x8a, 0x23, 0x26, 0x44, 0xad, 0xc5, 0x58, + 0x35, 0x98, 0x12, 0x21, 0xe2, 0xeb, 0x0a, 0x51, 0x63, 0x68, 0xc8, 0x5f, + 0xa5, 0xa1, 0xec, 0x26, 0x91, 0x39, 0x64, 0x06, 0xa9, 0x7a, 0x01, 0xb9, + 0x3c, 0x74, 0x2c, 0x9a, 0xcd, 0x8a, 0x88, 0x1f, 0xd5, 0x65, 0xac, 0x76, + 0xa2, 0xb4, 0x0a, 0x8d, 0x59, 0x09, 0x58, 0xc8, 0xb5, 0xcd, 0xd4, 0x49, + 0x17, 0xa3, 0x73, 0x2b, 0xc5, 0x39, 0x22, 0xfb, 0x73, 0x70, 0xd0, 0x5f, + 0x6e, 0xe2, 0x3f, 0x29, 0x96, 0x73, 0x3e, 0x4a, 0x29, 0x7c, 0xa2, 0xb3, + 0x4d, 0xbe, 0xa8, 0x07, 0x9f, 0x80, 0x12, 0xca, 0x89, 0x6e, 0x89, 0xb8, + 0x51, 0x6d, 0x5b, 0x96, 0xb0, 0x10, 0xd8, 0x14, 0xcc, 0xb1, 0xea, 0xf7, + 0xf8, 0xe4, 0x2d, 0x49, 0x67, 0x50, 0x88, 0xae, 0x75, 0x45, 0x7d, 0x3a, + 0xda, 0xde, 0x66, 0x30, 0x18, 0xfc, 0xc2, 0x34, 0x39, 0x01, 0xd0, 0x0b, + 0x4b, 0xd4, 0xe0, 0x7c, 0xe0, 0x3a, 0xdf, 0xfb, 0xfd, 0xfe, 0x03, 0x3d, + 0xb3, 0x54, 0xdb, 0x4e, 0x11, 0x66, 0x3b, 0xf3, 0x29, 0x49, 0x10, 0x88, + 0x09, 0xf9, 0xd0, 0x53, 0x9d, 0x3f, 0x28, 0xae, 0x97, 0x30, 0x8c, 0xee, + 0x55, 0x25, 0x64, 0x5a, 0x9e, 0x93, 0x36, 0x3e, 0x65, 0xec, 0x0b, 0x5e, + 0x56, 0xc8, 0x67, 0xbd, 0x53, 0x60, 0x38, 0x26, 0x3f, 0xf1, 0xf0, 0xdd, + 0x4f, 0x36, 0xcb, 0xc7, 0x67, 0xef, 0x81, 0x2e, 0xf9, 0x15, 0x5f, 0x38, + 0x4e, 0xaf, 0xf6, 0x63, 0x97, 0x14, 0x45, 0x1f, 0x05, 0x4a, 0xe7, 0x50, + 0x13, 0x9f, 0xda, 0x1b, 0xda, 0xce, 0xd4, 0x5e, 0x52, 0x25, 0xaa, 0x2e, + 0x40, 0x6e, 0xb4, 0x29, 0xec, 0x0a, 0xca, 0xc9, 0x66, 0xb4, 0x51, 0xfc, + 0x28, 0xf6, 0x0b, 0x91, 0x58, 0x4f, 0x63, 0xac, 0x92, 0x9f, 0xa9, 0x1d, + 0x84, 0x45, 0xbb, 0x40, 0x8a, 0x10, 0xe2, 0xed, 0xdc, 0x66, 0x3e, 0xd6, + 0xd1, 0xd1, 0xd1, 0xb1, 0xff, 0xfc, 0x03, 0x12, 0x6b, 0xff, 0x19, 0x59, + 0x42, 0x0e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, + 0x42, 0x60, 0x82}; unsigned char DiagnosticIcon_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xc5, 0x78, 0x1b, 0xeb, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x03, 0x5d, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9a, 0xe1, - 0x51, 0xdb, 0x30, 0x14, 0xc7, 0x9f, 0x9c, 0xd8, 0x49, 0xee, 0xf8, 0x90, - 0x0d, 0x9a, 0x4e, 0xd0, 0x6e, 0xd0, 0x74, 0x83, 0x76, 0x02, 0xd2, 0x09, - 0x9a, 0x4e, 0x40, 0x32, 0x41, 0xe9, 0x04, 0xc0, 0x04, 0xd0, 0x09, 0xc8, - 0x06, 0xd0, 0x09, 0x50, 0x27, 0x80, 0x0f, 0xdc, 0xc5, 0x96, 0xb1, 0x5f, - 0xdf, 0x73, 0x43, 0x6a, 0x29, 0x32, 0xc4, 0x60, 0xd9, 0xee, 0x9d, 0x7f, - 0x77, 0x3e, 0x22, 0xd9, 0x92, 0xf5, 0x47, 0xd2, 0xd3, 0xd3, 0x93, 0xc5, - 0x3a, 0x8a, 0x16, 0x02, 0xc4, 0x11, 0x54, 0x8c, 0x10, 0x70, 0x9d, 0xa4, - 0xe9, 0x99, 0x40, 0xbc, 0x18, 0x8d, 0x46, 0x92, 0xf3, 0x10, 0x71, 0x1c, - 0x2a, 0x35, 0xa7, 0xf7, 0x1d, 0x52, 0x72, 0x02, 0x15, 0x83, 0x80, 0x4b, - 0x11, 0x46, 0x0a, 0xc1, 0x29, 0x28, 0x1f, 0xe2, 0xf8, 0x33, 0xff, 0xea, - 0xfb, 0xc1, 0x39, 0x38, 0x10, 0x92, 0xa7, 0x06, 0x41, 0x19, 0x77, 0x9b, - 0xbf, 0x63, 0x70, 0x4c, 0xdf, 0x92, 0x27, 0xe1, 0xf5, 0x4c, 0x8c, 0x74, - 0x91, 0x10, 0x09, 0x55, 0xbf, 0x8b, 0x7b, 0x28, 0x77, 0xdd, 0x40, 0x05, - 0xac, 0xd7, 0xeb, 0x49, 0x14, 0x45, 0x47, 0x46, 0xdd, 0xdb, 0x4b, 0x29, - 0xf5, 0x9d, 0xe7, 0x13, 0x54, 0x00, 0xb7, 0x39, 0x5f, 0x77, 0x1f, 0x1c, - 0xb0, 0x31, 0x02, 0x4b, 0xa5, 0xe2, 0x71, 0x8a, 0x38, 0xcf, 0xdf, 0x13, - 0x00, 0xa7, 0x41, 0x10, 0x7c, 0x03, 0x47, 0x78, 0xe0, 0x90, 0x24, 0x79, - 0xf8, 0x61, 0xe6, 0xa5, 0x69, 0xb2, 0x04, 0x87, 0x38, 0x15, 0xf4, 0x68, - 0xae, 0x9f, 0xcb, 0xab, 0x12, 0xa7, 0x82, 0x9a, 0xa0, 0x13, 0xd4, 0x76, - 0x3a, 0x41, 0x6d, 0xa7, 0x13, 0xd4, 0x76, 0x3a, 0x41, 0x6d, 0xa7, 0x13, - 0xd4, 0x76, 0x3a, 0x41, 0x6d, 0xa7, 0x13, 0xd4, 0x76, 0x3a, 0x41, 0x2f, - 0xe0, 0xae, 0xe0, 0xb7, 0x13, 0xdc, 0x0b, 0xc2, 0x74, 0xbb, 0xe5, 0x16, - 0x80, 0xc7, 0x4f, 0x3e, 0x4a, 0x81, 0x13, 0x0e, 0xb0, 0xf0, 0xf5, 0xd2, - 0x20, 0x8a, 0x19, 0x97, 0x93, 0xc3, 0x41, 0xf0, 0x16, 0x2a, 0xe6, 0xb1, - 0x71, 0x42, 0x88, 0x9d, 0x1e, 0xe2, 0xc6, 0x83, 0xe7, 0xcd, 0xec, 0xd1, - 0x54, 0x94, 0x94, 0xbf, 0x4a, 0x53, 0x71, 0x36, 0x1a, 0xf9, 0x2b, 0x5b, - 0xdd, 0x9b, 0x48, 0xd5, 0xb6, 0x5c, 0x2d, 0x82, 0x6c, 0xb0, 0x48, 0x15, - 0xc7, 0x14, 0xce, 0x82, 0xd9, 0x9e, 0x25, 0x24, 0xa6, 0xe9, 0x47, 0x33, - 0x26, 0x61, 0x0a, 0x6a, 0xc4, 0x28, 0xdc, 0xdf, 0xdf, 0xbf, 0x8f, 0x54, - 0x7c, 0xb5, 0xbf, 0x18, 0x46, 0x4c, 0x84, 0xd7, 0xbb, 0xe1, 0x58, 0xbc, - 0x9e, 0xad, 0x07, 0x2b, 0x6b, 0x17, 0xc4, 0x62, 0x28, 0xc6, 0x7d, 0x09, - 0xc5, 0x31, 0x6e, 0x09, 0x4f, 0x44, 0x54, 0xf9, 0x60, 0x21, 0x2f, 0x0a, - 0x93, 0xe4, 0x0b, 0x45, 0xe9, 0x57, 0x5c, 0xc6, 0x13, 0xf4, 0x0f, 0x72, - 0x11, 0x39, 0x2d, 0x82, 0xe7, 0x8b, 0x19, 0xe9, 0xe4, 0x2b, 0x52, 0xea, - 0x4a, 0xa9, 0x87, 0x43, 0xd3, 0x10, 0xc4, 0x71, 0xfc, 0x81, 0xee, 0x9d, - 0xd8, 0xa2, 0xaf, 0x54, 0xd7, 0xd4, 0xfa, 0x92, 0x3a, 0x05, 0xd9, 0x1a, - 0xc7, 0x61, 0xe1, 0xe7, 0xca, 0xad, 0xd7, 0x6a, 0x46, 0xcf, 0xde, 0xea, - 0x65, 0xa3, 0x1b, 0xab, 0x25, 0xac, 0x4b, 0xd0, 0xa6, 0x77, 0xf4, 0x9e, - 0xa1, 0xf8, 0x77, 0x89, 0xf2, 0xd3, 0xdd, 0xf2, 0xf1, 0x4e, 0xf9, 0xda, - 0xe6, 0x50, 0xaf, 0xd7, 0xff, 0xaa, 0xe7, 0xa0, 0x1c, 0x0c, 0x06, 0x7b, - 0x87, 0x85, 0xc9, 0xba, 0xad, 0x3c, 0x21, 0xb4, 0x75, 0x0c, 0x05, 0x4e, - 0xcd, 0xe7, 0x6a, 0x13, 0x44, 0x6b, 0xc3, 0x34, 0x9f, 0xa6, 0xc6, 0x2d, - 0xa0, 0x24, 0xbe, 0xdf, 0x5f, 0x1a, 0x95, 0x4e, 0x69, 0xd8, 0xbd, 0xd1, - 0xea, 0x85, 0x9a, 0xa0, 0x17, 0xbf, 0xcf, 0xa7, 0x7d, 0xdf, 0xff, 0x09, - 0x25, 0xc9, 0x16, 0x66, 0x91, 0x59, 0xb4, 0x2d, 0x4a, 0x25, 0x5a, 0xbd, - 0xb5, 0x08, 0xca, 0xbc, 0x01, 0x1d, 0x69, 0xf3, 0x1a, 0xf6, 0x41, 0xa0, - 0x6e, 0xd2, 0xe9, 0x2c, 0x57, 0x33, 0x0c, 0xe6, 0xf9, 0xd0, 0xa4, 0x92, - 0x23, 0x4a, 0x01, 0xc7, 0x43, 0x87, 0x67, 0x40, 0x4f, 0xe1, 0xa6, 0x87, - 0x10, 0xe6, 0xbc, 0xae, 0x3c, 0x26, 0x87, 0xc3, 0xa1, 0xd9, 0x1b, 0xaf, - 0x38, 0xbd, 0x13, 0x5a, 0x59, 0xf2, 0x36, 0xb4, 0xba, 0x9d, 0x0d, 0xb9, - 0xfc, 0x8b, 0x36, 0xc3, 0x4b, 0xe6, 0x6e, 0x8f, 0x0b, 0x17, 0xc6, 0xe7, - 0xea, 0x05, 0xdd, 0xb2, 0xc5, 0x71, 0xf8, 0x3b, 0x9f, 0x26, 0x6f, 0x01, - 0x17, 0x50, 0xf9, 0x3e, 0x05, 0x2f, 0x06, 0x83, 0xbe, 0x36, 0xe9, 0xe9, - 0x28, 0x72, 0xa5, 0xa5, 0x7b, 0xbd, 0xd2, 0xdf, 0x46, 0xf0, 0x02, 0x0b, - 0x5a, 0xef, 0xa2, 0x3c, 0x38, 0x38, 0xb8, 0x86, 0x26, 0xb0, 0x2f, 0x8c, - 0xd1, 0xa7, 0x12, 0xe5, 0x77, 0xdc, 0xa6, 0x28, 0x52, 0x27, 0xd0, 0x24, - 0xa1, 0x52, 0x97, 0x86, 0xa8, 0xdb, 0x7d, 0x86, 0x5e, 0x91, 0x0f, 0x68, - 0xb1, 0x9e, 0xf5, 0xc2, 0x9e, 0xb6, 0xf5, 0xa8, 0x9f, 0xfc, 0x39, 0x5b, - 0xe3, 0xfe, 0xee, 0x60, 0x6d, 0x7e, 0x1c, 0x5d, 0x61, 0x74, 0x6e, 0x7b, - 0x87, 0x80, 0x9a, 0x09, 0xc3, 0x70, 0x0e, 0xc2, 0xb3, 0x3b, 0xa4, 0x42, - 0xac, 0x04, 0xa2, 0xe4, 0x9f, 0x98, 0x59, 0xb3, 0xcc, 0x00, 0x14, 0x5a, - 0x44, 0xde, 0x2e, 0x04, 0x41, 0x70, 0xa6, 0x55, 0x01, 0x0d, 0xc0, 0x4e, - 0x29, 0x35, 0x78, 0x01, 0x15, 0x60, 0x8a, 0x6a, 0x64, 0xc7, 0xca, 0x4e, - 0x29, 0x59, 0x57, 0xfe, 0xa0, 0x49, 0x96, 0x28, 0x76, 0x47, 0x5e, 0xc1, - 0xa9, 0x99, 0x99, 0x22, 0x9c, 0xd2, 0x16, 0xe4, 0x10, 0xda, 0x02, 0xcf, - 0x11, 0xb2, 0x56, 0x57, 0x45, 0x9f, 0xd1, 0xf0, 0xfc, 0xc9, 0x7a, 0x74, - 0xb3, 0xf7, 0xa1, 0xb9, 0x36, 0x2b, 0xf8, 0xdc, 0x26, 0x13, 0xd5, 0xc8, - 0x90, 0xb3, 0xc1, 0x46, 0x81, 0x1c, 0xd6, 0x77, 0x69, 0xfa, 0x6f, 0xce, - 0x28, 0x15, 0xfe, 0xb2, 0xad, 0x33, 0x2c, 0x8a, 0xe2, 0x0b, 0x3b, 0x26, - 0x9b, 0x87, 0x5f, 0x6b, 0x04, 0x95, 0xa5, 0x40, 0x94, 0xf3, 0x40, 0xa6, - 0x53, 0x6c, 0xc3, 0x0f, 0xfe, 0x77, 0xf2, 0xa2, 0x78, 0xae, 0xfd, 0x01, - 0xe6, 0xd4, 0x13, 0x81, 0x7c, 0xe6, 0x58, 0xc8, 0x00, 0x00, 0x00, 0x00, - 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 -}; + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, + 0x08, 0x06, 0x00, 0x00, 0x00, 0xc5, 0x78, 0x1b, 0xeb, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x03, 0x5d, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9a, 0xe1, + 0x51, 0xdb, 0x30, 0x14, 0xc7, 0x9f, 0x9c, 0xd8, 0x49, 0xee, 0xf8, 0x90, + 0x0d, 0x9a, 0x4e, 0xd0, 0x6e, 0xd0, 0x74, 0x83, 0x76, 0x02, 0xd2, 0x09, + 0x9a, 0x4e, 0x40, 0x32, 0x41, 0xe9, 0x04, 0xc0, 0x04, 0xd0, 0x09, 0xc8, + 0x06, 0xd0, 0x09, 0x50, 0x27, 0x80, 0x0f, 0xdc, 0xc5, 0x96, 0xb1, 0x5f, + 0xdf, 0x73, 0x43, 0x6a, 0x29, 0x32, 0xc4, 0x60, 0xd9, 0xee, 0x9d, 0x7f, + 0x77, 0x3e, 0x22, 0xd9, 0x92, 0xf5, 0x47, 0xd2, 0xd3, 0xd3, 0x93, 0xc5, + 0x3a, 0x8a, 0x16, 0x02, 0xc4, 0x11, 0x54, 0x8c, 0x10, 0x70, 0x9d, 0xa4, + 0xe9, 0x99, 0x40, 0xbc, 0x18, 0x8d, 0x46, 0x92, 0xf3, 0x10, 0x71, 0x1c, + 0x2a, 0x35, 0xa7, 0xf7, 0x1d, 0x52, 0x72, 0x02, 0x15, 0x83, 0x80, 0x4b, + 0x11, 0x46, 0x0a, 0xc1, 0x29, 0x28, 0x1f, 0xe2, 0xf8, 0x33, 0xff, 0xea, + 0xfb, 0xc1, 0x39, 0x38, 0x10, 0x92, 0xa7, 0x06, 0x41, 0x19, 0x77, 0x9b, + 0xbf, 0x63, 0x70, 0x4c, 0xdf, 0x92, 0x27, 0xe1, 0xf5, 0x4c, 0x8c, 0x74, + 0x91, 0x10, 0x09, 0x55, 0xbf, 0x8b, 0x7b, 0x28, 0x77, 0xdd, 0x40, 0x05, + 0xac, 0xd7, 0xeb, 0x49, 0x14, 0x45, 0x47, 0x46, 0xdd, 0xdb, 0x4b, 0x29, + 0xf5, 0x9d, 0xe7, 0x13, 0x54, 0x00, 0xb7, 0x39, 0x5f, 0x77, 0x1f, 0x1c, + 0xb0, 0x31, 0x02, 0x4b, 0xa5, 0xe2, 0x71, 0x8a, 0x38, 0xcf, 0xdf, 0x13, + 0x00, 0xa7, 0x41, 0x10, 0x7c, 0x03, 0x47, 0x78, 0xe0, 0x90, 0x24, 0x79, + 0xf8, 0x61, 0xe6, 0xa5, 0x69, 0xb2, 0x04, 0x87, 0x38, 0x15, 0xf4, 0x68, + 0xae, 0x9f, 0xcb, 0xab, 0x12, 0xa7, 0x82, 0x9a, 0xa0, 0x13, 0xd4, 0x76, + 0x3a, 0x41, 0x6d, 0xa7, 0x13, 0xd4, 0x76, 0x3a, 0x41, 0x6d, 0xa7, 0x13, + 0xd4, 0x76, 0x3a, 0x41, 0x6d, 0xa7, 0x13, 0xd4, 0x76, 0x3a, 0x41, 0x2f, + 0xe0, 0xae, 0xe0, 0xb7, 0x13, 0xdc, 0x0b, 0xc2, 0x74, 0xbb, 0xe5, 0x16, + 0x80, 0xc7, 0x4f, 0x3e, 0x4a, 0x81, 0x13, 0x0e, 0xb0, 0xf0, 0xf5, 0xd2, + 0x20, 0x8a, 0x19, 0x97, 0x93, 0xc3, 0x41, 0xf0, 0x16, 0x2a, 0xe6, 0xb1, + 0x71, 0x42, 0x88, 0x9d, 0x1e, 0xe2, 0xc6, 0x83, 0xe7, 0xcd, 0xec, 0xd1, + 0x54, 0x94, 0x94, 0xbf, 0x4a, 0x53, 0x71, 0x36, 0x1a, 0xf9, 0x2b, 0x5b, + 0xdd, 0x9b, 0x48, 0xd5, 0xb6, 0x5c, 0x2d, 0x82, 0x6c, 0xb0, 0x48, 0x15, + 0xc7, 0x14, 0xce, 0x82, 0xd9, 0x9e, 0x25, 0x24, 0xa6, 0xe9, 0x47, 0x33, + 0x26, 0x61, 0x0a, 0x6a, 0xc4, 0x28, 0xdc, 0xdf, 0xdf, 0xbf, 0x8f, 0x54, + 0x7c, 0xb5, 0xbf, 0x18, 0x46, 0x4c, 0x84, 0xd7, 0xbb, 0xe1, 0x58, 0xbc, + 0x9e, 0xad, 0x07, 0x2b, 0x6b, 0x17, 0xc4, 0x62, 0x28, 0xc6, 0x7d, 0x09, + 0xc5, 0x31, 0x6e, 0x09, 0x4f, 0x44, 0x54, 0xf9, 0x60, 0x21, 0x2f, 0x0a, + 0x93, 0xe4, 0x0b, 0x45, 0xe9, 0x57, 0x5c, 0xc6, 0x13, 0xf4, 0x0f, 0x72, + 0x11, 0x39, 0x2d, 0x82, 0xe7, 0x8b, 0x19, 0xe9, 0xe4, 0x2b, 0x52, 0xea, + 0x4a, 0xa9, 0x87, 0x43, 0xd3, 0x10, 0xc4, 0x71, 0xfc, 0x81, 0xee, 0x9d, + 0xd8, 0xa2, 0xaf, 0x54, 0xd7, 0xd4, 0xfa, 0x92, 0x3a, 0x05, 0xd9, 0x1a, + 0xc7, 0x61, 0xe1, 0xe7, 0xca, 0xad, 0xd7, 0x6a, 0x46, 0xcf, 0xde, 0xea, + 0x65, 0xa3, 0x1b, 0xab, 0x25, 0xac, 0x4b, 0xd0, 0xa6, 0x77, 0xf4, 0x9e, + 0xa1, 0xf8, 0x77, 0x89, 0xf2, 0xd3, 0xdd, 0xf2, 0xf1, 0x4e, 0xf9, 0xda, + 0xe6, 0x50, 0xaf, 0xd7, 0xff, 0xaa, 0xe7, 0xa0, 0x1c, 0x0c, 0x06, 0x7b, + 0x87, 0x85, 0xc9, 0xba, 0xad, 0x3c, 0x21, 0xb4, 0x75, 0x0c, 0x05, 0x4e, + 0xcd, 0xe7, 0x6a, 0x13, 0x44, 0x6b, 0xc3, 0x34, 0x9f, 0xa6, 0xc6, 0x2d, + 0xa0, 0x24, 0xbe, 0xdf, 0x5f, 0x1a, 0x95, 0x4e, 0x69, 0xd8, 0xbd, 0xd1, + 0xea, 0x85, 0x9a, 0xa0, 0x17, 0xbf, 0xcf, 0xa7, 0x7d, 0xdf, 0xff, 0x09, + 0x25, 0xc9, 0x16, 0x66, 0x91, 0x59, 0xb4, 0x2d, 0x4a, 0x25, 0x5a, 0xbd, + 0xb5, 0x08, 0xca, 0xbc, 0x01, 0x1d, 0x69, 0xf3, 0x1a, 0xf6, 0x41, 0xa0, + 0x6e, 0xd2, 0xe9, 0x2c, 0x57, 0x33, 0x0c, 0xe6, 0xf9, 0xd0, 0xa4, 0x92, + 0x23, 0x4a, 0x01, 0xc7, 0x43, 0x87, 0x67, 0x40, 0x4f, 0xe1, 0xa6, 0x87, + 0x10, 0xe6, 0xbc, 0xae, 0x3c, 0x26, 0x87, 0xc3, 0xa1, 0xd9, 0x1b, 0xaf, + 0x38, 0xbd, 0x13, 0x5a, 0x59, 0xf2, 0x36, 0xb4, 0xba, 0x9d, 0x0d, 0xb9, + 0xfc, 0x8b, 0x36, 0xc3, 0x4b, 0xe6, 0x6e, 0x8f, 0x0b, 0x17, 0xc6, 0xe7, + 0xea, 0x05, 0xdd, 0xb2, 0xc5, 0x71, 0xf8, 0x3b, 0x9f, 0x26, 0x6f, 0x01, + 0x17, 0x50, 0xf9, 0x3e, 0x05, 0x2f, 0x06, 0x83, 0xbe, 0x36, 0xe9, 0xe9, + 0x28, 0x72, 0xa5, 0xa5, 0x7b, 0xbd, 0xd2, 0xdf, 0x46, 0xf0, 0x02, 0x0b, + 0x5a, 0xef, 0xa2, 0x3c, 0x38, 0x38, 0xb8, 0x86, 0x26, 0xb0, 0x2f, 0x8c, + 0xd1, 0xa7, 0x12, 0xe5, 0x77, 0xdc, 0xa6, 0x28, 0x52, 0x27, 0xd0, 0x24, + 0xa1, 0x52, 0x97, 0x86, 0xa8, 0xdb, 0x7d, 0x86, 0x5e, 0x91, 0x0f, 0x68, + 0xb1, 0x9e, 0xf5, 0xc2, 0x9e, 0xb6, 0xf5, 0xa8, 0x9f, 0xfc, 0x39, 0x5b, + 0xe3, 0xfe, 0xee, 0x60, 0x6d, 0x7e, 0x1c, 0x5d, 0x61, 0x74, 0x6e, 0x7b, + 0x87, 0x80, 0x9a, 0x09, 0xc3, 0x70, 0x0e, 0xc2, 0xb3, 0x3b, 0xa4, 0x42, + 0xac, 0x04, 0xa2, 0xe4, 0x9f, 0x98, 0x59, 0xb3, 0xcc, 0x00, 0x14, 0x5a, + 0x44, 0xde, 0x2e, 0x04, 0x41, 0x70, 0xa6, 0x55, 0x01, 0x0d, 0xc0, 0x4e, + 0x29, 0x35, 0x78, 0x01, 0x15, 0x60, 0x8a, 0x6a, 0x64, 0xc7, 0xca, 0x4e, + 0x29, 0x59, 0x57, 0xfe, 0xa0, 0x49, 0x96, 0x28, 0x76, 0x47, 0x5e, 0xc1, + 0xa9, 0x99, 0x99, 0x22, 0x9c, 0xd2, 0x16, 0xe4, 0x10, 0xda, 0x02, 0xcf, + 0x11, 0xb2, 0x56, 0x57, 0x45, 0x9f, 0xd1, 0xf0, 0xfc, 0xc9, 0x7a, 0x74, + 0xb3, 0xf7, 0xa1, 0xb9, 0x36, 0x2b, 0xf8, 0xdc, 0x26, 0x13, 0xd5, 0xc8, + 0x90, 0xb3, 0xc1, 0x46, 0x81, 0x1c, 0xd6, 0x77, 0x69, 0xfa, 0x6f, 0xce, + 0x28, 0x15, 0xfe, 0xb2, 0xad, 0x33, 0x2c, 0x8a, 0xe2, 0x0b, 0x3b, 0x26, + 0x9b, 0x87, 0x5f, 0x6b, 0x04, 0x95, 0xa5, 0x40, 0x94, 0xf3, 0x40, 0xa6, + 0x53, 0x6c, 0xc3, 0x0f, 0xfe, 0x77, 0xf2, 0xa2, 0x78, 0xae, 0xfd, 0x01, + 0xe6, 0xd4, 0x13, 0x81, 0x7c, 0xe6, 0x58, 0xc8, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; unsigned char PauseButton_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, - 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x02, 0xaf, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9b, 0xdb, - 0x6d, 0x1a, 0x41, 0x14, 0x86, 0xff, 0x33, 0xcb, 0xc5, 0xc8, 0x7e, 0xa0, - 0x04, 0xd2, 0x81, 0x5d, 0x41, 0x70, 0x05, 0x90, 0x0a, 0xec, 0x54, 0x10, - 0x77, 0x90, 0x12, 0x92, 0x54, 0x60, 0x52, 0x81, 0xa1, 0x02, 0x70, 0x05, - 0xa1, 0x83, 0x6c, 0x07, 0xe1, 0x01, 0x09, 0x76, 0x66, 0x77, 0x4e, 0x66, - 0x20, 0x31, 0xcc, 0x5a, 0x8a, 0xc2, 0xee, 0x22, 0x59, 0x3a, 0xf3, 0x49, - 0x88, 0x65, 0x58, 0x66, 0xff, 0xf9, 0xe6, 0xc2, 0xd3, 0x21, 0x94, 0xd8, - 0x6c, 0xcc, 0x30, 0x49, 0x30, 0xb2, 0x8c, 0x01, 0x08, 0x7d, 0x9c, 0x80, - 0x02, 0x96, 0xcc, 0xf6, 0xb9, 0xdb, 0xed, 0x4e, 0x71, 0x06, 0x7c, 0x36, - 0xa5, 0xf8, 0x8e, 0x41, 0xfd, 0x2a, 0xd9, 0x8a, 0x02, 0xb3, 0x5e, 0xaf, - 0xbd, 0x38, 0x6e, 0xa7, 0x43, 0xe7, 0x9b, 0x01, 0x25, 0xad, 0x47, 0x30, - 0x0f, 0x51, 0x1b, 0x4e, 0xd9, 0xda, 0xdb, 0x5e, 0xaf, 0x97, 0xa2, 0x01, - 0xd6, 0xeb, 0xf5, 0x75, 0xab, 0xdd, 0x79, 0x72, 0x97, 0x03, 0xd4, 0x26, - 0xcc, 0xb6, 0x13, 0xb0, 0x1b, 0xbc, 0x4a, 0xe6, 0xcd, 0x3c, 0xe0, 0x85, - 0x55, 0x6e, 0xf4, 0xed, 0xd5, 0xd5, 0xd5, 0x12, 0x35, 0xf8, 0x33, 0x78, - 0x9f, 0xed, 0xa4, 0x19, 0xff, 0x37, 0x07, 0x09, 0x3b, 0x01, 0xdb, 0x4c, - 0xff, 0x44, 0xb3, 0x83, 0x7f, 0x79, 0x50, 0xb7, 0xd3, 0xb9, 0x21, 0xa2, - 0x15, 0x2a, 0x72, 0xb6, 0x6c, 0x84, 0xc5, 0x45, 0xa7, 0x73, 0xdb, 0xf2, - 0xfb, 0xca, 0x05, 0x1d, 0x04, 0x5f, 0x32, 0x16, 0xad, 0x96, 0xfa, 0xca, - 0xcc, 0x27, 0x05, 0xb7, 0xcc, 0xf7, 0xcc, 0xb8, 0x3f, 0x7a, 0xca, 0x20, - 0xcb, 0xcc, 0x9d, 0xbb, 0xf8, 0x86, 0x0a, 0x6c, 0x36, 0xfa, 0x1e, 0xa5, - 0xc1, 0xbb, 0x19, 0x9b, 0x24, 0x89, 0x9a, 0x9e, 0x92, 0xcd, 0x4d, 0x40, - 0xbf, 0xb0, 0x76, 0x1c, 0x64, 0x63, 0x0c, 0xdd, 0xca, 0x1f, 0x42, 0x6b, - 0xf3, 0xc5, 0x59, 0xe6, 0xbf, 0xaf, 0x2c, 0xd3, 0x8f, 0xa8, 0x41, 0xb9, - 0xbf, 0xed, 0x36, 0x7b, 0x42, 0x45, 0xb6, 0xda, 0xcc, 0xc3, 0x6c, 0xd9, - 0x67, 0xd4, 0x60, 0xab, 0x75, 0xd0, 0x9f, 0xcf, 0xaa, 0x2c, 0x70, 0x1d, - 0xde, 0xa6, 0x6a, 0x9d, 0xe0, 0x45, 0x91, 0x87, 0xb3, 0x4d, 0x74, 0x8d, - 0x8a, 0x50, 0x69, 0xdf, 0x1b, 0x63, 0x66, 0xa8, 0x01, 0xb1, 0x0a, 0xb2, - 0x59, 0x6b, 0x07, 0xaa, 0x7c, 0x93, 0xfb, 0x9b, 0xa9, 0xbc, 0x5f, 0x9b, - 0xc6, 0x2d, 0xf3, 0x40, 0xc0, 0xe5, 0xe5, 0xe5, 0x2f, 0xd4, 0xc0, 0xda, - 0xf2, 0xd8, 0xa8, 0xaf, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, - 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, - 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, - 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, - 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, - 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, - 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, - 0x00, 0xc2, 0x89, 0x02, 0x20, 0x1c, 0x45, 0x8c, 0xa0, 0x8a, 0xc2, 0x5a, - 0xaa, 0x55, 0x9e, 0x96, 0x24, 0x49, 0xf9, 0xf7, 0x6f, 0xa6, 0x02, 0x45, - 0xa9, 0xd7, 0x63, 0x53, 0x44, 0x48, 0x8f, 0x1b, 0x98, 0xec, 0x03, 0x6a, - 0x50, 0x30, 0x8f, 0x83, 0x06, 0xae, 0x2e, 0x80, 0x40, 0x41, 0xcd, 0x61, - 0x66, 0x4c, 0xad, 0x6c, 0x20, 0x3b, 0x3a, 0xfe, 0xe8, 0x84, 0x2c, 0x5b, - 0x45, 0x91, 0xcf, 0x48, 0x25, 0x87, 0x8e, 0x19, 0xc3, 0x7d, 0xe5, 0x18, - 0xcf, 0xac, 0x55, 0xff, 0x1d, 0x5e, 0x29, 0xdb, 0x07, 0xd1, 0x28, 0x2c, - 0x9b, 0xf3, 0xed, 0x98, 0xa0, 0x22, 0xcc, 0xbc, 0x70, 0x16, 0xc6, 0x47, - 0xd9, 0x1e, 0x5c, 0xb6, 0xbe, 0x5b, 0xa5, 0xdf, 0x4f, 0xe8, 0x66, 0x97, - 0x8d, 0x49, 0x7d, 0xe2, 0x52, 0x55, 0xac, 0x9b, 0xfc, 0xe9, 0xbe, 0x70, - 0x52, 0xeb, 0xb9, 0x1f, 0x38, 0x1a, 0x87, 0xd3, 0x8b, 0x6e, 0xf7, 0x1d, - 0x2a, 0xe2, 0x8b, 0xa6, 0x32, 0x6d, 0x7e, 0xe0, 0x4c, 0x45, 0x9d, 0x3e, - 0xdb, 0xee, 0x10, 0xe4, 0xa2, 0xf8, 0xe8, 0xde, 0x52, 0x34, 0xcb, 0x2a, - 0x37, 0xe6, 0x03, 0x6a, 0xe0, 0x2b, 0x4e, 0x73, 0xa3, 0x7d, 0x1f, 0x0d, - 0x9f, 0x23, 0xfb, 0xd2, 0x59, 0x7f, 0xb5, 0x13, 0xe0, 0x6b, 0x68, 0xd9, - 0x16, 0xbe, 0x21, 0x45, 0x23, 0x70, 0xda, 0x44, 0xdd, 0xb0, 0xc7, 0xf7, - 0xe1, 0xb2, 0xdd, 0xa0, 0xa9, 0x6c, 0x8c, 0xc5, 0xab, 0xe2, 0xe9, 0x63, - 0x8c, 0x31, 0xef, 0xdd, 0x3e, 0x1e, 0x5b, 0xcb, 0xa7, 0x15, 0x3c, 0x12, - 0xaf, 0xdc, 0xa1, 0xb5, 0x72, 0x07, 0xcb, 0xa4, 0xdd, 0x6e, 0x3f, 0xe3, - 0x0c, 0xe4, 0x79, 0x3e, 0x72, 0xb9, 0x86, 0x55, 0xb2, 0x29, 0x52, 0xa9, - 0xdf, 0xf3, 0xe5, 0x6c, 0xbf, 0x01, 0xcd, 0x4e, 0x60, 0x22, 0xc6, 0x05, - 0x25, 0x40, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, - 0x60, 0x82 -}; + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, + 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x02, 0xaf, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9b, 0xdb, + 0x6d, 0x1a, 0x41, 0x14, 0x86, 0xff, 0x33, 0xcb, 0xc5, 0xc8, 0x7e, 0xa0, + 0x04, 0xd2, 0x81, 0x5d, 0x41, 0x70, 0x05, 0x90, 0x0a, 0xec, 0x54, 0x10, + 0x77, 0x90, 0x12, 0x92, 0x54, 0x60, 0x52, 0x81, 0xa1, 0x02, 0x70, 0x05, + 0xa1, 0x83, 0x6c, 0x07, 0xe1, 0x01, 0x09, 0x76, 0x66, 0x77, 0x4e, 0x66, + 0x20, 0x31, 0xcc, 0x5a, 0x8a, 0xc2, 0xee, 0x22, 0x59, 0x3a, 0xf3, 0x49, + 0x88, 0x65, 0x58, 0x66, 0xff, 0xf9, 0xe6, 0xc2, 0xd3, 0x21, 0x94, 0xd8, + 0x6c, 0xcc, 0x30, 0x49, 0x30, 0xb2, 0x8c, 0x01, 0x08, 0x7d, 0x9c, 0x80, + 0x02, 0x96, 0xcc, 0xf6, 0xb9, 0xdb, 0xed, 0x4e, 0x71, 0x06, 0x7c, 0x36, + 0xa5, 0xf8, 0x8e, 0x41, 0xfd, 0x2a, 0xd9, 0x8a, 0x02, 0xb3, 0x5e, 0xaf, + 0xbd, 0x38, 0x6e, 0xa7, 0x43, 0xe7, 0x9b, 0x01, 0x25, 0xad, 0x47, 0x30, + 0x0f, 0x51, 0x1b, 0x4e, 0xd9, 0xda, 0xdb, 0x5e, 0xaf, 0x97, 0xa2, 0x01, + 0xd6, 0xeb, 0xf5, 0x75, 0xab, 0xdd, 0x79, 0x72, 0x97, 0x03, 0xd4, 0x26, + 0xcc, 0xb6, 0x13, 0xb0, 0x1b, 0xbc, 0x4a, 0xe6, 0xcd, 0x3c, 0xe0, 0x85, + 0x55, 0x6e, 0xf4, 0xed, 0xd5, 0xd5, 0xd5, 0x12, 0x35, 0xf8, 0x33, 0x78, + 0x9f, 0xed, 0xa4, 0x19, 0xff, 0x37, 0x07, 0x09, 0x3b, 0x01, 0xdb, 0x4c, + 0xff, 0x44, 0xb3, 0x83, 0x7f, 0x79, 0x50, 0xb7, 0xd3, 0xb9, 0x21, 0xa2, + 0x15, 0x2a, 0x72, 0xb6, 0x6c, 0x84, 0xc5, 0x45, 0xa7, 0x73, 0xdb, 0xf2, + 0xfb, 0xca, 0x05, 0x1d, 0x04, 0x5f, 0x32, 0x16, 0xad, 0x96, 0xfa, 0xca, + 0xcc, 0x27, 0x05, 0xb7, 0xcc, 0xf7, 0xcc, 0xb8, 0x3f, 0x7a, 0xca, 0x20, + 0xcb, 0xcc, 0x9d, 0xbb, 0xf8, 0x86, 0x0a, 0x6c, 0x36, 0xfa, 0x1e, 0xa5, + 0xc1, 0xbb, 0x19, 0x9b, 0x24, 0x89, 0x9a, 0x9e, 0x92, 0xcd, 0x4d, 0x40, + 0xbf, 0xb0, 0x76, 0x1c, 0x64, 0x63, 0x0c, 0xdd, 0xca, 0x1f, 0x42, 0x6b, + 0xf3, 0xc5, 0x59, 0xe6, 0xbf, 0xaf, 0x2c, 0xd3, 0x8f, 0xa8, 0x41, 0xb9, + 0xbf, 0xed, 0x36, 0x7b, 0x42, 0x45, 0xb6, 0xda, 0xcc, 0xc3, 0x6c, 0xd9, + 0x67, 0xd4, 0x60, 0xab, 0x75, 0xd0, 0x9f, 0xcf, 0xaa, 0x2c, 0x70, 0x1d, + 0xde, 0xa6, 0x6a, 0x9d, 0xe0, 0x45, 0x91, 0x87, 0xb3, 0x4d, 0x74, 0x8d, + 0x8a, 0x50, 0x69, 0xdf, 0x1b, 0x63, 0x66, 0xa8, 0x01, 0xb1, 0x0a, 0xb2, + 0x59, 0x6b, 0x07, 0xaa, 0x7c, 0x93, 0xfb, 0x9b, 0xa9, 0xbc, 0x5f, 0x9b, + 0xc6, 0x2d, 0xf3, 0x40, 0xc0, 0xe5, 0xe5, 0xe5, 0x2f, 0xd4, 0xc0, 0xda, + 0xf2, 0xd8, 0xa8, 0xaf, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, + 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, + 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, + 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, + 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, + 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, + 0x89, 0x02, 0x20, 0x9c, 0x28, 0x00, 0xc2, 0x89, 0x02, 0x20, 0x9c, 0x28, + 0x00, 0xc2, 0x89, 0x02, 0x20, 0x1c, 0x45, 0x8c, 0xa0, 0x8a, 0xc2, 0x5a, + 0xaa, 0x55, 0x9e, 0x96, 0x24, 0x49, 0xf9, 0xf7, 0x6f, 0xa6, 0x02, 0x45, + 0xa9, 0xd7, 0x63, 0x53, 0x44, 0x48, 0x8f, 0x1b, 0x98, 0xec, 0x03, 0x6a, + 0x50, 0x30, 0x8f, 0x83, 0x06, 0xae, 0x2e, 0x80, 0x40, 0x41, 0xcd, 0x61, + 0x66, 0x4c, 0xad, 0x6c, 0x20, 0x3b, 0x3a, 0xfe, 0xe8, 0x84, 0x2c, 0x5b, + 0x45, 0x91, 0xcf, 0x48, 0x25, 0x87, 0x8e, 0x19, 0xc3, 0x7d, 0xe5, 0x18, + 0xcf, 0xac, 0x55, 0xff, 0x1d, 0x5e, 0x29, 0xdb, 0x07, 0xd1, 0x28, 0x2c, + 0x9b, 0xf3, 0xed, 0x98, 0xa0, 0x22, 0xcc, 0xbc, 0x70, 0x16, 0xc6, 0x47, + 0xd9, 0x1e, 0x5c, 0xb6, 0xbe, 0x5b, 0xa5, 0xdf, 0x4f, 0xe8, 0x66, 0x97, + 0x8d, 0x49, 0x7d, 0xe2, 0x52, 0x55, 0xac, 0x9b, 0xfc, 0xe9, 0xbe, 0x70, + 0x52, 0xeb, 0xb9, 0x1f, 0x38, 0x1a, 0x87, 0xd3, 0x8b, 0x6e, 0xf7, 0x1d, + 0x2a, 0xe2, 0x8b, 0xa6, 0x32, 0x6d, 0x7e, 0xe0, 0x4c, 0x45, 0x9d, 0x3e, + 0xdb, 0xee, 0x10, 0xe4, 0xa2, 0xf8, 0xe8, 0xde, 0x52, 0x34, 0xcb, 0x2a, + 0x37, 0xe6, 0x03, 0x6a, 0xe0, 0x2b, 0x4e, 0x73, 0xa3, 0x7d, 0x1f, 0x0d, + 0x9f, 0x23, 0xfb, 0xd2, 0x59, 0x7f, 0xb5, 0x13, 0xe0, 0x6b, 0x68, 0xd9, + 0x16, 0xbe, 0x21, 0x45, 0x23, 0x70, 0xda, 0x44, 0xdd, 0xb0, 0xc7, 0xf7, + 0xe1, 0xb2, 0xdd, 0xa0, 0xa9, 0x6c, 0x8c, 0xc5, 0xab, 0xe2, 0xe9, 0x63, + 0x8c, 0x31, 0xef, 0xdd, 0x3e, 0x1e, 0x5b, 0xcb, 0xa7, 0x15, 0x3c, 0x12, + 0xaf, 0xdc, 0xa1, 0xb5, 0x72, 0x07, 0xcb, 0xa4, 0xdd, 0x6e, 0x3f, 0xe3, + 0x0c, 0xe4, 0x79, 0x3e, 0x72, 0xb9, 0x86, 0x55, 0xb2, 0x29, 0x52, 0xa9, + 0xdf, 0xf3, 0xe5, 0x6c, 0xbf, 0x01, 0xcd, 0x4e, 0x60, 0x22, 0xc6, 0x05, + 0x25, 0x40, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82}; unsigned char PlayButton_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x40, - 0x08, 0x06, 0x00, 0x00, 0x00, 0x4f, 0xf7, 0xb4, 0xb2, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x04, 0xa3, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xdd, 0x5b, 0xd1, - 0x55, 0xdb, 0x30, 0x14, 0x7d, 0x92, 0x13, 0xdb, 0xf9, 0x63, 0x84, 0x74, - 0x82, 0xc2, 0x04, 0x85, 0x09, 0x0a, 0x13, 0x34, 0x4c, 0x40, 0x98, 0x80, - 0x30, 0x01, 0xe9, 0x04, 0xa1, 0x13, 0x90, 0x0d, 0x92, 0x4e, 0x00, 0x9d, - 0x80, 0x6c, 0x50, 0x7a, 0x0e, 0x87, 0x58, 0x0a, 0x58, 0x7d, 0xcf, 0x58, - 0x24, 0xb1, 0x95, 0xd8, 0x18, 0xdb, 0x91, 0xb9, 0xe7, 0x10, 0x1c, 0x4b, - 0xfe, 0xb8, 0x79, 0x4f, 0xf7, 0xca, 0x7a, 0x12, 0x03, 0x03, 0xe6, 0xf3, - 0xc5, 0x21, 0x63, 0xea, 0x2b, 0x63, 0xb0, 0x4f, 0xdf, 0x19, 0x63, 0x0f, - 0x4a, 0x85, 0xbf, 0x3d, 0xcf, 0x1b, 0x43, 0x93, 0x31, 0x9f, 0xcf, 0xbb, - 0x81, 0x5c, 0x4c, 0x02, 0x21, 0x95, 0xf9, 0x4f, 0xdc, 0x4b, 0x29, 0x7f, - 0x40, 0x83, 0xc0, 0xf4, 0xc5, 0xe3, 0xe3, 0xe3, 0x7e, 0xab, 0xed, 0x4e, - 0xf0, 0x72, 0x2f, 0xc7, 0x73, 0x77, 0x2a, 0x7c, 0x39, 0xe9, 0x74, 0x3a, - 0x33, 0xb0, 0x1c, 0x9c, 0x3e, 0x28, 0x72, 0x48, 0xee, 0x06, 0xf2, 0x91, - 0x23, 0xec, 0x33, 0xee, 0xdc, 0xcf, 0x85, 0x18, 0x28, 0xa5, 0xf2, 0x3e, - 0xb3, 0x13, 0x44, 0x11, 0x14, 0x52, 0x8e, 0x94, 0x82, 0xde, 0x5a, 0x8b, - 0x82, 0x29, 0x7e, 0x8e, 0x39, 0xe7, 0x0f, 0x0a, 0xc2, 0xc3, 0x54, 0xfb, - 0xb2, 0xe3, 0x8c, 0x33, 0x36, 0x70, 0x5d, 0xf7, 0x17, 0xd8, 0x88, 0x68, - 0xdc, 0x25, 0xc6, 0x9a, 0x10, 0xe2, 0xc2, 0xd4, 0x8f, 0x7e, 0x88, 0x4d, - 0xe3, 0x53, 0x08, 0x39, 0xa2, 0x3e, 0x60, 0x1b, 0x84, 0x78, 0x3e, 0x4e, - 0x0a, 0xc9, 0xb6, 0xfe, 0xf3, 0xb9, 0xec, 0x61, 0xbf, 0xfb, 0x0d, 0x44, - 0xff, 0x52, 0xda, 0x82, 0x45, 0xe0, 0x61, 0x18, 0xae, 0x8d, 0x21, 0x06, - 0x6c, 0xba, 0xed, 0x81, 0x4e, 0xc7, 0xbd, 0xf6, 0xdc, 0xf6, 0x01, 0x03, - 0x35, 0x30, 0x34, 0xef, 0xe1, 0xf3, 0x17, 0xf4, 0x23, 0x91, 0x68, 0x81, - 0x05, 0xe0, 0x50, 0x00, 0xe4, 0x8b, 0xe8, 0x89, 0x97, 0xa8, 0xa4, 0x5f, - 0xd0, 0x2b, 0xef, 0x0c, 0x3d, 0x48, 0xb4, 0x6e, 0x6d, 0x48, 0xdb, 0x42, - 0x04, 0x35, 0xc8, 0x26, 0x3c, 0xd7, 0x3d, 0x50, 0x21, 0x9c, 0xe2, 0xd7, - 0x59, 0xb2, 0x5d, 0x01, 0xf4, 0x18, 0xe7, 0x93, 0x5d, 0x7a, 0xe7, 0x87, - 0x08, 0x6a, 0x50, 0xda, 0x62, 0x34, 0x8f, 0x30, 0x9a, 0xd7, 0xe9, 0x56, - 0xd6, 0x0d, 0x15, 0x5c, 0x53, 0xda, 0xee, 0x22, 0x9a, 0xa5, 0x10, 0x24, - 0xc4, 0xd1, 0x3c, 0xe5, 0x0c, 0x0e, 0xc0, 0x10, 0x4d, 0x22, 0x4a, 0xde, - 0x19, 0x48, 0x79, 0x55, 0xa7, 0x77, 0x96, 0x46, 0x50, 0x03, 0xfd, 0xf0, - 0xce, 0xf7, 0xdc, 0x2f, 0xb1, 0x08, 0x3d, 0xa4, 0x3a, 0x28, 0xe8, 0xa3, - 0xdd, 0xdc, 0xd6, 0x95, 0xb6, 0xa5, 0x13, 0xd4, 0x88, 0x45, 0xe8, 0x60, - 0x5b, 0xda, 0xd6, 0x21, 0x42, 0x95, 0x11, 0x24, 0xe8, 0xb4, 0xdd, 0x2e, - 0x42, 0xaf, 0x53, 0x3e, 0xa8, 0x08, 0x95, 0x12, 0xd4, 0x20, 0x11, 0x5a, - 0x49, 0xdb, 0x14, 0xb4, 0x77, 0xe2, 0xa4, 0xe3, 0x3b, 0x94, 0x8c, 0x5a, - 0x08, 0x6a, 0x68, 0xef, 0x44, 0x46, 0xd3, 0x74, 0x2b, 0xeb, 0xe2, 0x9c, - 0x77, 0x5c, 0x76, 0xda, 0xd6, 0x4a, 0x90, 0x40, 0x69, 0xeb, 0xbb, 0xee, - 0x51, 0x5d, 0xde, 0x59, 0x3b, 0x41, 0x8d, 0xba, 0xbc, 0x73, 0x67, 0x04, - 0x09, 0x4b, 0x11, 0xc2, 0xb4, 0xcd, 0xf0, 0xce, 0xa2, 0x44, 0x77, 0x4a, - 0x50, 0x23, 0x4a, 0x5b, 0x14, 0x21, 0x50, 0xe1, 0x39, 0x98, 0x88, 0xa2, - 0x77, 0x16, 0x4d, 0x5b, 0x2b, 0x08, 0x6a, 0xf8, 0xbe, 0x3f, 0xcc, 0x91, - 0xb6, 0x37, 0xef, 0x89, 0xa6, 0x55, 0x04, 0x09, 0x59, 0xde, 0x89, 0x44, - 0x8f, 0xdf, 0xe3, 0x9d, 0xd6, 0x11, 0xd4, 0xc8, 0xeb, 0x9d, 0x59, 0x69, - 0x6b, 0x2d, 0x41, 0x8d, 0xb7, 0xf7, 0x4e, 0x60, 0x86, 0x35, 0xd9, 0xec, - 0x29, 0x9f, 0xf5, 0x04, 0x09, 0x51, 0xda, 0x7a, 0xed, 0x93, 0x2c, 0xef, - 0x7c, 0x7a, 0x0a, 0xfa, 0xc9, 0xb6, 0x46, 0x10, 0xd4, 0xd0, 0xde, 0x89, - 0xab, 0x78, 0xc3, 0x74, 0x2b, 0xeb, 0x72, 0x87, 0x5f, 0x25, 0xbd, 0xb3, - 0x51, 0x04, 0x09, 0x14, 0x4d, 0xd7, 0x6d, 0x9f, 0x6f, 0xf7, 0x4e, 0x3e, - 0xd1, 0xef, 0x9c, 0x8d, 0x23, 0xa8, 0xa1, 0xbd, 0xd3, 0x9c, 0xb6, 0xac, - 0x2b, 0xe5, 0xf3, 0x19, 0x5d, 0x35, 0x96, 0xa0, 0x86, 0x4e, 0x5b, 0x1c, - 0x89, 0x6b, 0x22, 0xa4, 0x40, 0xf5, 0x29, 0x8a, 0x8d, 0x27, 0x48, 0xd0, - 0xde, 0x09, 0xeb, 0x2b, 0x08, 0x7b, 0x52, 0xbe, 0x7c, 0xfb, 0x14, 0x04, - 0x09, 0xb4, 0x94, 0x89, 0x75, 0x88, 0xf1, 0xfa, 0x3d, 0xf8, 0x1c, 0x11, - 0x5c, 0x82, 0xa5, 0x16, 0xb3, 0x3e, 0x0d, 0x41, 0xb2, 0x06, 0x1c, 0x77, - 0x6b, 0xab, 0xe9, 0x58, 0xc4, 0x9d, 0x7d, 0x0a, 0x82, 0x51, 0x45, 0x9a, - 0x3b, 0x54, 0xdb, 0xec, 0x2e, 0xef, 0xaa, 0x59, 0xbb, 0xdd, 0xfe, 0xdd, - 0x68, 0x82, 0xa4, 0x92, 0xf8, 0xae, 0x38, 0x64, 0x5c, 0x25, 0xc8, 0x45, - 0x75, 0xc1, 0x6b, 0xfa, 0xdf, 0x82, 0x86, 0x82, 0xaa, 0x5c, 0x42, 0x2e, - 0xae, 0xc0, 0x54, 0xb4, 0xc5, 0xda, 0xa6, 0xe7, 0x7b, 0x97, 0x74, 0xd9, - 0xb8, 0x08, 0xea, 0x7d, 0x04, 0x8c, 0xc3, 0x08, 0x0c, 0xe4, 0xe8, 0x5d, - 0x92, 0xe6, 0xad, 0xfa, 0x7b, 0x63, 0x22, 0x18, 0xa7, 0x63, 0x1f, 0xdf, - 0x2a, 0xce, 0xc0, 0xb8, 0xf4, 0xaf, 0x66, 0x0e, 0xe7, 0x3d, 0x1a, 0x77, - 0xab, 0x77, 0x1b, 0x41, 0x90, 0x44, 0x04, 0xd3, 0x71, 0x84, 0xe4, 0xba, - 0x86, 0x66, 0xf4, 0x3f, 0x35, 0xc4, 0x92, 0xc1, 0x4f, 0xf2, 0xc2, 0x64, - 0xa3, 0xd5, 0x04, 0x29, 0x6a, 0x72, 0xb1, 0xa0, 0x62, 0x4d, 0xcf, 0xdc, - 0x01, 0xa6, 0x4a, 0xbd, 0x9c, 0xfa, 0x5b, 0x76, 0x7b, 0x58, 0x4b, 0xf0, - 0x29, 0x08, 0xb0, 0x48, 0xb3, 0xa0, 0xbd, 0x02, 0xa6, 0x4a, 0x14, 0x45, - 0xed, 0x14, 0x85, 0x24, 0x73, 0x63, 0x92, 0x75, 0x04, 0xa3, 0xfd, 0x3a, - 0xae, 0x77, 0x85, 0xe1, 0x3b, 0x34, 0xb5, 0x63, 0x79, 0x6e, 0x88, 0xe3, - 0xec, 0xd2, 0x94, 0x8e, 0x26, 0x58, 0x43, 0x90, 0xd2, 0x51, 0x2c, 0x16, - 0x03, 0x4c, 0x3b, 0x12, 0x11, 0x43, 0x07, 0x98, 0x3a, 0x0e, 0x1b, 0x24, - 0x45, 0x24, 0x0b, 0x56, 0x10, 0xd4, 0x22, 0x02, 0x09, 0xb3, 0x8e, 0xf1, - 0x80, 0xeb, 0xa5, 0x03, 0x5c, 0x52, 0xfc, 0x09, 0x05, 0xb0, 0x53, 0x82, - 0xe4, 0x69, 0xcc, 0x69, 0x8d, 0x36, 0xa5, 0x23, 0xbd, 0xe3, 0xa9, 0x30, - 0x3c, 0xff, 0xc8, 0x96, 0xb1, 0x9d, 0x11, 0xa4, 0x75, 0xcd, 0x6c, 0x4f, - 0x73, 0xdf, 0x95, 0x8e, 0x26, 0xd4, 0x4e, 0x90, 0xd2, 0x91, 0x3b, 0x0a, - 0xa5, 0x1f, 0x8c, 0xfb, 0x68, 0x68, 0x1d, 0x74, 0x93, 0xa7, 0x15, 0x41, - 0x6d, 0x04, 0x97, 0x22, 0xa2, 0xce, 0x4c, 0x1a, 0x92, 0xc7, 0xd3, 0x8a, - 0xa0, 0x96, 0xb9, 0x68, 0xec, 0x69, 0xf7, 0x91, 0x42, 0xa6, 0x41, 0x22, - 0xd2, 0xf7, 0x7d, 0xf7, 0xa8, 0x8a, 0xed, 0x99, 0x95, 0x46, 0x30, 0x4b, - 0x44, 0xde, 0xeb, 0x69, 0x45, 0x50, 0x09, 0xc1, 0x95, 0x89, 0xf1, 0x05, - 0x98, 0xf3, 0xd1, 0x38, 0x31, 0xae, 0x02, 0xa5, 0x13, 0xcc, 0x33, 0x31, - 0xa6, 0x7a, 0x03, 0xd4, 0x84, 0xd2, 0x08, 0x46, 0x22, 0x22, 0x25, 0x9a, - 0xb5, 0x3a, 0x36, 0x77, 0xa8, 0x46, 0x44, 0xb2, 0x50, 0x8a, 0xc8, 0xbc, - 0x89, 0x08, 0xd6, 0xee, 0xd2, 0xad, 0x6a, 0x86, 0x51, 0x3b, 0xa9, 0x4a, - 0x44, 0xb2, 0xf0, 0xa1, 0x08, 0x46, 0x8b, 0x3d, 0x0e, 0x5c, 0x6c, 0x17, - 0x11, 0xb7, 0x52, 0x11, 0xc9, 0x42, 0x21, 0x82, 0xab, 0x9e, 0x06, 0x1b, - 0x3c, 0xad, 0xc8, 0xc4, 0xb8, 0x0a, 0xa4, 0x08, 0x2a, 0x66, 0x9c, 0xf0, - 0xbe, 0x41, 0x08, 0x71, 0x1c, 0x2f, 0xf6, 0x98, 0xfa, 0x7d, 0x68, 0x62, - 0x5c, 0x09, 0x22, 0x49, 0x4f, 0xec, 0xbd, 0x36, 0xd5, 0xbf, 0x73, 0x1c, - 0x1a, 0xb9, 0xa9, 0x7a, 0x63, 0x5d, 0x11, 0x44, 0xc7, 0x0a, 0xd0, 0xb3, - 0x26, 0x98, 0x56, 0x87, 0xeb, 0x2d, 0x6c, 0x0a, 0x21, 0xce, 0xe6, 0x15, - 0xfc, 0xc3, 0x74, 0xfb, 0x1a, 0xbe, 0x2e, 0x1b, 0xe4, 0x5e, 0xec, 0xb1, - 0x05, 0x11, 0xc1, 0x68, 0xc6, 0xc1, 0x9d, 0x5b, 0xc8, 0x7f, 0x30, 0x24, - 0x7e, 0xb8, 0xdc, 0x89, 0x71, 0x15, 0x28, 0x76, 0xb4, 0x27, 0xf6, 0xb4, - 0x26, 0x1c, 0xed, 0x59, 0x43, 0xd6, 0xe1, 0x0f, 0x3a, 0x17, 0x11, 0x04, - 0xc1, 0x19, 0x34, 0x08, 0xcc, 0x74, 0x33, 0x4a, 0x59, 0xe6, 0x7c, 0x5f, - 0x3d, 0x5e, 0x87, 0xd7, 0xe3, 0x56, 0xab, 0xf5, 0xc7, 0xe6, 0x74, 0x34, - 0xe1, 0x3f, 0xe5, 0x21, 0x6e, 0xce, 0x0a, 0x36, 0x99, 0x91, 0x00, 0x00, - 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 -}; + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x40, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x4f, 0xf7, 0xb4, 0xb2, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x04, 0xa3, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xdd, 0x5b, 0xd1, + 0x55, 0xdb, 0x30, 0x14, 0x7d, 0x92, 0x13, 0xdb, 0xf9, 0x63, 0x84, 0x74, + 0x82, 0xc2, 0x04, 0x85, 0x09, 0x0a, 0x13, 0x34, 0x4c, 0x40, 0x98, 0x80, + 0x30, 0x01, 0xe9, 0x04, 0xa1, 0x13, 0x90, 0x0d, 0x92, 0x4e, 0x00, 0x9d, + 0x80, 0x6c, 0x50, 0x7a, 0x0e, 0x87, 0x58, 0x0a, 0x58, 0x7d, 0xcf, 0x58, + 0x24, 0xb1, 0x95, 0xd8, 0x18, 0xdb, 0x91, 0xb9, 0xe7, 0x10, 0x1c, 0x4b, + 0xfe, 0xb8, 0x79, 0x4f, 0xf7, 0xca, 0x7a, 0x12, 0x03, 0x03, 0xe6, 0xf3, + 0xc5, 0x21, 0x63, 0xea, 0x2b, 0x63, 0xb0, 0x4f, 0xdf, 0x19, 0x63, 0x0f, + 0x4a, 0x85, 0xbf, 0x3d, 0xcf, 0x1b, 0x43, 0x93, 0x31, 0x9f, 0xcf, 0xbb, + 0x81, 0x5c, 0x4c, 0x02, 0x21, 0x95, 0xf9, 0x4f, 0xdc, 0x4b, 0x29, 0x7f, + 0x40, 0x83, 0xc0, 0xf4, 0xc5, 0xe3, 0xe3, 0xe3, 0x7e, 0xab, 0xed, 0x4e, + 0xf0, 0x72, 0x2f, 0xc7, 0x73, 0x77, 0x2a, 0x7c, 0x39, 0xe9, 0x74, 0x3a, + 0x33, 0xb0, 0x1c, 0x9c, 0x3e, 0x28, 0x72, 0x48, 0xee, 0x06, 0xf2, 0x91, + 0x23, 0xec, 0x33, 0xee, 0xdc, 0xcf, 0x85, 0x18, 0x28, 0xa5, 0xf2, 0x3e, + 0xb3, 0x13, 0x44, 0x11, 0x14, 0x52, 0x8e, 0x94, 0x82, 0xde, 0x5a, 0x8b, + 0x82, 0x29, 0x7e, 0x8e, 0x39, 0xe7, 0x0f, 0x0a, 0xc2, 0xc3, 0x54, 0xfb, + 0xb2, 0xe3, 0x8c, 0x33, 0x36, 0x70, 0x5d, 0xf7, 0x17, 0xd8, 0x88, 0x68, + 0xdc, 0x25, 0xc6, 0x9a, 0x10, 0xe2, 0xc2, 0xd4, 0x8f, 0x7e, 0x88, 0x4d, + 0xe3, 0x53, 0x08, 0x39, 0xa2, 0x3e, 0x60, 0x1b, 0x84, 0x78, 0x3e, 0x4e, + 0x0a, 0xc9, 0xb6, 0xfe, 0xf3, 0xb9, 0xec, 0x61, 0xbf, 0xfb, 0x0d, 0x44, + 0xff, 0x52, 0xda, 0x82, 0x45, 0xe0, 0x61, 0x18, 0xae, 0x8d, 0x21, 0x06, + 0x6c, 0xba, 0xed, 0x81, 0x4e, 0xc7, 0xbd, 0xf6, 0xdc, 0xf6, 0x01, 0x03, + 0x35, 0x30, 0x34, 0xef, 0xe1, 0xf3, 0x17, 0xf4, 0x23, 0x91, 0x68, 0x81, + 0x05, 0xe0, 0x50, 0x00, 0xe4, 0x8b, 0xe8, 0x89, 0x97, 0xa8, 0xa4, 0x5f, + 0xd0, 0x2b, 0xef, 0x0c, 0x3d, 0x48, 0xb4, 0x6e, 0x6d, 0x48, 0xdb, 0x42, + 0x04, 0x35, 0xc8, 0x26, 0x3c, 0xd7, 0x3d, 0x50, 0x21, 0x9c, 0xe2, 0xd7, + 0x59, 0xb2, 0x5d, 0x01, 0xf4, 0x18, 0xe7, 0x93, 0x5d, 0x7a, 0xe7, 0x87, + 0x08, 0x6a, 0x50, 0xda, 0x62, 0x34, 0x8f, 0x30, 0x9a, 0xd7, 0xe9, 0x56, + 0xd6, 0x0d, 0x15, 0x5c, 0x53, 0xda, 0xee, 0x22, 0x9a, 0xa5, 0x10, 0x24, + 0xc4, 0xd1, 0x3c, 0xe5, 0x0c, 0x0e, 0xc0, 0x10, 0x4d, 0x22, 0x4a, 0xde, + 0x19, 0x48, 0x79, 0x55, 0xa7, 0x77, 0x96, 0x46, 0x50, 0x03, 0xfd, 0xf0, + 0xce, 0xf7, 0xdc, 0x2f, 0xb1, 0x08, 0x3d, 0xa4, 0x3a, 0x28, 0xe8, 0xa3, + 0xdd, 0xdc, 0xd6, 0x95, 0xb6, 0xa5, 0x13, 0xd4, 0x88, 0x45, 0xe8, 0x60, + 0x5b, 0xda, 0xd6, 0x21, 0x42, 0x95, 0x11, 0x24, 0xe8, 0xb4, 0xdd, 0x2e, + 0x42, 0xaf, 0x53, 0x3e, 0xa8, 0x08, 0x95, 0x12, 0xd4, 0x20, 0x11, 0x5a, + 0x49, 0xdb, 0x14, 0xb4, 0x77, 0xe2, 0xa4, 0xe3, 0x3b, 0x94, 0x8c, 0x5a, + 0x08, 0x6a, 0x68, 0xef, 0x44, 0x46, 0xd3, 0x74, 0x2b, 0xeb, 0xe2, 0x9c, + 0x77, 0x5c, 0x76, 0xda, 0xd6, 0x4a, 0x90, 0x40, 0x69, 0xeb, 0xbb, 0xee, + 0x51, 0x5d, 0xde, 0x59, 0x3b, 0x41, 0x8d, 0xba, 0xbc, 0x73, 0x67, 0x04, + 0x09, 0x4b, 0x11, 0xc2, 0xb4, 0xcd, 0xf0, 0xce, 0xa2, 0x44, 0x77, 0x4a, + 0x50, 0x23, 0x4a, 0x5b, 0x14, 0x21, 0x50, 0xe1, 0x39, 0x98, 0x88, 0xa2, + 0x77, 0x16, 0x4d, 0x5b, 0x2b, 0x08, 0x6a, 0xf8, 0xbe, 0x3f, 0xcc, 0x91, + 0xb6, 0x37, 0xef, 0x89, 0xa6, 0x55, 0x04, 0x09, 0x59, 0xde, 0x89, 0x44, + 0x8f, 0xdf, 0xe3, 0x9d, 0xd6, 0x11, 0xd4, 0xc8, 0xeb, 0x9d, 0x59, 0x69, + 0x6b, 0x2d, 0x41, 0x8d, 0xb7, 0xf7, 0x4e, 0x60, 0x86, 0x35, 0xd9, 0xec, + 0x29, 0x9f, 0xf5, 0x04, 0x09, 0x51, 0xda, 0x7a, 0xed, 0x93, 0x2c, 0xef, + 0x7c, 0x7a, 0x0a, 0xfa, 0xc9, 0xb6, 0x46, 0x10, 0xd4, 0xd0, 0xde, 0x89, + 0xab, 0x78, 0xc3, 0x74, 0x2b, 0xeb, 0x72, 0x87, 0x5f, 0x25, 0xbd, 0xb3, + 0x51, 0x04, 0x09, 0x14, 0x4d, 0xd7, 0x6d, 0x9f, 0x6f, 0xf7, 0x4e, 0x3e, + 0xd1, 0xef, 0x9c, 0x8d, 0x23, 0xa8, 0xa1, 0xbd, 0xd3, 0x9c, 0xb6, 0xac, + 0x2b, 0xe5, 0xf3, 0x19, 0x5d, 0x35, 0x96, 0xa0, 0x86, 0x4e, 0x5b, 0x1c, + 0x89, 0x6b, 0x22, 0xa4, 0x40, 0xf5, 0x29, 0x8a, 0x8d, 0x27, 0x48, 0xd0, + 0xde, 0x09, 0xeb, 0x2b, 0x08, 0x7b, 0x52, 0xbe, 0x7c, 0xfb, 0x14, 0x04, + 0x09, 0xb4, 0x94, 0x89, 0x75, 0x88, 0xf1, 0xfa, 0x3d, 0xf8, 0x1c, 0x11, + 0x5c, 0x82, 0xa5, 0x16, 0xb3, 0x3e, 0x0d, 0x41, 0xb2, 0x06, 0x1c, 0x77, + 0x6b, 0xab, 0xe9, 0x58, 0xc4, 0x9d, 0x7d, 0x0a, 0x82, 0x51, 0x45, 0x9a, + 0x3b, 0x54, 0xdb, 0xec, 0x2e, 0xef, 0xaa, 0x59, 0xbb, 0xdd, 0xfe, 0xdd, + 0x68, 0x82, 0xa4, 0x92, 0xf8, 0xae, 0x38, 0x64, 0x5c, 0x25, 0xc8, 0x45, + 0x75, 0xc1, 0x6b, 0xfa, 0xdf, 0x82, 0x86, 0x82, 0xaa, 0x5c, 0x42, 0x2e, + 0xae, 0xc0, 0x54, 0xb4, 0xc5, 0xda, 0xa6, 0xe7, 0x7b, 0x97, 0x74, 0xd9, + 0xb8, 0x08, 0xea, 0x7d, 0x04, 0x8c, 0xc3, 0x08, 0x0c, 0xe4, 0xe8, 0x5d, + 0x92, 0xe6, 0xad, 0xfa, 0x7b, 0x63, 0x22, 0x18, 0xa7, 0x63, 0x1f, 0xdf, + 0x2a, 0xce, 0xc0, 0xb8, 0xf4, 0xaf, 0x66, 0x0e, 0xe7, 0x3d, 0x1a, 0x77, + 0xab, 0x77, 0x1b, 0x41, 0x90, 0x44, 0x04, 0xd3, 0x71, 0x84, 0xe4, 0xba, + 0x86, 0x66, 0xf4, 0x3f, 0x35, 0xc4, 0x92, 0xc1, 0x4f, 0xf2, 0xc2, 0x64, + 0xa3, 0xd5, 0x04, 0x29, 0x6a, 0x72, 0xb1, 0xa0, 0x62, 0x4d, 0xcf, 0xdc, + 0x01, 0xa6, 0x4a, 0xbd, 0x9c, 0xfa, 0x5b, 0x76, 0x7b, 0x58, 0x4b, 0xf0, + 0x29, 0x08, 0xb0, 0x48, 0xb3, 0xa0, 0xbd, 0x02, 0xa6, 0x4a, 0x14, 0x45, + 0xed, 0x14, 0x85, 0x24, 0x73, 0x63, 0x92, 0x75, 0x04, 0xa3, 0xfd, 0x3a, + 0xae, 0x77, 0x85, 0xe1, 0x3b, 0x34, 0xb5, 0x63, 0x79, 0x6e, 0x88, 0xe3, + 0xec, 0xd2, 0x94, 0x8e, 0x26, 0x58, 0x43, 0x90, 0xd2, 0x51, 0x2c, 0x16, + 0x03, 0x4c, 0x3b, 0x12, 0x11, 0x43, 0x07, 0x98, 0x3a, 0x0e, 0x1b, 0x24, + 0x45, 0x24, 0x0b, 0x56, 0x10, 0xd4, 0x22, 0x02, 0x09, 0xb3, 0x8e, 0xf1, + 0x80, 0xeb, 0xa5, 0x03, 0x5c, 0x52, 0xfc, 0x09, 0x05, 0xb0, 0x53, 0x82, + 0xe4, 0x69, 0xcc, 0x69, 0x8d, 0x36, 0xa5, 0x23, 0xbd, 0xe3, 0xa9, 0x30, + 0x3c, 0xff, 0xc8, 0x96, 0xb1, 0x9d, 0x11, 0xa4, 0x75, 0xcd, 0x6c, 0x4f, + 0x73, 0xdf, 0x95, 0x8e, 0x26, 0xd4, 0x4e, 0x90, 0xd2, 0x91, 0x3b, 0x0a, + 0xa5, 0x1f, 0x8c, 0xfb, 0x68, 0x68, 0x1d, 0x74, 0x93, 0xa7, 0x15, 0x41, + 0x6d, 0x04, 0x97, 0x22, 0xa2, 0xce, 0x4c, 0x1a, 0x92, 0xc7, 0xd3, 0x8a, + 0xa0, 0x96, 0xb9, 0x68, 0xec, 0x69, 0xf7, 0x91, 0x42, 0xa6, 0x41, 0x22, + 0xd2, 0xf7, 0x7d, 0xf7, 0xa8, 0x8a, 0xed, 0x99, 0x95, 0x46, 0x30, 0x4b, + 0x44, 0xde, 0xeb, 0x69, 0x45, 0x50, 0x09, 0xc1, 0x95, 0x89, 0xf1, 0x05, + 0x98, 0xf3, 0xd1, 0x38, 0x31, 0xae, 0x02, 0xa5, 0x13, 0xcc, 0x33, 0x31, + 0xa6, 0x7a, 0x03, 0xd4, 0x84, 0xd2, 0x08, 0x46, 0x22, 0x22, 0x25, 0x9a, + 0xb5, 0x3a, 0x36, 0x77, 0xa8, 0x46, 0x44, 0xb2, 0x50, 0x8a, 0xc8, 0xbc, + 0x89, 0x08, 0xd6, 0xee, 0xd2, 0xad, 0x6a, 0x86, 0x51, 0x3b, 0xa9, 0x4a, + 0x44, 0xb2, 0xf0, 0xa1, 0x08, 0x46, 0x8b, 0x3d, 0x0e, 0x5c, 0x6c, 0x17, + 0x11, 0xb7, 0x52, 0x11, 0xc9, 0x42, 0x21, 0x82, 0xab, 0x9e, 0x06, 0x1b, + 0x3c, 0xad, 0xc8, 0xc4, 0xb8, 0x0a, 0xa4, 0x08, 0x2a, 0x66, 0x9c, 0xf0, + 0xbe, 0x41, 0x08, 0x71, 0x1c, 0x2f, 0xf6, 0x98, 0xfa, 0x7d, 0x68, 0x62, + 0x5c, 0x09, 0x22, 0x49, 0x4f, 0xec, 0xbd, 0x36, 0xd5, 0xbf, 0x73, 0x1c, + 0x1a, 0xb9, 0xa9, 0x7a, 0x63, 0x5d, 0x11, 0x44, 0xc7, 0x0a, 0xd0, 0xb3, + 0x26, 0x98, 0x56, 0x87, 0xeb, 0x2d, 0x6c, 0x0a, 0x21, 0xce, 0xe6, 0x15, + 0xfc, 0xc3, 0x74, 0xfb, 0x1a, 0xbe, 0x2e, 0x1b, 0xe4, 0x5e, 0xec, 0xb1, + 0x05, 0x11, 0xc1, 0x68, 0xc6, 0xc1, 0x9d, 0x5b, 0xc8, 0x7f, 0x30, 0x24, + 0x7e, 0xb8, 0xdc, 0x89, 0x71, 0x15, 0x28, 0x76, 0xb4, 0x27, 0xf6, 0xb4, + 0x26, 0x1c, 0xed, 0x59, 0x43, 0xd6, 0xe1, 0x0f, 0x3a, 0x17, 0x11, 0x04, + 0xc1, 0x19, 0x34, 0x08, 0xcc, 0x74, 0x33, 0x4a, 0x59, 0xe6, 0x7c, 0x5f, + 0x3d, 0x5e, 0x87, 0xd7, 0xe3, 0x56, 0xab, 0xf5, 0xc7, 0xe6, 0x74, 0x34, + 0xe1, 0x3f, 0xe5, 0x21, 0x6e, 0xce, 0x0a, 0x36, 0x99, 0x91, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; unsigned char ResetButton_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, - 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x11, 0xf2, 0xad, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x04, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x8d, - 0x71, 0xdb, 0x36, 0x14, 0x80, 0x1f, 0x48, 0x89, 0x92, 0xcf, 0xbe, 0xab, - 0x3a, 0x41, 0x39, 0x82, 0x37, 0xb0, 0x32, 0x41, 0xb2, 0x41, 0x9d, 0x09, - 0x92, 0x4e, 0xe0, 0x8c, 0x50, 0x4f, 0x60, 0x77, 0x82, 0xb8, 0x13, 0x58, - 0x99, 0x20, 0xee, 0x04, 0x66, 0x27, 0xb0, 0x7a, 0x67, 0x57, 0x24, 0x24, - 0x12, 0x79, 0xa0, 0xa5, 0x84, 0x04, 0x29, 0x9b, 0xf8, 0x21, 0x09, 0x46, - 0xf8, 0xee, 0x74, 0x0e, 0x71, 0x82, 0x4c, 0x7f, 0x7a, 0x20, 0x81, 0xf7, - 0xc0, 0x00, 0x38, 0x1c, 0x07, 0x0f, 0x63, 0x6c, 0x96, 0x50, 0xfa, 0x95, - 0x52, 0xfa, 0x3b, 0x38, 0xe4, 0xd8, 0xc9, 0x8b, 0x13, 0xca, 0xf8, 0xcb, - 0x49, 0x94, 0xa4, 0x28, 0x6f, 0x88, 0x12, 0x3d, 0xe8, 0x99, 0x2c, 0x4d, - 0x2f, 0x2b, 0x6d, 0x0c, 0xae, 0x5d, 0x24, 0x4a, 0xb0, 0x5a, 0xad, 0xce, - 0xc5, 0x28, 0x74, 0xc3, 0x59, 0x12, 0x27, 0xd1, 0x00, 0x4e, 0xa2, 0x01, - 0x9c, 0x44, 0x03, 0x38, 0x89, 0x06, 0x70, 0x12, 0x0d, 0xe0, 0x24, 0x1a, - 0xc0, 0x76, 0x89, 0x04, 0x2c, 0x03, 0x85, 0x85, 0x69, 0xea, 0xcf, 0x7c, - 0x9f, 0xcc, 0x70, 0xa1, 0x17, 0xe6, 0x8d, 0x1e, 0x9b, 0x13, 0x20, 0x15, - 0x61, 0x1e, 0x81, 0xf3, 0x20, 0x08, 0xfe, 0x82, 0x1e, 0xe9, 0x5d, 0xe0, - 0x6a, 0xb5, 0x9e, 0x83, 0x97, 0xcd, 0x09, 0xf1, 0xce, 0x70, 0x61, 0x7c, - 0x8a, 0x4d, 0x33, 0x99, 0xfe, 0x7d, 0x4b, 0xec, 0x45, 0x20, 0x4f, 0x20, - 0xc4, 0x94, 0x7e, 0xdc, 0x46, 0x55, 0x08, 0x9a, 0xb0, 0x2c, 0x7d, 0x73, - 0x74, 0x74, 0xb4, 0x80, 0x1e, 0x18, 0x41, 0x87, 0xec, 0xc4, 0x25, 0x74, - 0xfd, 0x01, 0xe5, 0x49, 0x45, 0xda, 0x3e, 0x08, 0x81, 0xeb, 0x69, 0x4f, - 0xf2, 0xf2, 0xdf, 0x0f, 0x1d, 0xf1, 0x7f, 0x1c, 0x7f, 0xf4, 0x88, 0x77, - 0x01, 0xaf, 0x0f, 0xd1, 0x25, 0x9e, 0x54, 0xc4, 0x18, 0xfe, 0x24, 0x10, - 0xe5, 0x2d, 0x04, 0x4e, 0xf1, 0xf8, 0x54, 0x7c, 0x23, 0x97, 0x37, 0x09, - 0x82, 0xf7, 0xd0, 0x23, 0xad, 0x47, 0x20, 0xbf, 0x29, 0x10, 0x7f, 0x74, - 0x85, 0xe1, 0x37, 0xdf, 0xf3, 0x96, 0x25, 0x30, 0xb8, 0xc3, 0x9f, 0x37, - 0x93, 0xc9, 0xf8, 0x86, 0x10, 0xf2, 0x6f, 0xa5, 0xbf, 0xe7, 0xdf, 0x8a, - 0x9d, 0x6c, 0x90, 0xd7, 0x3a, 0x8f, 0x8f, 0x8f, 0xa7, 0x38, 0xe5, 0x78, - 0xa8, 0x9b, 0x86, 0xc4, 0x49, 0x72, 0x9f, 0x24, 0xc9, 0x05, 0x1f, 0xd6, - 0xfb, 0xfa, 0x73, 0x79, 0xf8, 0xde, 0x7b, 0xb1, 0x2f, 0xe6, 0x10, 0xaf, - 0xe0, 0x67, 0x67, 0xdf, 0xfc, 0x8d, 0x0b, 0xe5, 0xe2, 0x1a, 0xf4, 0x77, - 0xf2, 0x2a, 0xaf, 0x98, 0xde, 0x72, 0x31, 0x0d, 0xfa, 0x1f, 0xae, 0xbc, - 0xed, 0xb0, 0xad, 0xc8, 0x6b, 0x12, 0x75, 0x9c, 0x43, 0x8f, 0xbc, 0xda, - 0x3f, 0xbe, 0xe9, 0xb2, 0xeb, 0xa0, 0xe5, 0x71, 0xea, 0x0a, 0x44, 0x71, - 0x1c, 0x7f, 0x68, 0xd2, 0xf7, 0xe0, 0xe5, 0xf1, 0x79, 0x9e, 0xcd, 0xc3, - 0x96, 0xdf, 0xed, 0x57, 0x49, 0xf2, 0x29, 0x49, 0xe8, 0x55, 0x93, 0xeb, - 0x70, 0xa7, 0xd4, 0x0b, 0x48, 0x3e, 0xab, 0xf7, 0x35, 0x1f, 0x79, 0xfc, - 0xf3, 0x8a, 0x33, 0x81, 0x97, 0xa6, 0x4f, 0x32, 0x18, 0x29, 0x6b, 0x7a, - 0xbe, 0xcf, 0x23, 0x2d, 0xfc, 0xd1, 0xc2, 0x22, 0x96, 0x65, 0x7f, 0x34, - 0xeb, 0x3b, 0xfa, 0x0c, 0xc2, 0x7a, 0xb8, 0x8d, 0x49, 0x32, 0x03, 0x12, - 0x16, 0x0e, 0x67, 0x94, 0x6e, 0x1a, 0x5d, 0x5a, 0x5a, 0x67, 0x1b, 0x41, - 0xca, 0xb9, 0x3a, 0x71, 0xb2, 0xdd, 0xd6, 0x35, 0x2f, 0x49, 0xd6, 0x17, - 0xe2, 0x7c, 0xd4, 0x54, 0x14, 0x6a, 0xb1, 0x5a, 0xd1, 0x73, 0x71, 0x85, - 0x01, 0x92, 0xec, 0x24, 0xb6, 0x7d, 0xc3, 0x88, 0x85, 0x55, 0x11, 0x97, - 0x0a, 0x7d, 0x23, 0x5e, 0xbf, 0x54, 0x33, 0xc5, 0x5d, 0x5c, 0xd8, 0x6b, - 0xa2, 0x50, 0xfa, 0xcb, 0x36, 0x0a, 0xca, 0xaa, 0x4c, 0x9a, 0xad, 0xbb, - 0xc3, 0x15, 0xc8, 0xd3, 0x69, 0x42, 0x14, 0xe2, 0xf9, 0xce, 0x41, 0x03, - 0xad, 0x9b, 0x48, 0x96, 0xc1, 0x59, 0xa9, 0x81, 0xb1, 0x1b, 0x4c, 0x6c, - 0x46, 0x60, 0x29, 0x98, 0xe9, 0x59, 0x62, 0x6a, 0xec, 0xae, 0xd8, 0xe6, - 0x79, 0xa3, 0x33, 0xd0, 0x40, 0xef, 0x2e, 0xec, 0x91, 0x77, 0xa5, 0x43, - 0x8f, 0xdc, 0x80, 0xed, 0x64, 0x50, 0x3a, 0x47, 0x46, 0xf6, 0xa6, 0xd9, - 0x1a, 0xa1, 0x27, 0xf0, 0xb9, 0x86, 0xf1, 0x1d, 0x1c, 0xd2, 0xff, 0x80, - 0xe5, 0x30, 0x96, 0xfe, 0x5d, 0x6e, 0xa8, 0x26, 0x6a, 0x65, 0x50, 0xce, - 0x48, 0x3f, 0x6f, 0x8c, 0x5c, 0x3f, 0x14, 0x9a, 0x96, 0xd3, 0x49, 0xf0, - 0x2b, 0x0c, 0x00, 0x7e, 0x1d, 0x84, 0x42, 0x66, 0x7c, 0x12, 0x8c, 0x43, - 0x31, 0x91, 0xdb, 0x14, 0xe5, 0x08, 0x8c, 0xe3, 0x8d, 0xf8, 0xcd, 0x45, - 0x30, 0x10, 0x50, 0x56, 0x54, 0x3c, 0x7e, 0x7a, 0x7a, 0x52, 0xfe, 0xe2, - 0xcd, 0x6d, 0xb0, 0xc4, 0x1a, 0x06, 0x0c, 0x04, 0x06, 0xe5, 0x73, 0x9d, - 0x4c, 0x26, 0xbf, 0x80, 0x22, 0x1a, 0x02, 0xb7, 0x45, 0xef, 0x1f, 0xc7, - 0x83, 0x11, 0x48, 0x18, 0x8b, 0x8a, 0xc7, 0x8c, 0x91, 0x10, 0x14, 0x31, - 0x16, 0x81, 0xf9, 0x14, 0x61, 0x30, 0x98, 0x29, 0xa9, 0x72, 0x34, 0x04, - 0x96, 0xaf, 0x23, 0x58, 0x76, 0x0c, 0x61, 0x20, 0x30, 0x52, 0x2e, 0xad, - 0x12, 0x52, 0x8e, 0x48, 0x19, 0x94, 0x05, 0xfa, 0xbe, 0x30, 0x64, 0x09, - 0x18, 0xfb, 0x56, 0xdb, 0x86, 0x00, 0xf4, 0x1f, 0x81, 0x69, 0x9a, 0x8a, - 0x43, 0x36, 0x84, 0x81, 0x80, 0x53, 0xb0, 0xb0, 0x78, 0x3c, 0x1a, 0x8d, - 0x94, 0xe7, 0xaf, 0xca, 0x02, 0xb7, 0x4b, 0xb6, 0xa2, 0xc4, 0x19, 0x9e, - 0xd8, 0x6f, 0x60, 0x39, 0x7c, 0xfd, 0x0e, 0xe5, 0x08, 0x5c, 0xea, 0x5c, - 0xbf, 0xf5, 0x6e, 0x22, 0xc2, 0xba, 0x12, 0xb3, 0x1d, 0xef, 0xc0, 0x72, - 0xd2, 0x54, 0x58, 0x79, 0xb0, 0xf2, 0xdf, 0x20, 0x8b, 0x96, 0x40, 0xc2, - 0xc8, 0x42, 0xf8, 0x34, 0xeb, 0x05, 0xe2, 0x7a, 0xfd, 0xad, 0xd0, 0xa4, - 0xb5, 0x7e, 0xd7, 0xcc, 0xc6, 0x6c, 0xbe, 0x94, 0x1a, 0x18, 0xdf, 0x04, - 0x64, 0x41, 0x96, 0x77, 0x0f, 0x3c, 0xd5, 0xc6, 0x80, 0x95, 0xbe, 0xe4, - 0xcd, 0x86, 0x7e, 0x01, 0x0d, 0xb4, 0x04, 0x6e, 0xf7, 0xe4, 0x45, 0x85, - 0xa6, 0x4e, 0x6a, 0x0d, 0xea, 0x39, 0x47, 0x7f, 0x5e, 0x3e, 0x66, 0xd1, - 0xc9, 0xc9, 0x89, 0xd6, 0x10, 0xd6, 0xa6, 0xae, 0xd6, 0x00, 0x2d, 0x82, - 0xa5, 0xc9, 0x6b, 0xfe, 0x3b, 0x78, 0x19, 0x00, 0x24, 0x31, 0x95, 0x3d, - 0x37, 0x4a, 0x5d, 0x96, 0xb7, 0xad, 0x5a, 0xc3, 0x56, 0xde, 0xf7, 0x2f, - 0x4a, 0x46, 0x62, 0xb5, 0x76, 0x63, 0x51, 0xf6, 0xbc, 0x12, 0x85, 0x31, - 0xbd, 0x05, 0xc3, 0x08, 0xf2, 0x76, 0xaf, 0xaf, 0x8d, 0xfa, 0xd6, 0xd4, - 0x9e, 0x79, 0x81, 0x1d, 0x6c, 0x41, 0x8c, 0x42, 0xd3, 0x27, 0x57, 0x2f, - 0x2f, 0xb9, 0x6f, 0x1a, 0x41, 0xbc, 0xc8, 0xaf, 0xda, 0xb7, 0x33, 0xf8, - 0x09, 0x71, 0x71, 0xaf, 0x6d, 0x9a, 0x94, 0xfe, 0x5c, 0x4d, 0x79, 0x7c, - 0x3b, 0x87, 0xea, 0x7e, 0x9d, 0xc1, 0xa3, 0x2b, 0xaf, 0x76, 0xbf, 0x0e, - 0x6d, 0x36, 0xec, 0x07, 0x8f, 0x76, 0xe4, 0xd5, 0x6e, 0xf2, 0xb4, 0x70, - 0xe8, 0xb6, 0x41, 0x2b, 0xc3, 0x16, 0x5f, 0x2a, 0x53, 0x9f, 0xc1, 0xa1, - 0x23, 0x2f, 0xbf, 0xdb, 0xd2, 0xf5, 0x6d, 0x9d, 0xbc, 0x83, 0x78, 0x40, - 0x51, 0x4b, 0xde, 0x73, 0xd4, 0x3d, 0x38, 0x79, 0x12, 0xf2, 0x76, 0x9b, - 0x26, 0xe3, 0xbd, 0x8f, 0x52, 0xa8, 0xad, 0x58, 0x64, 0xb0, 0xe2, 0x69, - 0x4d, 0x2e, 0xaf, 0xfa, 0x34, 0x66, 0xbe, 0xc7, 0xf0, 0x8d, 0xb8, 0x55, - 0x24, 0x7f, 0xf0, 0x86, 0xf8, 0x6f, 0xf3, 0x5d, 0x11, 0x2f, 0x3d, 0x9c, - 0xc8, 0x60, 0x81, 0x45, 0xf4, 0xf7, 0x6d, 0x6f, 0x35, 0xe9, 0xff, 0x69, - 0xcd, 0x5a, 0x79, 0x39, 0x77, 0x78, 0x72, 0xf9, 0x42, 0x9f, 0x11, 0x12, - 0x12, 0x60, 0xb3, 0x6d, 0xdd, 0xe5, 0xd5, 0x47, 0xc5, 0x80, 0x65, 0x9f, - 0xa6, 0xd3, 0xe9, 0x25, 0x74, 0x40, 0xaf, 0x02, 0x5f, 0x90, 0xa7, 0xc2, - 0x12, 0x25, 0xff, 0x19, 0x04, 0xc1, 0x65, 0x97, 0x15, 0xc2, 0xde, 0x04, - 0xf2, 0x6d, 0x65, 0x75, 0xcf, 0xc0, 0x29, 0x10, 0xa1, 0xb8, 0xeb, 0xae, - 0xc5, 0xed, 0xe8, 0x37, 0x02, 0x71, 0xb2, 0x8b, 0x12, 0x65, 0xd7, 0xcd, - 0xf9, 0xc3, 0x89, 0x58, 0x8a, 0x5c, 0x78, 0x9e, 0xb7, 0x18, 0x8f, 0xc7, - 0x5a, 0x09, 0x51, 0x5d, 0x2c, 0x78, 0x62, 0xbd, 0x5e, 0x22, 0xdf, 0x68, - 0x4e, 0xc0, 0x5b, 0x3c, 0xff, 0x9b, 0x45, 0xb8, 0xc6, 0xfe, 0xef, 0xf8, - 0xf8, 0xf8, 0x41, 0x75, 0x13, 0xd0, 0x4f, 0x8d, 0xfb, 0xdf, 0x39, 0x0c, - 0xe0, 0x24, 0x1a, 0xc0, 0x49, 0x34, 0x80, 0x93, 0x68, 0x00, 0x27, 0xd1, - 0x00, 0x4e, 0xa2, 0x01, 0x9c, 0x44, 0x03, 0x38, 0x89, 0x06, 0x70, 0x12, - 0x0d, 0x50, 0x27, 0xf1, 0x60, 0x0a, 0x44, 0xa6, 0x28, 0x4a, 0xe4, 0xf2, - 0x6c, 0xde, 0xc8, 0x64, 0x2d, 0x5c, 0xa2, 0x93, 0xe7, 0x70, 0xec, 0xf8, - 0x06, 0x48, 0x19, 0x41, 0x87, 0x23, 0xf2, 0x01, 0xeb, 0x00, 0x00, 0x00, - 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 -}; + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x11, 0xf2, 0xad, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x04, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x8d, + 0x71, 0xdb, 0x36, 0x14, 0x80, 0x1f, 0x48, 0x89, 0x92, 0xcf, 0xbe, 0xab, + 0x3a, 0x41, 0x39, 0x82, 0x37, 0xb0, 0x32, 0x41, 0xb2, 0x41, 0x9d, 0x09, + 0x92, 0x4e, 0xe0, 0x8c, 0x50, 0x4f, 0x60, 0x77, 0x82, 0xb8, 0x13, 0x58, + 0x99, 0x20, 0xee, 0x04, 0x66, 0x27, 0xb0, 0x7a, 0x67, 0x57, 0x24, 0x24, + 0x12, 0x79, 0xa0, 0xa5, 0x84, 0x04, 0x29, 0x9b, 0xf8, 0x21, 0x09, 0x46, + 0xf8, 0xee, 0x74, 0x0e, 0x71, 0x82, 0x4c, 0x7f, 0x7a, 0x20, 0x81, 0xf7, + 0xc0, 0x00, 0x38, 0x1c, 0x07, 0x0f, 0x63, 0x6c, 0x96, 0x50, 0xfa, 0x95, + 0x52, 0xfa, 0x3b, 0x38, 0xe4, 0xd8, 0xc9, 0x8b, 0x13, 0xca, 0xf8, 0xcb, + 0x49, 0x94, 0xa4, 0x28, 0x6f, 0x88, 0x12, 0x3d, 0xe8, 0x99, 0x2c, 0x4d, + 0x2f, 0x2b, 0x6d, 0x0c, 0xae, 0x5d, 0x24, 0x4a, 0xb0, 0x5a, 0xad, 0xce, + 0xc5, 0x28, 0x74, 0xc3, 0x59, 0x12, 0x27, 0xd1, 0x00, 0x4e, 0xa2, 0x01, + 0x9c, 0x44, 0x03, 0x38, 0x89, 0x06, 0x70, 0x12, 0x0d, 0xe0, 0x24, 0x1a, + 0xc0, 0x76, 0x89, 0x04, 0x2c, 0x03, 0x85, 0x85, 0x69, 0xea, 0xcf, 0x7c, + 0x9f, 0xcc, 0x70, 0xa1, 0x17, 0xe6, 0x8d, 0x1e, 0x9b, 0x13, 0x20, 0x15, + 0x61, 0x1e, 0x81, 0xf3, 0x20, 0x08, 0xfe, 0x82, 0x1e, 0xe9, 0x5d, 0xe0, + 0x6a, 0xb5, 0x9e, 0x83, 0x97, 0xcd, 0x09, 0xf1, 0xce, 0x70, 0x61, 0x7c, + 0x8a, 0x4d, 0x33, 0x99, 0xfe, 0x7d, 0x4b, 0xec, 0x45, 0x20, 0x4f, 0x20, + 0xc4, 0x94, 0x7e, 0xdc, 0x46, 0x55, 0x08, 0x9a, 0xb0, 0x2c, 0x7d, 0x73, + 0x74, 0x74, 0xb4, 0x80, 0x1e, 0x18, 0x41, 0x87, 0xec, 0xc4, 0x25, 0x74, + 0xfd, 0x01, 0xe5, 0x49, 0x45, 0xda, 0x3e, 0x08, 0x81, 0xeb, 0x69, 0x4f, + 0xf2, 0xf2, 0xdf, 0x0f, 0x1d, 0xf1, 0x7f, 0x1c, 0x7f, 0xf4, 0x88, 0x77, + 0x01, 0xaf, 0x0f, 0xd1, 0x25, 0x9e, 0x54, 0xc4, 0x18, 0xfe, 0x24, 0x10, + 0xe5, 0x2d, 0x04, 0x4e, 0xf1, 0xf8, 0x54, 0x7c, 0x23, 0x97, 0x37, 0x09, + 0x82, 0xf7, 0xd0, 0x23, 0xad, 0x47, 0x20, 0xbf, 0x29, 0x10, 0x7f, 0x74, + 0x85, 0xe1, 0x37, 0xdf, 0xf3, 0x96, 0x25, 0x30, 0xb8, 0xc3, 0x9f, 0x37, + 0x93, 0xc9, 0xf8, 0x86, 0x10, 0xf2, 0x6f, 0xa5, 0xbf, 0xe7, 0xdf, 0x8a, + 0x9d, 0x6c, 0x90, 0xd7, 0x3a, 0x8f, 0x8f, 0x8f, 0xa7, 0x38, 0xe5, 0x78, + 0xa8, 0x9b, 0x86, 0xc4, 0x49, 0x72, 0x9f, 0x24, 0xc9, 0x05, 0x1f, 0xd6, + 0xfb, 0xfa, 0x73, 0x79, 0xf8, 0xde, 0x7b, 0xb1, 0x2f, 0xe6, 0x10, 0xaf, + 0xe0, 0x67, 0x67, 0xdf, 0xfc, 0x8d, 0x0b, 0xe5, 0xe2, 0x1a, 0xf4, 0x77, + 0xf2, 0x2a, 0xaf, 0x98, 0xde, 0x72, 0x31, 0x0d, 0xfa, 0x1f, 0xae, 0xbc, + 0xed, 0xb0, 0xad, 0xc8, 0x6b, 0x12, 0x75, 0x9c, 0x43, 0x8f, 0xbc, 0xda, + 0x3f, 0xbe, 0xe9, 0xb2, 0xeb, 0xa0, 0xe5, 0x71, 0xea, 0x0a, 0x44, 0x71, + 0x1c, 0x7f, 0x68, 0xd2, 0xf7, 0xe0, 0xe5, 0xf1, 0x79, 0x9e, 0xcd, 0xc3, + 0x96, 0xdf, 0xed, 0x57, 0x49, 0xf2, 0x29, 0x49, 0xe8, 0x55, 0x93, 0xeb, + 0x70, 0xa7, 0xd4, 0x0b, 0x48, 0x3e, 0xab, 0xf7, 0x35, 0x1f, 0x79, 0xfc, + 0xf3, 0x8a, 0x33, 0x81, 0x97, 0xa6, 0x4f, 0x32, 0x18, 0x29, 0x6b, 0x7a, + 0xbe, 0xcf, 0x23, 0x2d, 0xfc, 0xd1, 0xc2, 0x22, 0x96, 0x65, 0x7f, 0x34, + 0xeb, 0x3b, 0xfa, 0x0c, 0xc2, 0x7a, 0xb8, 0x8d, 0x49, 0x32, 0x03, 0x12, + 0x16, 0x0e, 0x67, 0x94, 0x6e, 0x1a, 0x5d, 0x5a, 0x5a, 0x67, 0x1b, 0x41, + 0xca, 0xb9, 0x3a, 0x71, 0xb2, 0xdd, 0xd6, 0x35, 0x2f, 0x49, 0xd6, 0x17, + 0xe2, 0x7c, 0xd4, 0x54, 0x14, 0x6a, 0xb1, 0x5a, 0xd1, 0x73, 0x71, 0x85, + 0x01, 0x92, 0xec, 0x24, 0xb6, 0x7d, 0xc3, 0x88, 0x85, 0x55, 0x11, 0x97, + 0x0a, 0x7d, 0x23, 0x5e, 0xbf, 0x54, 0x33, 0xc5, 0x5d, 0x5c, 0xd8, 0x6b, + 0xa2, 0x50, 0xfa, 0xcb, 0x36, 0x0a, 0xca, 0xaa, 0x4c, 0x9a, 0xad, 0xbb, + 0xc3, 0x15, 0xc8, 0xd3, 0x69, 0x42, 0x14, 0xe2, 0xf9, 0xce, 0x41, 0x03, + 0xad, 0x9b, 0x48, 0x96, 0xc1, 0x59, 0xa9, 0x81, 0xb1, 0x1b, 0x4c, 0x6c, + 0x46, 0x60, 0x29, 0x98, 0xe9, 0x59, 0x62, 0x6a, 0xec, 0xae, 0xd8, 0xe6, + 0x79, 0xa3, 0x33, 0xd0, 0x40, 0xef, 0x2e, 0xec, 0x91, 0x77, 0xa5, 0x43, + 0x8f, 0xdc, 0x80, 0xed, 0x64, 0x50, 0x3a, 0x47, 0x46, 0xf6, 0xa6, 0xd9, + 0x1a, 0xa1, 0x27, 0xf0, 0xb9, 0x86, 0xf1, 0x1d, 0x1c, 0xd2, 0xff, 0x80, + 0xe5, 0x30, 0x96, 0xfe, 0x5d, 0x6e, 0xa8, 0x26, 0x6a, 0x65, 0x50, 0xce, + 0x48, 0x3f, 0x6f, 0x8c, 0x5c, 0x3f, 0x14, 0x9a, 0x96, 0xd3, 0x49, 0xf0, + 0x2b, 0x0c, 0x00, 0x7e, 0x1d, 0x84, 0x42, 0x66, 0x7c, 0x12, 0x8c, 0x43, + 0x31, 0x91, 0xdb, 0x14, 0xe5, 0x08, 0x8c, 0xe3, 0x8d, 0xf8, 0xcd, 0x45, + 0x30, 0x10, 0x50, 0x56, 0x54, 0x3c, 0x7e, 0x7a, 0x7a, 0x52, 0xfe, 0xe2, + 0xcd, 0x6d, 0xb0, 0xc4, 0x1a, 0x06, 0x0c, 0x04, 0x06, 0xe5, 0x73, 0x9d, + 0x4c, 0x26, 0xbf, 0x80, 0x22, 0x1a, 0x02, 0xb7, 0x45, 0xef, 0x1f, 0xc7, + 0x83, 0x11, 0x48, 0x18, 0x8b, 0x8a, 0xc7, 0x8c, 0x91, 0x10, 0x14, 0x31, + 0x16, 0x81, 0xf9, 0x14, 0x61, 0x30, 0x98, 0x29, 0xa9, 0x72, 0x34, 0x04, + 0x96, 0xaf, 0x23, 0x58, 0x76, 0x0c, 0x61, 0x20, 0x30, 0x52, 0x2e, 0xad, + 0x12, 0x52, 0x8e, 0x48, 0x19, 0x94, 0x05, 0xfa, 0xbe, 0x30, 0x64, 0x09, + 0x18, 0xfb, 0x56, 0xdb, 0x86, 0x00, 0xf4, 0x1f, 0x81, 0x69, 0x9a, 0x8a, + 0x43, 0x36, 0x84, 0x81, 0x80, 0x53, 0xb0, 0xb0, 0x78, 0x3c, 0x1a, 0x8d, + 0x94, 0xe7, 0xaf, 0xca, 0x02, 0xb7, 0x4b, 0xb6, 0xa2, 0xc4, 0x19, 0x9e, + 0xd8, 0x6f, 0x60, 0x39, 0x7c, 0xfd, 0x0e, 0xe5, 0x08, 0x5c, 0xea, 0x5c, + 0xbf, 0xf5, 0x6e, 0x22, 0xc2, 0xba, 0x12, 0xb3, 0x1d, 0xef, 0xc0, 0x72, + 0xd2, 0x54, 0x58, 0x79, 0xb0, 0xf2, 0xdf, 0x20, 0x8b, 0x96, 0x40, 0xc2, + 0xc8, 0x42, 0xf8, 0x34, 0xeb, 0x05, 0xe2, 0x7a, 0xfd, 0xad, 0xd0, 0xa4, + 0xb5, 0x7e, 0xd7, 0xcc, 0xc6, 0x6c, 0xbe, 0x94, 0x1a, 0x18, 0xdf, 0x04, + 0x64, 0x41, 0x96, 0x77, 0x0f, 0x3c, 0xd5, 0xc6, 0x80, 0x95, 0xbe, 0xe4, + 0xcd, 0x86, 0x7e, 0x01, 0x0d, 0xb4, 0x04, 0x6e, 0xf7, 0xe4, 0x45, 0x85, + 0xa6, 0x4e, 0x6a, 0x0d, 0xea, 0x39, 0x47, 0x7f, 0x5e, 0x3e, 0x66, 0xd1, + 0xc9, 0xc9, 0x89, 0xd6, 0x10, 0xd6, 0xa6, 0xae, 0xd6, 0x00, 0x2d, 0x82, + 0xa5, 0xc9, 0x6b, 0xfe, 0x3b, 0x78, 0x19, 0x00, 0x24, 0x31, 0x95, 0x3d, + 0x37, 0x4a, 0x5d, 0x96, 0xb7, 0xad, 0x5a, 0xc3, 0x56, 0xde, 0xf7, 0x2f, + 0x4a, 0x46, 0x62, 0xb5, 0x76, 0x63, 0x51, 0xf6, 0xbc, 0x12, 0x85, 0x31, + 0xbd, 0x05, 0xc3, 0x08, 0xf2, 0x76, 0xaf, 0xaf, 0x8d, 0xfa, 0xd6, 0xd4, + 0x9e, 0x79, 0x81, 0x1d, 0x6c, 0x41, 0x8c, 0x42, 0xd3, 0x27, 0x57, 0x2f, + 0x2f, 0xb9, 0x6f, 0x1a, 0x41, 0xbc, 0xc8, 0xaf, 0xda, 0xb7, 0x33, 0xf8, + 0x09, 0x71, 0x71, 0xaf, 0x6d, 0x9a, 0x94, 0xfe, 0x5c, 0x4d, 0x79, 0x7c, + 0x3b, 0x87, 0xea, 0x7e, 0x9d, 0xc1, 0xa3, 0x2b, 0xaf, 0x76, 0xbf, 0x0e, + 0x6d, 0x36, 0xec, 0x07, 0x8f, 0x76, 0xe4, 0xd5, 0x6e, 0xf2, 0xb4, 0x70, + 0xe8, 0xb6, 0x41, 0x2b, 0xc3, 0x16, 0x5f, 0x2a, 0x53, 0x9f, 0xc1, 0xa1, + 0x23, 0x2f, 0xbf, 0xdb, 0xd2, 0xf5, 0x6d, 0x9d, 0xbc, 0x83, 0x78, 0x40, + 0x51, 0x4b, 0xde, 0x73, 0xd4, 0x3d, 0x38, 0x79, 0x12, 0xf2, 0x76, 0x9b, + 0x26, 0xe3, 0xbd, 0x8f, 0x52, 0xa8, 0xad, 0x58, 0x64, 0xb0, 0xe2, 0x69, + 0x4d, 0x2e, 0xaf, 0xfa, 0x34, 0x66, 0xbe, 0xc7, 0xf0, 0x8d, 0xb8, 0x55, + 0x24, 0x7f, 0xf0, 0x86, 0xf8, 0x6f, 0xf3, 0x5d, 0x11, 0x2f, 0x3d, 0x9c, + 0xc8, 0x60, 0x81, 0x45, 0xf4, 0xf7, 0x6d, 0x6f, 0x35, 0xe9, 0xff, 0x69, + 0xcd, 0x5a, 0x79, 0x39, 0x77, 0x78, 0x72, 0xf9, 0x42, 0x9f, 0x11, 0x12, + 0x12, 0x60, 0xb3, 0x6d, 0xdd, 0xe5, 0xd5, 0x47, 0xc5, 0x80, 0x65, 0x9f, + 0xa6, 0xd3, 0xe9, 0x25, 0x74, 0x40, 0xaf, 0x02, 0x5f, 0x90, 0xa7, 0xc2, + 0x12, 0x25, 0xff, 0x19, 0x04, 0xc1, 0x65, 0x97, 0x15, 0xc2, 0xde, 0x04, + 0xf2, 0x6d, 0x65, 0x75, 0xcf, 0xc0, 0x29, 0x10, 0xa1, 0xb8, 0xeb, 0xae, + 0xc5, 0xed, 0xe8, 0x37, 0x02, 0x71, 0xb2, 0x8b, 0x12, 0x65, 0xd7, 0xcd, + 0xf9, 0xc3, 0x89, 0x58, 0x8a, 0x5c, 0x78, 0x9e, 0xb7, 0x18, 0x8f, 0xc7, + 0x5a, 0x09, 0x51, 0x5d, 0x2c, 0x78, 0x62, 0xbd, 0x5e, 0x22, 0xdf, 0x68, + 0x4e, 0xc0, 0x5b, 0x3c, 0xff, 0x9b, 0x45, 0xb8, 0xc6, 0xfe, 0xef, 0xf8, + 0xf8, 0xf8, 0x41, 0x75, 0x13, 0xd0, 0x4f, 0x8d, 0xfb, 0xdf, 0x39, 0x0c, + 0xe0, 0x24, 0x1a, 0xc0, 0x49, 0x34, 0x80, 0x93, 0x68, 0x00, 0x27, 0xd1, + 0x00, 0x4e, 0xa2, 0x01, 0x9c, 0x44, 0x03, 0x38, 0x89, 0x06, 0x70, 0x12, + 0x0d, 0x50, 0x27, 0xf1, 0x60, 0x0a, 0x44, 0xa6, 0x28, 0x4a, 0xe4, 0xf2, + 0x6c, 0xde, 0xc8, 0x64, 0x2d, 0x5c, 0xa2, 0x93, 0xe7, 0x70, 0xec, 0xf8, + 0x06, 0x48, 0x19, 0x41, 0x87, 0x23, 0xf2, 0x01, 0xeb, 0x00, 0x00, 0x00, + 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; unsigned char SaveButton_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, - 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, - 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x11, 0xf2, 0xad, 0x00, 0x00, 0x00, - 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, - 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, - 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, - 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, - 0x00, 0x05, 0x40, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x8d, - 0x71, 0xdb, 0x36, 0x14, 0xc7, 0xdf, 0x23, 0x25, 0x51, 0x3a, 0xfb, 0xae, - 0xca, 0x04, 0xe1, 0x06, 0x51, 0x27, 0xa8, 0x3a, 0x41, 0xdc, 0x09, 0x6a, - 0x4f, 0xd0, 0x74, 0x82, 0x38, 0x13, 0x38, 0x99, 0xc0, 0xea, 0x04, 0x76, - 0x27, 0xb0, 0x32, 0x41, 0x9d, 0x09, 0xc2, 0x4c, 0x60, 0xe6, 0xce, 0xb6, - 0x48, 0xca, 0xe4, 0xeb, 0x83, 0x2c, 0x5f, 0x48, 0x48, 0x0a, 0x40, 0x81, - 0xa4, 0x29, 0x19, 0xbf, 0x3b, 0x25, 0x26, 0x45, 0x10, 0xe0, 0x5f, 0xf8, - 0x7a, 0x0f, 0x8f, 0x00, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0x62, 0xb1, - 0xbc, 0x44, 0x10, 0x2a, 0xe2, 0xf6, 0x36, 0x19, 0xb9, 0x2e, 0xf0, 0x07, - 0xdf, 0x10, 0xd1, 0x90, 0x10, 0x7d, 0x20, 0xf2, 0x73, 0x97, 0x0c, 0x97, - 0x9f, 0x26, 0x09, 0x11, 0x21, 0xe0, 0x87, 0xfc, 0xd8, 0xeb, 0xf5, 0xfe, - 0x81, 0x1a, 0x30, 0x12, 0x70, 0x36, 0x9b, 0x8f, 0x59, 0xb4, 0xb7, 0x19, - 0xd1, 0x31, 0x34, 0x2f, 0x4e, 0x49, 0x28, 0xa0, 0x2c, 0xfb, 0x7d, 0x30, - 0x18, 0x04, 0x50, 0x21, 0x5b, 0x09, 0x38, 0x9b, 0xcd, 0x7c, 0x74, 0x3b, - 0xe7, 0x5c, 0xc3, 0xc6, 0xb0, 0x53, 0x54, 0x2f, 0x62, 0x69, 0x01, 0xe3, - 0x38, 0x3e, 0x22, 0xc0, 0x73, 0x68, 0x7d, 0x8d, 0xdb, 0x44, 0xb5, 0x22, - 0x96, 0x12, 0x70, 0x29, 0xde, 0xc5, 0x86, 0xaf, 0x43, 0x2e, 0xdc, 0x14, - 0xc1, 0xb9, 0x46, 0xc4, 0x00, 0x91, 0x02, 0xbe, 0xfe, 0xfb, 0xc1, 0xc1, - 0xc1, 0xcd, 0xf2, 0xfb, 0xef, 0x7c, 0x3e, 0x84, 0x06, 0x59, 0xb4, 0x14, - 0xc7, 0x39, 0xe3, 0xc7, 0x3c, 0x2a, 0x7e, 0x53, 0x4f, 0x73, 0x56, 0x16, - 0x26, 0x8a, 0x93, 0x1b, 0xfe, 0x50, 0xe1, 0x13, 0x25, 0x57, 0xf3, 0xf9, - 0xfc, 0x37, 0x68, 0x31, 0xb3, 0x38, 0x9e, 0xac, 0x94, 0x3b, 0x8e, 0xbf, - 0x8a, 0x67, 0x82, 0xa6, 0x88, 0x93, 0xe4, 0x7c, 0x55, 0xbc, 0xe8, 0x2f, - 0xd8, 0x11, 0x9e, 0x55, 0x44, 0x31, 0xda, 0xca, 0x99, 0x73, 0xf3, 0x7c, - 0x0f, 0x3b, 0xc6, 0xb3, 0x89, 0xb8, 0x52, 0xfb, 0xb8, 0xd9, 0xc2, 0x8e, - 0xf2, 0x2c, 0x22, 0x72, 0x26, 0x5f, 0xf3, 0x19, 0xb6, 0xbd, 0xcf, 0x53, - 0xd1, 0xa8, 0x88, 0x49, 0x92, 0x8c, 0xa4, 0xcc, 0x6e, 0x60, 0x0f, 0xa8, - 0x4a, 0x44, 0x47, 0x75, 0x01, 0x91, 0xe3, 0x4b, 0x27, 0xa6, 0xb0, 0x07, - 0x0c, 0x3c, 0xef, 0x98, 0x80, 0x24, 0xf3, 0x0e, 0xc5, 0xb4, 0xe7, 0xaa, - 0x8c, 0x88, 0x4a, 0x01, 0x59, 0xb1, 0x37, 0x85, 0x2c, 0xd0, 0xb9, 0x86, - 0x3d, 0xa1, 0x0a, 0x11, 0x35, 0x04, 0x84, 0x51, 0xe1, 0xf6, 0x3c, 0x49, - 0x86, 0x3d, 0x62, 0x93, 0x88, 0x8e, 0xeb, 0x5e, 0x08, 0xa7, 0x88, 0x2a, - 0xbd, 0xba, 0x09, 0x63, 0xd1, 0x64, 0x13, 0x16, 0x06, 0xec, 0x19, 0xeb, - 0x44, 0x24, 0x82, 0x51, 0x92, 0x3c, 0x28, 0xe7, 0xb9, 0x4a, 0x01, 0x51, - 0xb2, 0x79, 0x85, 0x79, 0x06, 0x7b, 0xc8, 0x5a, 0x11, 0x51, 0xed, 0x2c, - 0x51, 0xda, 0xc2, 0x62, 0x0a, 0xc3, 0xff, 0xf9, 0x4f, 0xc7, 0x5e, 0xaf, - 0xeb, 0x73, 0x33, 0xfe, 0xa6, 0x4a, 0x27, 0xaa, 0x7f, 0x14, 0xcd, 0x8f, - 0xc0, 0x18, 0x0c, 0x06, 0x83, 0xee, 0x14, 0x1a, 0x40, 0x94, 0x39, 0x4e, - 0xe6, 0xf9, 0x59, 0x46, 0xd8, 0xf7, 0x7a, 0xaf, 0x7e, 0x96, 0xa6, 0x03, - 0x35, 0x20, 0x9c, 0x0e, 0x5c, 0x90, 0x0b, 0xd4, 0xe9, 0x61, 0x95, 0x10, - 0x44, 0x49, 0xf2, 0xb1, 0xdf, 0xeb, 0xfd, 0x0d, 0x35, 0x23, 0x9c, 0x1d, - 0x5c, 0x61, 0xf2, 0xa7, 0xcc, 0xfb, 0x40, 0xc8, 0xd5, 0xbe, 0x65, 0x26, - 0xca, 0xda, 0xc7, 0x57, 0xbd, 0x85, 0x2a, 0x21, 0x78, 0x07, 0x2d, 0xa5, - 0x92, 0x3a, 0xb2, 0x4a, 0xe5, 0x23, 0x75, 0x6b, 0xa7, 0x4e, 0xb5, 0x34, - 0x61, 0xcf, 0xeb, 0x7e, 0x98, 0xcd, 0x92, 0x6f, 0x8e, 0x03, 0xc6, 0x26, - 0x9f, 0x68, 0x56, 0x69, 0xfa, 0xf0, 0x09, 0x5a, 0x8a, 0xce, 0x20, 0x42, - 0xf9, 0x63, 0xee, 0x54, 0x2b, 0x5b, 0x88, 0x6a, 0x23, 0x65, 0x9f, 0xb7, - 0xa6, 0x26, 0xfc, 0x72, 0xb0, 0x02, 0x1a, 0x62, 0x05, 0x34, 0xc4, 0x0a, - 0x68, 0x88, 0x15, 0xd0, 0x10, 0x2b, 0xa0, 0x21, 0x56, 0x40, 0x43, 0xac, - 0x80, 0x86, 0x58, 0x01, 0x0d, 0xb1, 0x02, 0x1a, 0x62, 0x05, 0x34, 0xc4, - 0x0a, 0x68, 0x88, 0x15, 0xd0, 0x10, 0x2b, 0xa0, 0x21, 0x56, 0x40, 0x43, - 0xac, 0x80, 0x86, 0x58, 0x01, 0x0d, 0xb1, 0x02, 0x1a, 0x52, 0xcb, 0x9a, - 0xc8, 0x26, 0x16, 0xeb, 0xae, 0xf1, 0xfc, 0x4f, 0x44, 0x18, 0xf1, 0x62, - 0xc2, 0x88, 0x57, 0xff, 0x9f, 0x96, 0x0d, 0xfd, 0x12, 0xb7, 0x09, 0x38, - 0x7d, 0x48, 0x80, 0x21, 0xff, 0xfa, 0xd7, 0x44, 0xd9, 0xe7, 0x5e, 0xaf, - 0x37, 0x6d, 0x3a, 0xfe, 0xfa, 0x89, 0x46, 0xd6, 0x44, 0x1a, 0x78, 0x2d, - 0x82, 0x05, 0xa5, 0x4f, 0x03, 0xcf, 0x3b, 0x05, 0x43, 0x5a, 0xb7, 0x26, - 0xc2, 0xe2, 0x1d, 0xa3, 0xe3, 0xfe, 0x57, 0xf3, 0x3b, 0x25, 0x43, 0x04, - 0x7c, 0xdf, 0x78, 0xe0, 0x38, 0xd4, 0x2c, 0xa0, 0x88, 0x50, 0x60, 0xf1, - 0x1a, 0x7c, 0xa7, 0xe4, 0x31, 0x34, 0x4d, 0x27, 0xaa, 0xaa, 0x2a, 0x6a, - 0xeb, 0x03, 0x45, 0x4d, 0xe0, 0x7e, 0xea, 0x6c, 0xe5, 0x0b, 0x82, 0x29, - 0xff, 0x7b, 0xd9, 0xe9, 0x38, 0x81, 0xeb, 0xba, 0x8b, 0x05, 0x73, 0xbd, - 0x68, 0x87, 0x65, 0x72, 0xa2, 0xd7, 0x77, 0x77, 0x77, 0xaf, 0xfa, 0xfd, - 0xfe, 0xeb, 0x2c, 0xa3, 0x71, 0x46, 0x24, 0xe2, 0x6f, 0xfc, 0x1f, 0x57, - 0xa0, 0x2f, 0x62, 0xba, 0xf9, 0x8f, 0x3f, 0xa0, 0x0d, 0xc8, 0xef, 0x86, - 0xe8, 0xfe, 0xba, 0x4d, 0xbd, 0x16, 0x21, 0xca, 0xb3, 0x2e, 0x5c, 0x97, - 0x7f, 0xc0, 0x31, 0x6c, 0x81, 0x7c, 0x1f, 0xd5, 0xf5, 0x3a, 0x4d, 0x58, - 0x1e, 0xdd, 0x7e, 0x01, 0x0d, 0x78, 0x84, 0x1d, 0xe7, 0x8f, 0x11, 0xe8, - 0x94, 0x6b, 0x4d, 0xe5, 0x11, 0x06, 0x62, 0xf4, 0x15, 0xa1, 0x69, 0x9c, - 0xc1, 0x34, 0x7f, 0xde, 0x75, 0x3b, 0xa5, 0xe3, 0x73, 0xd6, 0xf4, 0x9f, - 0x81, 0x2a, 0x4d, 0x2d, 0x7d, 0xa0, 0x08, 0x4c, 0x87, 0xe2, 0xd4, 0x24, - 0xf4, 0x3c, 0xef, 0x03, 0xd4, 0x08, 0xa5, 0x69, 0xe1, 0xfe, 0xcb, 0xa6, - 0x5d, 0x3b, 0xa5, 0x05, 0x14, 0xfd, 0x8f, 0xea, 0x9a, 0xd5, 0xc0, 0xf4, - 0xfa, 0x83, 0x83, 0xb8, 0x76, 0xcb, 0x79, 0xf8, 0x50, 0x12, 0xee, 0x93, - 0xe5, 0xee, 0x49, 0x39, 0xb7, 0x54, 0x0b, 0x28, 0xc5, 0x44, 0x73, 0x4d, - 0xd2, 0x68, 0xc2, 0xc5, 0xc0, 0x74, 0xc7, 0xc1, 0xda, 0x05, 0x5c, 0x4e, - 0xa4, 0x83, 0xfc, 0x39, 0x31, 0xe0, 0x40, 0x09, 0xd2, 0x14, 0x8b, 0x02, - 0x52, 0x05, 0x02, 0x22, 0x91, 0x54, 0x28, 0xf4, 0x95, 0x69, 0xa4, 0xb8, - 0x6a, 0xd2, 0x28, 0x48, 0x15, 0xc8, 0xd6, 0x88, 0x4e, 0x6b, 0x29, 0x52, - 0x78, 0xc3, 0x5e, 0x1c, 0x57, 0x20, 0xa0, 0x54, 0x28, 0x22, 0x39, 0x93, - 0x35, 0xc5, 0x90, 0x46, 0xea, 0xa6, 0x22, 0xfb, 0x49, 0x6a, 0x72, 0x7a, - 0xad, 0xe5, 0x07, 0xdc, 0x52, 0x0a, 0x35, 0x56, 0xe7, 0x95, 0x0e, 0xa5, - 0x80, 0x69, 0x4a, 0x5f, 0xf2, 0xc7, 0x6c, 0x7b, 0x8e, 0x60, 0x7f, 0x91, - 0x9e, 0x0d, 0xcd, 0x05, 0x74, 0x5d, 0x69, 0x00, 0x40, 0x1c, 0x43, 0x4b, - 0xd9, 0xa6, 0xbb, 0x29, 0x5c, 0x0f, 0x45, 0x73, 0x73, 0x3e, 0x8f, 0x94, - 0x13, 0x7c, 0xa5, 0x80, 0xec, 0xe9, 0x10, 0x02, 0xe6, 0x9b, 0xc6, 0x70, - 0xdb, 0x49, 0x6a, 0x9b, 0x11, 0xaf, 0xf4, 0x42, 0xc1, 0xe4, 0xa4, 0xe0, - 0xf0, 0xf0, 0xd0, 0xbc, 0x06, 0x2e, 0x2e, 0x42, 0x9c, 0xe4, 0x8f, 0xd1, - 0x75, 0x77, 0xee, 0x5d, 0x61, 0x15, 0xe8, 0x42, 0xe1, 0x99, 0xd8, 0x39, - 0x31, 0xd5, 0x49, 0xa7, 0x25, 0x60, 0x9a, 0x3e, 0xfc, 0x5b, 0x38, 0xc1, - 0x56, 0xc6, 0xfd, 0x7d, 0xd4, 0xda, 0xc8, 0xf9, 0xb2, 0xb0, 0x29, 0x78, - 0x2a, 0x7b, 0x8b, 0x78, 0x40, 0x99, 0xe8, 0xa4, 0xd5, 0x12, 0x70, 0x30, - 0x18, 0x4c, 0x65, 0x53, 0xc9, 0x71, 0x9d, 0xb3, 0x45, 0xc6, 0x3b, 0xce, - 0x7d, 0x14, 0xbd, 0x13, 0xae, 0xb0, 0xfc, 0x39, 0x76, 0x00, 0x4e, 0xba, - 0xdd, 0xee, 0x67, 0x9d, 0xf4, 0xda, 0x96, 0x08, 0x9b, 0x4a, 0x27, 0x20, - 0x4d, 0x13, 0x16, 0x3e, 0xb8, 0x64, 0x7e, 0xb5, 0xec, 0x3f, 0x76, 0x8a, - 0xc5, 0x36, 0x06, 0x5c, 0x76, 0x07, 0x1d, 0xd9, 0x63, 0x14, 0x66, 0x59, - 0xaa, 0x6d, 0x76, 0x6a, 0xbb, 0xb3, 0xc4, 0x16, 0x21, 0xec, 0xdf, 0x3b, - 0x59, 0xd9, 0xf6, 0x84, 0xab, 0x3e, 0x3a, 0x20, 0xf6, 0x54, 0x60, 0x71, - 0x71, 0x8a, 0xc2, 0xcd, 0x8e, 0x3c, 0x57, 0x2c, 0xf8, 0x31, 0xb2, 0x67, - 0xda, 0x63, 0x26, 0x1b, 0x3e, 0x6e, 0x49, 0x25, 0x2c, 0x0c, 0xf2, 0xc5, - 0x3c, 0x8f, 0x16, 0x53, 0x15, 0xd1, 0x5c, 0x79, 0xae, 0xba, 0xc6, 0xd7, - 0xc2, 0x4e, 0x8f, 0x93, 0x7e, 0x89, 0xed, 0x50, 0x5e, 0xe0, 0xc6, 0x3b, - 0x1b, 0x09, 0x85, 0x78, 0x3c, 0xf9, 0xbe, 0x2c, 0x93, 0xa8, 0xb4, 0x33, - 0x41, 0x64, 0x40, 0x59, 0xfa, 0x2b, 0x9b, 0x6b, 0x13, 0xd8, 0x17, 0xd8, - 0xc9, 0x2b, 0x9e, 0xa9, 0xac, 0x78, 0x02, 0xa3, 0x97, 0x66, 0xc4, 0xe6, - 0x13, 0x62, 0xe3, 0xb1, 0xa5, 0xef, 0xcf, 0x87, 0xdd, 0x22, 0x14, 0xd3, - 0x33, 0xae, 0x08, 0x97, 0xba, 0x03, 0xc6, 0x3a, 0x2a, 0xdc, 0xfe, 0xee, - 0x76, 0x24, 0xdc, 0xec, 0x6c, 0xfa, 0x8d, 0x08, 0xd8, 0xdc, 0x23, 0x1c, - 0x0a, 0xa7, 0x02, 0xc1, 0x56, 0x4b, 0x97, 0xa6, 0x84, 0x90, 0x1f, 0xf0, - 0x68, 0xb1, 0x14, 0x1a, 0x3c, 0xda, 0xf5, 0x78, 0x9d, 0x24, 0xd1, 0x17, - 0x9d, 0x49, 0xb2, 0xc5, 0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0xb2, - 0x89, 0xff, 0x01, 0xb5, 0x56, 0x6a, 0xf0, 0xc1, 0xda, 0x1a, 0x44, 0x00, - 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 -}; + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, + 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, + 0x08, 0x06, 0x00, 0x00, 0x00, 0x8e, 0x11, 0xf2, 0xad, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x2c, 0x4b, 0x00, 0x00, 0x2c, + 0x4b, 0x01, 0xa5, 0x3d, 0x96, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, + 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, + 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc, 0x61, 0x05, 0x00, + 0x00, 0x05, 0x40, 0x49, 0x44, 0x41, 0x54, 0x78, 0x01, 0xed, 0x9c, 0x8d, + 0x71, 0xdb, 0x36, 0x14, 0xc7, 0xdf, 0x23, 0x25, 0x51, 0x3a, 0xfb, 0xae, + 0xca, 0x04, 0xe1, 0x06, 0x51, 0x27, 0xa8, 0x3a, 0x41, 0xdc, 0x09, 0x6a, + 0x4f, 0xd0, 0x74, 0x82, 0x38, 0x13, 0x38, 0x99, 0xc0, 0xea, 0x04, 0x76, + 0x27, 0xb0, 0x32, 0x41, 0x9d, 0x09, 0xc2, 0x4c, 0x60, 0xe6, 0xce, 0xb6, + 0x48, 0xca, 0xe4, 0xeb, 0x83, 0x2c, 0x5f, 0x48, 0x48, 0x0a, 0x40, 0x81, + 0xa4, 0x29, 0x19, 0xbf, 0x3b, 0x25, 0x26, 0x45, 0x10, 0xe0, 0x5f, 0xf8, + 0x7a, 0x0f, 0x8f, 0x00, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0x62, 0xb1, + 0xbc, 0x44, 0x10, 0x2a, 0xe2, 0xf6, 0x36, 0x19, 0xb9, 0x2e, 0xf0, 0x07, + 0xdf, 0x10, 0xd1, 0x90, 0x10, 0x7d, 0x20, 0xf2, 0x73, 0x97, 0x0c, 0x97, + 0x9f, 0x26, 0x09, 0x11, 0x21, 0xe0, 0x87, 0xfc, 0xd8, 0xeb, 0xf5, 0xfe, + 0x81, 0x1a, 0x30, 0x12, 0x70, 0x36, 0x9b, 0x8f, 0x59, 0xb4, 0xb7, 0x19, + 0xd1, 0x31, 0x34, 0x2f, 0x4e, 0x49, 0x28, 0xa0, 0x2c, 0xfb, 0x7d, 0x30, + 0x18, 0x04, 0x50, 0x21, 0x5b, 0x09, 0x38, 0x9b, 0xcd, 0x7c, 0x74, 0x3b, + 0xe7, 0x5c, 0xc3, 0xc6, 0xb0, 0x53, 0x54, 0x2f, 0x62, 0x69, 0x01, 0xe3, + 0x38, 0x3e, 0x22, 0xc0, 0x73, 0x68, 0x7d, 0x8d, 0xdb, 0x44, 0xb5, 0x22, + 0x96, 0x12, 0x70, 0x29, 0xde, 0xc5, 0x86, 0xaf, 0x43, 0x2e, 0xdc, 0x14, + 0xc1, 0xb9, 0x46, 0xc4, 0x00, 0x91, 0x02, 0xbe, 0xfe, 0xfb, 0xc1, 0xc1, + 0xc1, 0xcd, 0xf2, 0xfb, 0xef, 0x7c, 0x3e, 0x84, 0x06, 0x59, 0xb4, 0x14, + 0xc7, 0x39, 0xe3, 0xc7, 0x3c, 0x2a, 0x7e, 0x53, 0x4f, 0x73, 0x56, 0x16, + 0x26, 0x8a, 0x93, 0x1b, 0xfe, 0x50, 0xe1, 0x13, 0x25, 0x57, 0xf3, 0xf9, + 0xfc, 0x37, 0x68, 0x31, 0xb3, 0x38, 0x9e, 0xac, 0x94, 0x3b, 0x8e, 0xbf, + 0x8a, 0x67, 0x82, 0xa6, 0x88, 0x93, 0xe4, 0x7c, 0x55, 0xbc, 0xe8, 0x2f, + 0xd8, 0x11, 0x9e, 0x55, 0x44, 0x31, 0xda, 0xca, 0x99, 0x73, 0xf3, 0x7c, + 0x0f, 0x3b, 0xc6, 0xb3, 0x89, 0xb8, 0x52, 0xfb, 0xb8, 0xd9, 0xc2, 0x8e, + 0xf2, 0x2c, 0x22, 0x72, 0x26, 0x5f, 0xf3, 0x19, 0xb6, 0xbd, 0xcf, 0x53, + 0xd1, 0xa8, 0x88, 0x49, 0x92, 0x8c, 0xa4, 0xcc, 0x6e, 0x60, 0x0f, 0xa8, + 0x4a, 0x44, 0x47, 0x75, 0x01, 0x91, 0xe3, 0x4b, 0x27, 0xa6, 0xb0, 0x07, + 0x0c, 0x3c, 0xef, 0x98, 0x80, 0x24, 0xf3, 0x0e, 0xc5, 0xb4, 0xe7, 0xaa, + 0x8c, 0x88, 0x4a, 0x01, 0x59, 0xb1, 0x37, 0x85, 0x2c, 0xd0, 0xb9, 0x86, + 0x3d, 0xa1, 0x0a, 0x11, 0x35, 0x04, 0x84, 0x51, 0xe1, 0xf6, 0x3c, 0x49, + 0x86, 0x3d, 0x62, 0x93, 0x88, 0x8e, 0xeb, 0x5e, 0x08, 0xa7, 0x88, 0x2a, + 0xbd, 0xba, 0x09, 0x63, 0xd1, 0x64, 0x13, 0x16, 0x06, 0xec, 0x19, 0xeb, + 0x44, 0x24, 0x82, 0x51, 0x92, 0x3c, 0x28, 0xe7, 0xb9, 0x4a, 0x01, 0x51, + 0xb2, 0x79, 0x85, 0x79, 0x06, 0x7b, 0xc8, 0x5a, 0x11, 0x51, 0xed, 0x2c, + 0x51, 0xda, 0xc2, 0x62, 0x0a, 0xc3, 0xff, 0xf9, 0x4f, 0xc7, 0x5e, 0xaf, + 0xeb, 0x73, 0x33, 0xfe, 0xa6, 0x4a, 0x27, 0xaa, 0x7f, 0x14, 0xcd, 0x8f, + 0xc0, 0x18, 0x0c, 0x06, 0x83, 0xee, 0x14, 0x1a, 0x40, 0x94, 0x39, 0x4e, + 0xe6, 0xf9, 0x59, 0x46, 0xd8, 0xf7, 0x7a, 0xaf, 0x7e, 0x96, 0xa6, 0x03, + 0x35, 0x20, 0x9c, 0x0e, 0x5c, 0x90, 0x0b, 0xd4, 0xe9, 0x61, 0x95, 0x10, + 0x44, 0x49, 0xf2, 0xb1, 0xdf, 0xeb, 0xfd, 0x0d, 0x35, 0x23, 0x9c, 0x1d, + 0x5c, 0x61, 0xf2, 0xa7, 0xcc, 0xfb, 0x40, 0xc8, 0xd5, 0xbe, 0x65, 0x26, + 0xca, 0xda, 0xc7, 0x57, 0xbd, 0x85, 0x2a, 0x21, 0x78, 0x07, 0x2d, 0xa5, + 0x92, 0x3a, 0xb2, 0x4a, 0xe5, 0x23, 0x75, 0x6b, 0xa7, 0x4e, 0xb5, 0x34, + 0x61, 0xcf, 0xeb, 0x7e, 0x98, 0xcd, 0x92, 0x6f, 0x8e, 0x03, 0xc6, 0x26, + 0x9f, 0x68, 0x56, 0x69, 0xfa, 0xf0, 0x09, 0x5a, 0x8a, 0xce, 0x20, 0x42, + 0xf9, 0x63, 0xee, 0x54, 0x2b, 0x5b, 0x88, 0x6a, 0x23, 0x65, 0x9f, 0xb7, + 0xa6, 0x26, 0xfc, 0x72, 0xb0, 0x02, 0x1a, 0x62, 0x05, 0x34, 0xc4, 0x0a, + 0x68, 0x88, 0x15, 0xd0, 0x10, 0x2b, 0xa0, 0x21, 0x56, 0x40, 0x43, 0xac, + 0x80, 0x86, 0x58, 0x01, 0x0d, 0xb1, 0x02, 0x1a, 0x62, 0x05, 0x34, 0xc4, + 0x0a, 0x68, 0x88, 0x15, 0xd0, 0x10, 0x2b, 0xa0, 0x21, 0x56, 0x40, 0x43, + 0xac, 0x80, 0x86, 0x58, 0x01, 0x0d, 0xb1, 0x02, 0x1a, 0x52, 0xcb, 0x9a, + 0xc8, 0x26, 0x16, 0xeb, 0xae, 0xf1, 0xfc, 0x4f, 0x44, 0x18, 0xf1, 0x62, + 0xc2, 0x88, 0x57, 0xff, 0x9f, 0x96, 0x0d, 0xfd, 0x12, 0xb7, 0x09, 0x38, + 0x7d, 0x48, 0x80, 0x21, 0xff, 0xfa, 0xd7, 0x44, 0xd9, 0xe7, 0x5e, 0xaf, + 0x37, 0x6d, 0x3a, 0xfe, 0xfa, 0x89, 0x46, 0xd6, 0x44, 0x1a, 0x78, 0x2d, + 0x82, 0x05, 0xa5, 0x4f, 0x03, 0xcf, 0x3b, 0x05, 0x43, 0x5a, 0xb7, 0x26, + 0xc2, 0xe2, 0x1d, 0xa3, 0xe3, 0xfe, 0x57, 0xf3, 0x3b, 0x25, 0x43, 0x04, + 0x7c, 0xdf, 0x78, 0xe0, 0x38, 0xd4, 0x2c, 0xa0, 0x88, 0x50, 0x60, 0xf1, + 0x1a, 0x7c, 0xa7, 0xe4, 0x31, 0x34, 0x4d, 0x27, 0xaa, 0xaa, 0x2a, 0x6a, + 0xeb, 0x03, 0x45, 0x4d, 0xe0, 0x7e, 0xea, 0x6c, 0xe5, 0x0b, 0x82, 0x29, + 0xff, 0x7b, 0xd9, 0xe9, 0x38, 0x81, 0xeb, 0xba, 0x8b, 0x05, 0x73, 0xbd, + 0x68, 0x87, 0x65, 0x72, 0xa2, 0xd7, 0x77, 0x77, 0x77, 0xaf, 0xfa, 0xfd, + 0xfe, 0xeb, 0x2c, 0xa3, 0x71, 0x46, 0x24, 0xe2, 0x6f, 0xfc, 0x1f, 0x57, + 0xa0, 0x2f, 0x62, 0xba, 0xf9, 0x8f, 0x3f, 0xa0, 0x0d, 0xc8, 0xef, 0x86, + 0xe8, 0xfe, 0xba, 0x4d, 0xbd, 0x16, 0x21, 0xca, 0xb3, 0x2e, 0x5c, 0x97, + 0x7f, 0xc0, 0x31, 0x6c, 0x81, 0x7c, 0x1f, 0xd5, 0xf5, 0x3a, 0x4d, 0x58, + 0x1e, 0xdd, 0x7e, 0x01, 0x0d, 0x78, 0x84, 0x1d, 0xe7, 0x8f, 0x11, 0xe8, + 0x94, 0x6b, 0x4d, 0xe5, 0x11, 0x06, 0x62, 0xf4, 0x15, 0xa1, 0x69, 0x9c, + 0xc1, 0x34, 0x7f, 0xde, 0x75, 0x3b, 0xa5, 0xe3, 0x73, 0xd6, 0xf4, 0x9f, + 0x81, 0x2a, 0x4d, 0x2d, 0x7d, 0xa0, 0x08, 0x4c, 0x87, 0xe2, 0xd4, 0x24, + 0xf4, 0x3c, 0xef, 0x03, 0xd4, 0x08, 0xa5, 0x69, 0xe1, 0xfe, 0xcb, 0xa6, + 0x5d, 0x3b, 0xa5, 0x05, 0x14, 0xfd, 0x8f, 0xea, 0x9a, 0xd5, 0xc0, 0xf4, + 0xfa, 0x83, 0x83, 0xb8, 0x76, 0xcb, 0x79, 0xf8, 0x50, 0x12, 0xee, 0x93, + 0xe5, 0xee, 0x49, 0x39, 0xb7, 0x54, 0x0b, 0x28, 0xc5, 0x44, 0x73, 0x4d, + 0xd2, 0x68, 0xc2, 0xc5, 0xc0, 0x74, 0xc7, 0xc1, 0xda, 0x05, 0x5c, 0x4e, + 0xa4, 0x83, 0xfc, 0x39, 0x31, 0xe0, 0x40, 0x09, 0xd2, 0x14, 0x8b, 0x02, + 0x52, 0x05, 0x02, 0x22, 0x91, 0x54, 0x28, 0xf4, 0x95, 0x69, 0xa4, 0xb8, + 0x6a, 0xd2, 0x28, 0x48, 0x15, 0xc8, 0xd6, 0x88, 0x4e, 0x6b, 0x29, 0x52, + 0x78, 0xc3, 0x5e, 0x1c, 0x57, 0x20, 0xa0, 0x54, 0x28, 0x22, 0x39, 0x93, + 0x35, 0xc5, 0x90, 0x46, 0xea, 0xa6, 0x22, 0xfb, 0x49, 0x6a, 0x72, 0x7a, + 0xad, 0xe5, 0x07, 0xdc, 0x52, 0x0a, 0x35, 0x56, 0xe7, 0x95, 0x0e, 0xa5, + 0x80, 0x69, 0x4a, 0x5f, 0xf2, 0xc7, 0x6c, 0x7b, 0x8e, 0x60, 0x7f, 0x91, + 0x9e, 0x0d, 0xcd, 0x05, 0x74, 0x5d, 0x69, 0x00, 0x40, 0x1c, 0x43, 0x4b, + 0xd9, 0xa6, 0xbb, 0x29, 0x5c, 0x0f, 0x45, 0x73, 0x73, 0x3e, 0x8f, 0x94, + 0x13, 0x7c, 0xa5, 0x80, 0xec, 0xe9, 0x10, 0x02, 0xe6, 0x9b, 0xc6, 0x70, + 0xdb, 0x49, 0x6a, 0x9b, 0x11, 0xaf, 0xf4, 0x42, 0xc1, 0xe4, 0xa4, 0xe0, + 0xf0, 0xf0, 0xd0, 0xbc, 0x06, 0x2e, 0x2e, 0x42, 0x9c, 0xe4, 0x8f, 0xd1, + 0x75, 0x77, 0xee, 0x5d, 0x61, 0x15, 0xe8, 0x42, 0xe1, 0x99, 0xd8, 0x39, + 0x31, 0xd5, 0x49, 0xa7, 0x25, 0x60, 0x9a, 0x3e, 0xfc, 0x5b, 0x38, 0xc1, + 0x56, 0xc6, 0xfd, 0x7d, 0xd4, 0xda, 0xc8, 0xf9, 0xb2, 0xb0, 0x29, 0x78, + 0x2a, 0x7b, 0x8b, 0x78, 0x40, 0x99, 0xe8, 0xa4, 0xd5, 0x12, 0x70, 0x30, + 0x18, 0x4c, 0x65, 0x53, 0xc9, 0x71, 0x9d, 0xb3, 0x45, 0xc6, 0x3b, 0xce, + 0x7d, 0x14, 0xbd, 0x13, 0xae, 0xb0, 0xfc, 0x39, 0x76, 0x00, 0x4e, 0xba, + 0xdd, 0xee, 0x67, 0x9d, 0xf4, 0xda, 0x96, 0x08, 0x9b, 0x4a, 0x27, 0x20, + 0x4d, 0x13, 0x16, 0x3e, 0xb8, 0x64, 0x7e, 0xb5, 0xec, 0x3f, 0x76, 0x8a, + 0xc5, 0x36, 0x06, 0x5c, 0x76, 0x07, 0x1d, 0xd9, 0x63, 0x14, 0x66, 0x59, + 0xaa, 0x6d, 0x76, 0x6a, 0xbb, 0xb3, 0xc4, 0x16, 0x21, 0xec, 0xdf, 0x3b, + 0x59, 0xd9, 0xf6, 0x84, 0xab, 0x3e, 0x3a, 0x20, 0xf6, 0x54, 0x60, 0x71, + 0x71, 0x8a, 0xc2, 0xcd, 0x8e, 0x3c, 0x57, 0x2c, 0xf8, 0x31, 0xb2, 0x67, + 0xda, 0x63, 0x26, 0x1b, 0x3e, 0x6e, 0x49, 0x25, 0x2c, 0x0c, 0xf2, 0xc5, + 0x3c, 0x8f, 0x16, 0x53, 0x15, 0xd1, 0x5c, 0x79, 0xae, 0xba, 0xc6, 0xd7, + 0xc2, 0x4e, 0x8f, 0x93, 0x7e, 0x89, 0xed, 0x50, 0x5e, 0xe0, 0xc6, 0x3b, + 0x1b, 0x09, 0x85, 0x78, 0x3c, 0xf9, 0xbe, 0x2c, 0x93, 0xa8, 0xb4, 0x33, + 0x41, 0x64, 0x40, 0x59, 0xfa, 0x2b, 0x9b, 0x6b, 0x13, 0xd8, 0x17, 0xd8, + 0xc9, 0x2b, 0x9e, 0xa9, 0xac, 0x78, 0x02, 0xa3, 0x97, 0x66, 0xc4, 0xe6, + 0x13, 0x62, 0xe3, 0xb1, 0xa5, 0xef, 0xcf, 0x87, 0xdd, 0x22, 0x14, 0xd3, + 0x33, 0xae, 0x08, 0x97, 0xba, 0x03, 0xc6, 0x3a, 0x2a, 0xdc, 0xfe, 0xee, + 0x76, 0x24, 0xdc, 0xec, 0x6c, 0xfa, 0x8d, 0x08, 0xd8, 0xdc, 0x23, 0x1c, + 0x0a, 0xa7, 0x02, 0xc1, 0x56, 0x4b, 0x97, 0xa6, 0x84, 0x90, 0x1f, 0xf0, + 0x68, 0xb1, 0x14, 0x1a, 0x3c, 0xda, 0xf5, 0x78, 0x9d, 0x24, 0xd1, 0x17, + 0x9d, 0x49, 0xb2, 0xc5, 0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0xb2, + 0x89, 0xff, 0x01, 0xb5, 0x56, 0x6a, 0xf0, 0xc1, 0xda, 0x1a, 0x44, 0x00, + 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; -inline constexpr size_t PauseButton_png_len = sizeof(PauseButton_png) /sizeof(PauseButton_png[0]); -inline constexpr size_t PlayButton_png_len = sizeof(PlayButton_png) /sizeof(PlayButton_png[0]); -inline constexpr size_t ResetButton_png_len = sizeof(ResetButton_png) /sizeof(ResetButton_png[0]); -inline constexpr size_t SaveButton_png_len = sizeof(SaveButton_png) /sizeof(SaveButton_png[0]); +inline constexpr size_t PauseButton_png_len = + sizeof(PauseButton_png) / sizeof(PauseButton_png[0]); +inline constexpr size_t PlayButton_png_len = + sizeof(PlayButton_png) / sizeof(PlayButton_png[0]); +inline constexpr size_t ResetButton_png_len = + sizeof(ResetButton_png) / sizeof(ResetButton_png[0]); +inline constexpr size_t SaveButton_png_len = + sizeof(SaveButton_png) / sizeof(SaveButton_png[0]); inline constexpr size_t AutoInternLogo_png_len = sizeof(AutoInternLogo_png) / sizeof(AutoInternLogo_png[0]); inline constexpr size_t SearchDevices_png_len = sizeof(SearchDevices_png) / sizeof(SearchDevices_png[0]); +inline constexpr size_t Load_file_png_len = + sizeof(Load_file_png) / sizeof(Load_file_png[0]); inline constexpr size_t Diagnostics_png_len = sizeof(Diagnostics_png) / sizeof(Diagnostics_png[0]); inline constexpr size_t Settings_png_len = diff --git a/src/languages.hpp b/src/languages.hpp index c3c11e68..b4692eda 100644 --- a/src/languages.hpp +++ b/src/languages.hpp @@ -80,7 +80,10 @@ enum class Key { FontSize, SettingsText, Saving, - Load_file_Data + Load_file_data, + Load_file, + Load_another_file, + Path }; inline const std::map englishLan{ @@ -159,7 +162,10 @@ inline const std::map englishLan{ {Key::FontSize, "Fontsize"}, {Key::SettingsText, "Set your personal settings for the software"}, {Key::Saving, "saving ..."}, - {Key::Load_file_Data, "Load file data"}}; + {Key::Load_file, "Load file"}, + {Key::Load_file_data, "Load file data"}, + {Key::Load_another_file, "Load another file"}, + {Key::Path, "Path"}}; inline const std::map germanLan{ @@ -239,7 +245,10 @@ inline const std::map germanLan{ {Key::FontSize, "Schriftgröße"}, {Key::SettingsText, "Legen sie hier ihre persönlichen Einstellungen fest"}, {Key::Saving, "speichern ..."}, - {Key::Load_file_Data, "Alte Daten laden"}}; + {Key::Load_file, "Datei laden"}, + {Key::Load_file_data, "Alte Daten laden"}, + {Key::Load_another_file, "Eine andere Datei laden"}, + {Key::Path, "Pfad"}}; inline auto appLanguage = englishLan; namespace fs = std::filesystem; diff --git a/src/main.cpp b/src/main.cpp index 3b115c3a..45b30d78 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,10 +16,10 @@ int main() { std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); std::tm now_tm = *std::gmtime(&now_time_t); static bool flagPaused{true}; - bool Development{false}, flagInitState{true}, - loadedFileChkBx{false}, open_generate_training_data{false}, - open_settings{false}; - dvcPair loadedDvc; + bool Development{false}, flagInitState{true}, + open_generate_training_data{false}, open_settings{false}; + auto loadedDvcs = captureData; + std::map Dvcs_filenames; // main loop auto render = [&]() { @@ -31,8 +31,6 @@ int main() { ImGui::SetNextWindowPos({0.f, 0.f}); auto windowSize{ImGui::GetIO().DisplaySize}; ImGui::SetNextWindowSize(windowSize); - const ImVec2 toolBtnSize{windowSize.x * .1f, - windowSize.y * .1f}; // toolbar buttons size ImGui::Begin("OmniScopev2 Data Capture Tool", nullptr, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoTitleBar); @@ -48,10 +46,9 @@ int main() { ImGui::BeginChild("Left Side", {windowSize.x * .18f, 0.f}); - // ############################################# Side Menu - static fs::path loadedFileName; + // ############################################# Side Menu set_side_menu(config, open_settings, open_generate_training_data, - loadedFileName, loadedDvc); + loadedDvcs, Dvcs_filenames); // there're four "BeginChild"s, one as the left side // and three on the right side ImGui::EndChild(); // end child "Left Side" @@ -60,9 +57,9 @@ int main() { if (sampler.has_value() && !flagPaused) sampler->copyOut(captureData); - // ######################################### Toolbar - set_toolbar(config, language, flagPaused, loadedDvc); - + // ######################################### Toolbar + set_toolbar(config, language, flagPaused, loadedDvcs); + // ############################ Settings Menu static int title = 0; static std::vector titles(2); // two languages @@ -115,28 +112,35 @@ int main() { // ############################ Devicelist SetDeviceMenuStyle(); - ImGui::Dummy({0.f, windowSize.y * .01f}); + ImGui::Dummy({0.f, windowSize.y * .01f}); ImGui::BeginChild("Devicelist"); ImGui::Dummy({windowSize.x * .36f, 0.f}); ImGui::SameLine(); ImGui::Text(appLanguage[Key::Devices_found]); devicesList(); - if (loadedDvc.second.size()) { // if device was successfully loaded from file - if (ImGui::Checkbox("##", &loadedFileChkBx)) - if (loadedFileChkBx) - captureData[loadedDvc.first] = loadedDvc.second; - else - fmt::println("{} device erased from list.", - captureData.erase(loadedDvc.first)); - ImGui::SameLine(); - ImGui::TextUnformatted(loadedFileName.filename().string().c_str()); - ImGui::SameLine(); - if (ImGui::Button(appLanguage[Key::Reset])) { - captureData.erase(loadedDvc.first); - loadedDvc = {}; - loadedFileChkBx = false; - } - } + static std::map loadedFilesChkBxs; + if (!loadedDvcs.empty()) { // if devices were successfully loaded from file + for (auto it = loadedDvcs.begin(); it != loadedDvcs.end();) { + ImGui::PushID(&it->first); // make unique IDs + if (ImGui::Checkbox("##", &loadedFilesChkBxs[it->first].b)) + if (loadedFilesChkBxs[it->first].b) { // if checked + if (!captureData.contains(it->first)) + captureData.emplace(it->first, it->second); + } else + captureData.erase(it->first); + ImGui::SameLine(); + ImGui::TextUnformatted(Dvcs_filenames[it->first].c_str()); + ImGui::SameLine(); + if (ImGui::Button(appLanguage[Key::Reset])) { + captureData.erase(it->first); + Dvcs_filenames.erase(it->first); + loadedFilesChkBxs[it->first].b = false; + it = loadedDvcs.erase(it); + } else + it++; + ImGui::PopID(); + } // end of for-loop + } ImGui::EndChild(); // end child "Devicelist" ImGui::EndChild(); // end child "Right Side" ImGui::End(); diff --git a/src/style.cpp b/src/style.cpp index 0236c18d..171df3c5 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -244,25 +244,26 @@ bool LoadTextureFromHeader(unsigned char const *png_data, int png_data_len, } void set_side_menu(const nlohmann::json &config, bool &open_settings, - bool &open_generate_training_data, fs::path &loadedFileName, - dvcPair &loadedDvc) { + bool &open_generate_training_data, + decltype(captureData) &loadedDvcs, + std::map &Dvcs_filenames) { auto windowSize{ImGui::GetIO().DisplaySize}; // Initializing all variables for images - static constexpr size_t size{5}; // number of pictures + static constexpr size_t size{6}; // number of pictures size_t PngRenderedCnt{}; - static bool loaded_png[size]{}; + static bool loaded_png[size]; static int image_height[size]; static int image_width[size]; static GLuint image_texture[size]; // The order matters because of the counter for the images !!! static const unsigned char *imagesNames[] = { - AutoInternLogo_png, RefreshIcon_png, DiagnosticIcon_png, SettingIcon_png, - HelpIcon_png}; + AutoInternLogo_png, RefreshIcon_png, Load_file_png, + DiagnosticIcon_png, SettingIcon_png, HelpIcon_png}; static const unsigned int imagesLen[] = { - AutoInternLogo_png_len, RefreshIcon_png_len, DiagnosticIcon_png_len, - SettingIcon_png_len, HelpIcon_png_len}; + AutoInternLogo_png_len, RefreshIcon_png_len, Load_file_png_len, + DiagnosticIcon_png_len, SettingIcon_png_len, HelpIcon_png_len}; // Load the images for the SideBarMenu for (size_t i = 0; i < size; i++) if (!loaded_png[i]) { @@ -273,8 +274,8 @@ void set_side_menu(const nlohmann::json &config, bool &open_settings, fmt::println("Error Loading Png #{}.", i); } - float scaleWidth = ImGui::GetIO().DisplaySize.x * 0.0005f; - float scaleHeight = ImGui::GetIO().DisplaySize.y * 0.0008f; + float scaleWidth = windowSize.x * 0.0005f; + float scaleHeight = windowSize.y * 0.0008f; // Begin the SideBarMenu if (loaded_png[PngRenderedCnt]) { // render AIGroupLogo ImGui::Image((void *)(intptr_t)image_texture[PngRenderedCnt], @@ -294,16 +295,17 @@ void set_side_menu(const nlohmann::json &config, bool &open_settings, initDevices(); } - static ImGui::FileBrowser fileBrowser; - if (ImGui::Button(appLanguage[Key::Load_file_Data])) - fileBrowser.Open(); - fileBrowser.Display(); - if (fileBrowser.HasSelected()) { - loadedFileName = fileBrowser.GetSelected(); - load_file(loadedFileName, loadedDvc); - fileBrowser.ClearSelected(); + static bool loadFile; + if (loaded_png[++PngRenderedCnt] && // load old files data + ImGui::ImageButtonWithText( + (void *)(intptr_t)image_texture[PngRenderedCnt], + appLanguage[Key::Load_file_data])) { + loadFile = true; + ImGui::OpenPopup(appLanguage[Key::Load_file_data]); } - + if (loadFile) + load_files(loadedDvcs, Dvcs_filenames, loadFile); + static bool showDiag = false; const bool showDiagPrev = showDiag; if (loaded_png[++PngRenderedCnt] && // render Diagnostics @@ -342,16 +344,17 @@ void set_side_menu(const nlohmann::json &config, bool &open_settings, system(("start " + load_json(config, "helplink")).c_str()); showSettings = false; } - ImGui::SetCursorPosY(ImGui::GetIO().DisplaySize.y * 0.9f); + ImGui::SetCursorPosY(windowSize.y * 0.9f); ImGui::Text(fmt::format("{}: {}", appLanguage[Key::Version], CMakeGitVersion::VersionWithGit) .c_str()); } -void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, bool &flagPaused, dvcPair &loadedDvc){ +void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, + bool &flagPaused, const decltype(captureData) &loadedDvcs) { // variable declaration - static auto now = std::chrono::system_clock::now(); + static auto now = std::chrono::system_clock::now(); static std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); static std::tm now_tm = *std::gmtime(&now_time_t); auto windowSize{ImGui::GetIO().DisplaySize}; @@ -359,199 +362,161 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, b // begin Toolbar ############################################ ImGui::BeginChild("Buttonstripe", {-1.f, windowSize.y * .1f}, false, - ImGuiWindowFlags_NoScrollbar); - // ############################ Popup Save - if (ImGui::BeginPopupModal(appLanguage[Key::Save_Recorded_Data], nullptr, - ImGuiWindowFlags_AlwaysAutoResize)) { - ImGui::SetItemDefaultFocus(); - saves_popup(config, language, now, now_time_t, now_tm, flagDataNotSaved); - ImGui::EndPopup(); - } - // ############################ Popup Reset - if (ImGui::BeginPopupModal(appLanguage[Key::Reset_q], nullptr, - ImGuiWindowFlags_AlwaysAutoResize)) { - ImGui::SetItemDefaultFocus(); - ImGui::Text(appLanguage[Key::Measure_not_saved]); - if (ImGui::Button(appLanguage[Key::Continue_del])) { - rstSettings(loadedDvc); - ImGui::CloseCurrentPopup(); - } - ImGui::SameLine(); - if (ImGui::Button(appLanguage[Key::Back])) - ImGui::CloseCurrentPopup(); - ImGui::EndPopup(); + ImGuiWindowFlags_NoScrollbar); + // ############################ Popup Save + if (ImGui::BeginPopupModal(appLanguage[Key::Save_Recorded_Data], nullptr, + ImGuiWindowFlags_AlwaysAutoResize)) { + ImGui::SetItemDefaultFocus(); + saves_popup(config, language, now, now_time_t, now_tm, flagDataNotSaved); + ImGui::EndPopup(); + } + // ############################ Popup Reset + if (ImGui::BeginPopupModal(appLanguage[Key::Reset_q], nullptr, + ImGuiWindowFlags_AlwaysAutoResize)) { + ImGui::SetItemDefaultFocus(); + ImGui::Text(appLanguage[Key::Measure_not_saved]); + if (ImGui::Button(appLanguage[Key::Continue_del])) { + rstSettings(loadedDvcs); + ImGui::CloseCurrentPopup(); } + ImGui::SameLine(); + if (ImGui::Button(appLanguage[Key::Back])) + ImGui::CloseCurrentPopup(); + ImGui::EndPopup(); + } - // Initializing all variables for images in the toolbar - static constexpr size_t size{4}; // number of pictures - int PngRenderedCnt = 0; - static bool loaded_png[size]{}; - static int image_height[size]; - static int image_width[size]; - static GLuint image_texture[size]; - float iconsSacle = 0.8f; - - // The order matters because of the counter for the images !!! - static const unsigned char *imagesNames[] = { - PlayButton_png, PauseButton_png, SaveButton_png, ResetButton_png}; - static const unsigned int imagesLen[] = { - PlayButton_png_len, PauseButton_png_len, SaveButton_png_len, - ResetButton_png_len}; - // Load the images for the SideBarMenu - for (int i = 0; i < size; i++) - if (!loaded_png[i]) { - if (LoadTextureFromHeader(imagesNames[i], imagesLen[i], - &image_texture[i], &image_width[i], - &image_height[i])) - loaded_png[i] = true; - else - fmt::println("Error Loading Png #{}.", i); - } + // Initializing all variables for images in the toolbar + static constexpr size_t size{4}; // number of pictures + int PngRenderedCnt = 0; + static bool loaded_png[size]{}; + static int image_height[size]; + static int image_width[size]; + static GLuint image_texture[size]; + float iconsSacle = 0.8f; - // ImGui::SetCursorPosY(windowSize.y * 0.05f); - - if (flagPaused) { - // ######################## Buttonstripe - if (!devices.empty()) - if (!sampler.has_value()) { - PngRenderedCnt = 0; - set_button_style_to(config, "start"); // Start Button - if (ImGui::ImageButton( - appLanguage[Key::Start], - (void *)(intptr_t)image_texture[PngRenderedCnt], - ImVec2(image_width[PngRenderedCnt] * iconsSacle, - image_height[PngRenderedCnt] * iconsSacle))) { - sampler.emplace(deviceManager, std::move(devices)); - flagPaused = false; - flagDataNotSaved = true; - } - ImGui::PopStyleColor(3); - } - // set_button_style_to(config, "standart"); - } else { - // ############################ Stop Button - PngRenderedCnt = 1; - set_button_style_to(config, "stop"); - if (ImGui::ImageButton( - appLanguage[Key::Stop], - (void *)(intptr_t)image_texture[PngRenderedCnt], - ImVec2(image_width[PngRenderedCnt] * iconsSacle, - image_height[PngRenderedCnt] * iconsSacle))) { - flagPaused = true; - for (auto &device : sampler->sampleDevices) { - device.first->send(Omniscope::Stop{}); - } - } - ImGui::PopStyleColor(3); + // The order matters because of the counter for the images !!! + static const unsigned char *imagesNames[] = {PlayButton_png, PauseButton_png, + SaveButton_png, ResetButton_png}; + static const unsigned int imagesLen[] = { + PlayButton_png_len, PauseButton_png_len, SaveButton_png_len, + ResetButton_png_len}; + // Load the images for the SideBarMenu + for (int i = 0; i < size; i++) + if (!loaded_png[i]) { + if (LoadTextureFromHeader(imagesNames[i], imagesLen[i], &image_texture[i], + &image_width[i], &image_height[i])) + loaded_png[i] = true; + else + fmt::println("Error Loading Png #{}.", i); } - if (flagPaused) { - // Start/reset the measurement when the measurement is paused, - // followed by a query as to whether the old data should be saved - if (sampler.has_value()) { - ImGui::SameLine(); + + // ImGui::SetCursorPosY(windowSize.y * 0.05f); + + if (flagPaused) { + // ######################## Buttonstripe + if (!devices.empty()) + if (!sampler.has_value()) { PngRenderedCnt = 0; - set_button_style_to(config, "start"); + set_button_style_to(config, "start"); // Start Button if (ImGui::ImageButton( - appLanguage[Key::Continue], + appLanguage[Key::Start], (void *)(intptr_t)image_texture[PngRenderedCnt], ImVec2(image_width[PngRenderedCnt] * iconsSacle, image_height[PngRenderedCnt] * iconsSacle))) { + sampler.emplace(deviceManager, std::move(devices)); flagPaused = false; flagDataNotSaved = true; - for (auto &device : sampler->sampleDevices) { - device.first->send(Omniscope::Start{}); - } } ImGui::PopStyleColor(3); - ImGui::SameLine(); - PngRenderedCnt = 3; - - set_button_style_to(config, "stop"); - if (ImGui::ImageButton( - appLanguage[Key::Reset], - (void *)(intptr_t)image_texture[PngRenderedCnt], - ImVec2(image_width[PngRenderedCnt] * iconsSacle, - image_height[PngRenderedCnt] * iconsSacle))) { - if (flagDataNotSaved) { - ImGui::OpenPopup(appLanguage[Key::Reset_q]); - } else { - rstSettings(loadedDvc); - flagPaused = true; - } + } + // set_button_style_to(config, "standart"); + } else { + // ############################ Stop Button + PngRenderedCnt = 1; + set_button_style_to(config, "stop"); + if (ImGui::ImageButton(appLanguage[Key::Stop], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { + flagPaused = true; + for (auto &device : sampler->sampleDevices) { + device.first->send(Omniscope::Stop{}); + } + } + ImGui::PopStyleColor(3); + } + if (flagPaused) { + // Start/reset the measurement when the measurement is paused, + // followed by a query as to whether the old data should be saved + if (sampler.has_value()) { + ImGui::SameLine(); + PngRenderedCnt = 0; + set_button_style_to(config, "start"); + if (ImGui::ImageButton( + appLanguage[Key::Continue], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { + flagPaused = false; + flagDataNotSaved = true; + for (auto &device : sampler->sampleDevices) { + device.first->send(Omniscope::Start{}); } - ImGui::PopStyleColor(3); } + ImGui::PopStyleColor(3); ImGui::SameLine(); + PngRenderedCnt = 3; - // gray out "Save" button when pop-up is open - const bool pushStyle = - ImGui::IsPopupOpen(appLanguage[Key::Save_Recorded_Data]); - - if (pushStyle) - ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); - PngRenderedCnt = 2; + set_button_style_to(config, "stop"); if (ImGui::ImageButton( - appLanguage[Key::Save], + appLanguage[Key::Reset], (void *)(intptr_t)image_texture[PngRenderedCnt], ImVec2(image_width[PngRenderedCnt] * iconsSacle, image_height[PngRenderedCnt] * iconsSacle))) { - if (sampler.has_value()) - ImGui::OpenPopup(appLanguage[Key::Save_Recorded_Data]); - else - ImGui::OpenPopup(appLanguage[Key::Save_warning], - ImGuiPopupFlags_NoOpenOverExistingPopup); + if (flagDataNotSaved) { + ImGui::OpenPopup(appLanguage[Key::Reset_q]); + } else { + rstSettings(loadedDvcs); + flagPaused = true; + } } - info_popup(appLanguage[Key::Save_warning], - appLanguage[Key::No_dvc_available]); - - if (pushStyle) - ImGui::PopStyleColor(); - } else { - ImGui::SameLine(); - ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); - PngRenderedCnt = 2; - ImGui::ImageButton(appLanguage[Key::Save], - (void *)(intptr_t)image_texture[PngRenderedCnt], - ImVec2(image_width[PngRenderedCnt] * iconsSacle, - image_height[PngRenderedCnt] * iconsSacle)); - ImGui::PopStyleColor(); + ImGui::PopStyleColor(3); } - ImGui::EndChild(); // end child "Buttonstripe" -} + ImGui::SameLine(); + // gray out "Save" button when pop-up is open + const bool pushStyle = + ImGui::IsPopupOpen(appLanguage[Key::Save_Recorded_Data]); -void load_file(fs::path &loadedFileName, - dvcPair &loadedDvc) { // load and display data from file - std::ifstream readfile(loadedFileName, std::ios::binary); - if (!readfile.is_open()) - fmt::println("Failed to open file {}", loadedFileName); - else { - std::string first_line; - std::getline(readfile, first_line); - std::istringstream input{first_line}; - constexpr size_t fieldsSz{6}; - // extract input fields data from the first line - for (size_t i = 0; i < fieldsSz; i++) { - std::string substr; - std::getline(input, substr, ','); - if (i == 3) // fourth element (Type of scope) - loadedDvc.first.type = substr; - if (i == 4) // fifth element (serial of scope) - loadedDvc.first.serial = substr; - } - size_t indx{2}; // y_values start from line 2 of the file - while (!readfile.eof()) { // fill the vector of the values - double value{}; - readfile >> value; - loadedDvc.second.emplace_back(indx++, value); - static constexpr size_t bigNumber{10'000'000}; - readfile.ignore(bigNumber, - '\n'); // new line separator between elements + if (pushStyle) + ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); + PngRenderedCnt = 2; + if (ImGui::ImageButton(appLanguage[Key::Save], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle))) { + if (sampler.has_value()) + ImGui::OpenPopup(appLanguage[Key::Save_Recorded_Data]); + else + ImGui::OpenPopup(appLanguage[Key::Save_warning], + ImGuiPopupFlags_NoOpenOverExistingPopup); } - readfile.close(); - // pop the extra last element - loadedDvc.second.pop_back(); + info_popup(appLanguage[Key::Save_warning], + appLanguage[Key::No_dvc_available]); + + if (pushStyle) + ImGui::PopStyleColor(); + } else { + ImGui::SameLine(); + ImGui::PushStyleColor(ImGuiCol_Text, inctColStyle); + PngRenderedCnt = 2; + ImGui::ImageButton(appLanguage[Key::Save], + (void *)(intptr_t)image_texture[PngRenderedCnt], + ImVec2(image_width[PngRenderedCnt] * iconsSacle, + image_height[PngRenderedCnt] * iconsSacle)); + ImGui::PopStyleColor(); } + ImGui::EndChild(); // end child "Buttonstripe" } void PopupStyleEditor() { // For Development diff --git a/src/style.hpp b/src/style.hpp index 39ded899..8c6375c2 100644 --- a/src/style.hpp +++ b/src/style.hpp @@ -16,10 +16,11 @@ inline constexpr ImVec4 normColStyle{0.1f, 0.1f, 0.1f, 1.f}; void SetupImGuiStyle(bool, float); void set_button_style_to(const nlohmann::json &, const std::string &); bool LoadTextureFromHeader(unsigned char const *, int, GLuint *, int *, int *); -void set_side_menu(const nlohmann::json &, bool &, bool &, fs::path &, - dvcPair &); -void set_toolbar(const nlohmann::json &, const nlohmann::json &, bool &, dvcPair &); -void load_file(fs::path &loadedFileName, dvcPair&); +void set_side_menu(const nlohmann::json &, bool &, bool &, + decltype(captureData) &, + std::map &); +void set_toolbar(const nlohmann::json &, const nlohmann::json &, bool &, + const decltype(captureData) &); void PopupStyleEditor(); void PushPlotRegionColors(); void PopPlotRegionColors(); From f6d21d8d0e64f8b50d07fb7672586535cb6876a5 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Fri, 7 Jun 2024 13:28:19 +0330 Subject: [PATCH 43/47] little cleanup --- src/handler.cpp | 7 +++---- src/handler.hpp | 6 ++---- src/main.cpp | 2 -- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/handler.cpp b/src/handler.cpp index 0a68b877..e835b521 100644 --- a/src/handler.cpp +++ b/src/handler.cpp @@ -137,7 +137,7 @@ void load_files(decltype(captureData) &loadedDvcs, std::map &Dvcs_filenames, bool& loadFile) { static std::set loadedFileNames; auto do_load = [&loadedDvcs, &Dvcs_filenames] { - pairDvc loadedDvc{}; + std::pair>> loadedDvc; for (const auto &path : loadedFileNames) { std::ifstream readfile(path, std::ios::binary); if (!readfile.is_open()) @@ -166,8 +166,7 @@ void load_files(decltype(captureData) &loadedDvcs, '\n'); // new line separator between elements } readfile.close(); - // pop the extra last element - loadedDvc.second.pop_back(); + loadedDvc.second.pop_back(); // pop the extra last element loadedDvcs.emplace(loadedDvc); Dvcs_filenames.emplace(loadedDvc.first, path.filename().string()); } @@ -180,7 +179,7 @@ void load_files(decltype(captureData) &loadedDvcs, static ImGui::FileBrowser fileBrowser; static std::vector pathArr{""}; for (auto& path : pathArr) { - ImGui::PushID(&path); + ImGui::PushID(&path); // unique IDs ImGui::InputTextWithHint("##", appLanguage[Key::Path], &path); ImGui::SameLine(); if (ImGui::Button(appLanguage[Key::Browse])) diff --git a/src/handler.hpp b/src/handler.hpp index ad545028..a3658383 100644 --- a/src/handler.hpp +++ b/src/handler.hpp @@ -8,7 +8,6 @@ #include #include -using pairDvc = std::pair>>; // global variables inline OmniscopeDeviceManager deviceManager{}; inline std::vector> devices; @@ -17,12 +16,11 @@ inline std::set savedFileNames; // unique and ordered filenames inline std::optional sampler{}; inline std::map>> captureData; - void addPlots(const char *, std::function); void initDevices(); void devicesList(); -void load_files(decltype(captureData) &, - std::map &, bool&); +void load_files(decltype(captureData) &, std::map &, + bool &); void set_config(const std::string &); void set_json(nlohmann::json &); void set_inital_config(nlohmann::json &); diff --git a/src/main.cpp b/src/main.cpp index 45b30d78..4b84db8f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,7 +45,6 @@ int main() { } ImGui::BeginChild("Left Side", {windowSize.x * .18f, 0.f}); - // ############################################# Side Menu set_side_menu(config, open_settings, open_generate_training_data, loadedDvcs, Dvcs_filenames); @@ -111,7 +110,6 @@ int main() { PopPlotRegionColors(); // ############################ Devicelist SetDeviceMenuStyle(); - ImGui::Dummy({0.f, windowSize.y * .01f}); ImGui::BeginChild("Devicelist"); ImGui::Dummy({windowSize.x * .36f, 0.f}); From 698d20a5ade51f7e098ab8a9fd47bfd47f243fa4 Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Tue, 11 Jun 2024 13:42:22 +0330 Subject: [PATCH 44/47] Distincs containers and other parts bug fix --- src/handler.cpp | 59 +++++++++++++++++++------------- src/main.cpp | 24 ++++++------- src/popups.hpp | 3 +- src/saves_popup.cpp | 83 ++++++++++++++++++++++----------------------- src/style.cpp | 22 +++++++----- 5 files changed, 105 insertions(+), 86 deletions(-) diff --git a/src/handler.cpp b/src/handler.cpp index e835b521..e9325abc 100644 --- a/src/handler.cpp +++ b/src/handler.cpp @@ -1,8 +1,7 @@ -#include -#include #include "handler.hpp" +#include +#include "popups.hpp" #include "get_from_github.hpp" -#include "../imgui-filebrowser/imfilebrowser.h" #include "../imgui-stdlib/imgui_stdlib.h" void addPlots(const char *name, @@ -14,7 +13,6 @@ void addPlots(const char *name, if (ImPlot::BeginPlot(name, plotRegion, ImPlotFlags_NoFrame)) { double x_min = std::numeric_limits::max(); double x_max = std::numeric_limits::min(); - for (auto const &plot : plots) if (!plot.second.empty()) { x_min = std::min(x_min, plot.second.front().first); @@ -133,12 +131,13 @@ void devicesList() { doDevice(device, appLanguage[Key::Ready]); } -void load_files(decltype(captureData) &loadedDvcs, - std::map &Dvcs_filenames, bool& loadFile) { - static std::set loadedFileNames; - auto do_load = [&loadedDvcs, &Dvcs_filenames] { +void load_files(decltype(captureData) &loadedFiles, + std::map &loadedFilenames, + bool &loadFile) { + static std::set loadedFilePaths; + auto do_load = [&loadedFiles, &loadedFilenames] { std::pair>> loadedDvc; - for (const auto &path : loadedFileNames) { + for (const auto &path : loadedFilePaths) { std::ifstream readfile(path, std::ios::binary); if (!readfile.is_open()) fmt::println("Failed to open file {}", path.string()); @@ -166,31 +165,41 @@ void load_files(decltype(captureData) &loadedDvcs, '\n'); // new line separator between elements } readfile.close(); - loadedDvc.second.pop_back(); // pop the extra last element - loadedDvcs.emplace(loadedDvc); - Dvcs_filenames.emplace(loadedDvc.first, path.filename().string()); + loadedDvc.second.pop_back(); // pop the extra last element + loadedFiles.emplace(loadedDvc); + loadedFilenames.emplace(loadedDvc.first, path.filename().string()); } } + loadedFilePaths.clear(); }; if (ImGui::BeginPopupModal(appLanguage[Key::Load_file_data], nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::SetItemDefaultFocus(); static ImGui::FileBrowser fileBrowser; - static std::vector pathArr{""}; - for (auto& path : pathArr) { + static std::vector pathArr; + if (pathArr.empty()) + pathArr.emplace_back(""); + + for (auto &path : pathArr) { ImGui::PushID(&path); // unique IDs ImGui::InputTextWithHint("##", appLanguage[Key::Path], &path); ImGui::SameLine(); if (ImGui::Button(appLanguage[Key::Browse])) fileBrowser.Open(); fileBrowser.Display(); + info_popup(appLanguage[Key::Wrong_file_warning], + appLanguage[Key::Wrong_file_type]); if (fileBrowser.HasSelected()) { - loadedFileNames.emplace(fileBrowser.GetSelected()); // absolute path - path = fileBrowser.GetSelected().string(); + if (fileBrowser.GetSelected().extension() != ".csv") + ImGui::OpenPopup(appLanguage[Key::Wrong_file_warning]); + else { + loadedFilePaths.emplace(fileBrowser.GetSelected()); // absolute path + path = fileBrowser.GetSelected().string(); + loadedFilePaths.emplace(path); + } fileBrowser.ClearSelected(); - } else if (!path.empty()) - loadedFileNames.emplace(path); + } ImGui::PopID(); } if (ImGui::Button(" + ")) @@ -198,10 +207,12 @@ void load_files(decltype(captureData) &loadedDvcs, ImGui::SetItemTooltip(appLanguage[Key::Load_another_file]); if (ImGui::Button(appLanguage[Key::Back])) { loadFile = false; + pathArr.clear(); ImGui::CloseCurrentPopup(); } ImGui::SameLine(); if (ImGui::Button(appLanguage[Key::Load_file])) { + pathArr.clear(); do_load(); ImGui::CloseCurrentPopup(); loadFile = false; @@ -209,16 +220,18 @@ void load_files(decltype(captureData) &loadedDvcs, ImGui::EndPopup(); } } + void set_config(const std::string &configpath) { - if (std::filesystem::exists(configpath)) + if (fs::exists(configpath)) fmt::print("found config.json\n\r"); else { fmt::print("Did not find config.json.\n Download from Github\n\r"); update_config_from_github(); } } + void set_json(nlohmann::json &config) { - if (std::filesystem::exists(load_json(config, ("languagepath")))) + if (fs::exists(load_json(config, ("languagepath")))) fmt::print("Found language: {}\n\r", appLanguage[Key::German]); else { fmt::print("Did not find {}.\n Download from Github\n\r", @@ -234,14 +247,14 @@ void set_inital_config(nlohmann::json &config) { config["text"]["active_language"] == "German" ? germanLan : englishLan; } -void rstSettings(const decltype(captureData) &loadedDvcs) { +void rstSettings(const decltype(captureData) &loadedFiles) { sampler.reset(); devices.clear(); savedFileNames.clear(); deviceManager.clearDevices(); - // erase all elements excpet loadedDvcs + // erase all elements excpet loadedFiles for (auto it = captureData.begin(); it != captureData.end();) { - if (!loadedDvcs.contains(it->first)) + if (!loadedFiles.contains(it->first)) it = captureData.erase(it); else ++it; diff --git a/src/main.cpp b/src/main.cpp index 4b84db8f..c576ca11 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,11 +15,11 @@ int main() { auto now = std::chrono::system_clock::now(); std::time_t now_time_t = std::chrono::system_clock::to_time_t(now); std::tm now_tm = *std::gmtime(&now_time_t); - static bool flagPaused{true}; + bool flagPaused{true}; bool Development{false}, flagInitState{true}, open_generate_training_data{false}, open_settings{false}; - auto loadedDvcs = captureData; - std::map Dvcs_filenames; + auto loadedFiles = captureData; + std::map loadedFilenames; // main loop auto render = [&]() { @@ -47,7 +47,7 @@ int main() { ImGui::BeginChild("Left Side", {windowSize.x * .18f, 0.f}); // ############################################# Side Menu set_side_menu(config, open_settings, open_generate_training_data, - loadedDvcs, Dvcs_filenames); + loadedFiles, loadedFilenames); // there're four "BeginChild"s, one as the left side // and three on the right side ImGui::EndChild(); // end child "Left Side" @@ -57,7 +57,7 @@ int main() { sampler->copyOut(captureData); // ######################################### Toolbar - set_toolbar(config, language, flagPaused, loadedDvcs); + set_toolbar(config, language, flagPaused, loadedFiles); // ############################ Settings Menu static int title = 0; @@ -92,7 +92,7 @@ int main() { ImGui::BeginChild("Record Data", {0.f, windowSize.y * 0.62f}, ImGuiChildFlags_Border); - addPlots("Recording the data", [](double x_max) { + addPlots("Recording the data", [flagPaused](double x_max) { if (!flagPaused) { ImPlot::SetupAxes("x [Data points]", "y [ADC Value]", ImPlotAxisFlags_AutoFit, ImPlotAxisFlags_AutoFit); @@ -116,9 +116,9 @@ int main() { ImGui::SameLine(); ImGui::Text(appLanguage[Key::Devices_found]); devicesList(); - static std::map loadedFilesChkBxs; - if (!loadedDvcs.empty()) { // if devices were successfully loaded from file - for (auto it = loadedDvcs.begin(); it != loadedDvcs.end();) { + if (!loadedFiles.empty()) { // if devices were successfully loaded from file + static std::map loadedFilesChkBxs; + for (auto it = loadedFiles.begin(); it != loadedFiles.end();) { ImGui::PushID(&it->first); // make unique IDs if (ImGui::Checkbox("##", &loadedFilesChkBxs[it->first].b)) if (loadedFilesChkBxs[it->first].b) { // if checked @@ -127,13 +127,13 @@ int main() { } else captureData.erase(it->first); ImGui::SameLine(); - ImGui::TextUnformatted(Dvcs_filenames[it->first].c_str()); + ImGui::TextUnformatted(loadedFilenames[it->first].c_str()); ImGui::SameLine(); if (ImGui::Button(appLanguage[Key::Reset])) { captureData.erase(it->first); - Dvcs_filenames.erase(it->first); + loadedFilenames.erase(it->first); loadedFilesChkBxs[it->first].b = false; - it = loadedDvcs.erase(it); + it = loadedFiles.erase(it); } else it++; ImGui::PopID(); diff --git a/src/popups.hpp b/src/popups.hpp index 77927802..1ce93a69 100644 --- a/src/popups.hpp +++ b/src/popups.hpp @@ -23,5 +23,6 @@ void generateTrainingData( void info_popup(std::string_view, std::string_view); void saves_popup(nlohmann::json const &, nlohmann::json const &, std::chrono::system_clock::time_point &, - std::time_t &now_time_t, std::tm &now_tm, bool &); + std::time_t &now_time_t, std::tm &now_tm, bool &, + std::map>> &); #endif \ No newline at end of file diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index e4135ad4..a1413cf2 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -10,9 +10,11 @@ static void save(const Omniscope::Id &device, const std::vector> &values, - const fs::path &outFile, std::string allData, size_t &y_indx) { - allData += fmt::format(",{},{},{}\n", - device.type, device.serial, device.sampleRate); + const fs::path &outFile, std::string allData, size_t &y_indx, + std::string filename) { + std::string serialFilename = device.serial + " " + filename; + allData += fmt::format(",{},{},{}\n", device.type, serialFilename, + device.sampleRate); std::string fileContent; fileContent.resize_and_overwrite( // four bytes for each y_value, three for the number @@ -41,10 +43,10 @@ static void save(const Omniscope::Id &device, void saves_popup(nlohmann::json const &config, nlohmann::json const &language, std::chrono::system_clock::time_point &now, std::time_t &now_time_t, std::tm &now_tm, - bool &flagDataNotSaved) { - + bool &flagDataNotSaved, + decltype(captureData) &liveDvcs) { ImGui::SetItemDefaultFocus(); - const size_t devicesSz{captureData.size()}; + const size_t devicesSz{liveDvcs.size()}; // input text fields static std::vector inptTxtFields(devicesSz); inptTxtFields.resize(devicesSz); @@ -85,18 +87,20 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, ImGui::NewLine(); if (ImGui::BeginCombo("##Combo", appLanguage[Key::Devices_Menu])) { - std::stringstream ss; + //std::stringstream ss; for (size_t i = 0; i < devicesSz; i++) { - ss << "Device " << i + 1; - ImGui::Checkbox(ss.str().c_str(), &(dvcCheckedArr[i].b)); - ss.str(std::string()); + //ss << "Device " << i + 1; + // ImGui::Checkbox(ss.str().c_str(), &(dvcCheckedArr[i].b)); + ImGui::Checkbox(fmt::format("Device {}", i + 1).c_str(), + &(dvcCheckedArr[i].b)); + //ss.str(std::string()); } ImGui::EndCombo(); } - static char scantype[255] = ""; - static char vin[19] = ""; - static char mileage[10] = ""; + static char scantype[255]; + static char vin[19]; + static char mileage[10]; std::string inputvin = getSubdirectoriesInFolder(language, "saves", scantype, vin, mileage); @@ -143,18 +147,17 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, ImGui::PopID(); } - if (ImGui::Button("Cancel")) { + if (ImGui::Button(appLanguage[Key::Back])) { for (size_t i = 1; i < devicesSz; ++i) { hasSelectedPathArr[i].b = false; selectedPathArr[i].clear(); inptTxtFields[i].clear(); } - ImGui::CloseCurrentPopup(); } ImGui::SameLine(); - if (ImGui::Button("Close")) + if (ImGui::Button("OK")) ImGui::CloseCurrentPopup(); ImGui::EndPopup(); @@ -172,7 +175,7 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, // make a directory (if not exists) and return a path to it auto mkdir = [&](bool hasSelectedPath, std::string selectedPath, - std::string second_folder, std::string outFile) { + std::string second_folder, std::string outFile) { fs::path complete_path; auto first_folder = load_json(config, "scanfolder"); @@ -206,7 +209,7 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, return complete_path / outFile; }; - if (const size_t checkedDvc_cnt = count_checked_devices()) + if (const size_t checkedDvc_cnt = count_checked_devices()) if (checkedDvc_cnt > 1) { ImGui::SameLine(); ImGui::Dummy({200, 0}); @@ -222,6 +225,7 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, ImGui::Separator(); ImGui::NewLine(); if (ImGui::Button(appLanguage[Key::Back])) { + liveDvcs.clear(); ImGui::CloseCurrentPopup(); } ImGui::SameLine(ImGui::GetWindowWidth() * 0.75f); // offset from start x @@ -233,14 +237,8 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, if (ImGui::Button(appLanguage[Key::Save])) { flagDataNotSaved = false; - - if (captureData.empty()) { - fmt::println("captureData is empty"); - ImGui::CloseCurrentPopup(); - } - fs::path path; - for (size_t i{}; const auto &[device, values] : captureData) { + for (size_t i{}; const auto &[device, values] : liveDvcs) { if (dvcCheckedArr[i].b) { auto filename = mkFileName(fmt::format("device{}", i + 1).c_str()); if (hasSelectedPathArr[i].b) { @@ -252,28 +250,29 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, } else path = mkdir(false, "", "", filename); valuesSize = values.size(); - future = std::async(std::launch::async, [&, path] { - save(device, values, path, allData, y_indx); + future = std::async(std::launch::async, [&, path, filename] { + save(device, values, path, allData, y_indx, filename); }); progress = true; } i++; } } - if (progress) { - auto status = future.wait_for(std::chrono::milliseconds{1}); - if (status == std::future_status::ready && future.valid()) { - future.get(); - // reset related stuff - y_indx = 0; - valuesSize = 0; - progress = false; - inptTxtFields[0].clear(); // reset storage location after each save - ImGui::CloseCurrentPopup(); - } else { - ImGui::ProgressBar((float)y_indx / valuesSize, {0.f, 0.f}); - ImGui::SameLine(); - ImGui::Text(appLanguage[Key::Saving]); - } + if (progress) { + auto status = future.wait_for(std::chrono::milliseconds{1}); + if (status == std::future_status::ready && future.valid()) { + future.get(); + // reset related stuff + y_indx = 0; + valuesSize = 0; + progress = false; + inptTxtFields[0].clear(); // reset storage location after each save + ImGui::CloseCurrentPopup(); + liveDvcs.clear(); + } else { + ImGui::ProgressBar((float)y_indx / valuesSize, {0.f, 0.f}); + ImGui::SameLine(); + ImGui::Text(appLanguage[Key::Saving]); } + } } \ No newline at end of file diff --git a/src/style.cpp b/src/style.cpp index 171df3c5..be31cf69 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -245,8 +245,8 @@ bool LoadTextureFromHeader(unsigned char const *png_data, int png_data_len, void set_side_menu(const nlohmann::json &config, bool &open_settings, bool &open_generate_training_data, - decltype(captureData) &loadedDvcs, - std::map &Dvcs_filenames) { + decltype(captureData) &loadedFiles, + std::map &loadedFilenames) { auto windowSize{ImGui::GetIO().DisplaySize}; // Initializing all variables for images @@ -304,8 +304,8 @@ void set_side_menu(const nlohmann::json &config, bool &open_settings, ImGui::OpenPopup(appLanguage[Key::Load_file_data]); } if (loadFile) - load_files(loadedDvcs, Dvcs_filenames, loadFile); - + load_files(loadedFiles, loadedFilenames, loadFile); + static bool showDiag = false; const bool showDiagPrev = showDiag; if (loaded_png[++PngRenderedCnt] && // render Diagnostics @@ -351,7 +351,7 @@ void set_side_menu(const nlohmann::json &config, bool &open_settings, } void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, - bool &flagPaused, const decltype(captureData) &loadedDvcs) { + bool &flagPaused, const decltype(captureData) &loadedFiles) { // variable declaration static auto now = std::chrono::system_clock::now(); @@ -359,6 +359,7 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, static std::tm now_tm = *std::gmtime(&now_time_t); auto windowSize{ImGui::GetIO().DisplaySize}; static bool flagDataNotSaved = true; + static decltype(captureData) liveDvcs; // begin Toolbar ############################################ ImGui::BeginChild("Buttonstripe", {-1.f, windowSize.y * .1f}, false, @@ -367,7 +368,8 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, if (ImGui::BeginPopupModal(appLanguage[Key::Save_Recorded_Data], nullptr, ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::SetItemDefaultFocus(); - saves_popup(config, language, now, now_time_t, now_tm, flagDataNotSaved); + saves_popup(config, language, now, now_time_t, now_tm, flagDataNotSaved, + liveDvcs); ImGui::EndPopup(); } // ############################ Popup Reset @@ -376,7 +378,7 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, ImGui::SetItemDefaultFocus(); ImGui::Text(appLanguage[Key::Measure_not_saved]); if (ImGui::Button(appLanguage[Key::Continue_del])) { - rstSettings(loadedDvcs); + rstSettings(loadedFiles); ImGui::CloseCurrentPopup(); } ImGui::SameLine(); @@ -476,7 +478,7 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, if (flagDataNotSaved) { ImGui::OpenPopup(appLanguage[Key::Reset_q]); } else { - rstSettings(loadedDvcs); + rstSettings(loadedFiles); flagPaused = true; } } @@ -495,6 +497,10 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, (void *)(intptr_t)image_texture[PngRenderedCnt], ImVec2(image_width[PngRenderedCnt] * iconsSacle, image_height[PngRenderedCnt] * iconsSacle))) { + for (const auto &[device, values] : captureData) + if (!loadedFiles.contains(device)) + liveDvcs.emplace(device, values); // extract live devices data + if (sampler.has_value()) ImGui::OpenPopup(appLanguage[Key::Save_Recorded_Data]); else From 8d9fabeabf6cadf65f86a5c7ce6c6de2a16f4aac Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Wed, 12 Jun 2024 12:53:30 +0330 Subject: [PATCH 45/47] improvements --- src/handler.cpp | 37 +++++++++++++++++++------------------ src/style.cpp | 3 +-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/handler.cpp b/src/handler.cpp index e9325abc..e8544a78 100644 --- a/src/handler.cpp +++ b/src/handler.cpp @@ -4,8 +4,7 @@ #include "get_from_github.hpp" #include "../imgui-stdlib/imgui_stdlib.h" -void addPlots(const char *name, - std::function axesSetup) { +void addPlots(const char *name, std::function axesSetup) { static std::set firstRun; const auto &plots{captureData}; auto const plotRegion = ImGui::GetContentRegionAvail(); @@ -136,7 +135,7 @@ void load_files(decltype(captureData) &loadedFiles, bool &loadFile) { static std::set loadedFilePaths; auto do_load = [&loadedFiles, &loadedFilenames] { - std::pair>> loadedDvc; + std::pair>> loadedFile; for (const auto &path : loadedFilePaths) { std::ifstream readfile(path, std::ios::binary); if (!readfile.is_open()) @@ -151,23 +150,23 @@ void load_files(decltype(captureData) &loadedFiles, std::string substr; std::getline(input, substr, ','); if (i == 3) // fourth element (Type of scope) - loadedDvc.first.type = substr; + loadedFile.first.type = substr; if (i == 4) // fifth element (serial of scope) - loadedDvc.first.serial = substr; + loadedFile.first.serial = substr; } size_t indx{2}; // y_values start from line 2 of the file while (!readfile.eof()) { // fill the vector of the values double value{}; readfile >> value; - loadedDvc.second.emplace_back(indx++, value); + loadedFile.second.emplace_back(indx++, value); static constexpr size_t bigNumber{10'000'000}; readfile.ignore(bigNumber, '\n'); // new line separator between elements } readfile.close(); - loadedDvc.second.pop_back(); // pop the extra last element - loadedFiles.emplace(loadedDvc); - loadedFilenames.emplace(loadedDvc.first, path.filename().string()); + loadedFile.second.pop_back(); // pop the extra last element + loadedFiles.emplace(loadedFile); + loadedFilenames.emplace(loadedFile.first, path.filename().string()); } } loadedFilePaths.clear(); @@ -191,31 +190,33 @@ void load_files(decltype(captureData) &loadedFiles, info_popup(appLanguage[Key::Wrong_file_warning], appLanguage[Key::Wrong_file_type]); if (fileBrowser.HasSelected()) { - if (fileBrowser.GetSelected().extension() != ".csv") - ImGui::OpenPopup(appLanguage[Key::Wrong_file_warning]); - else { - loadedFilePaths.emplace(fileBrowser.GetSelected()); // absolute path - path = fileBrowser.GetSelected().string(); - loadedFilePaths.emplace(path); - } + path = fileBrowser.GetSelected().string(); fileBrowser.ClearSelected(); } + if (!path.empty()) + if (fs::path(path).extension() != ".csv") { + ImGui::OpenPopup(appLanguage[Key::Wrong_file_warning], + ImGuiPopupFlags_NoOpenOverExistingPopup); + path.clear(); + } else + loadedFilePaths.emplace(path); ImGui::PopID(); } if (ImGui::Button(" + ")) pathArr.emplace_back(""); ImGui::SetItemTooltip(appLanguage[Key::Load_another_file]); if (ImGui::Button(appLanguage[Key::Back])) { - loadFile = false; pathArr.clear(); + loadedFilePaths.clear(); + loadFile = false; ImGui::CloseCurrentPopup(); } ImGui::SameLine(); if (ImGui::Button(appLanguage[Key::Load_file])) { pathArr.clear(); do_load(); - ImGui::CloseCurrentPopup(); loadFile = false; + ImGui::CloseCurrentPopup(); } ImGui::EndPopup(); } diff --git a/src/style.cpp b/src/style.cpp index be31cf69..3225a55f 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -499,7 +499,7 @@ void set_toolbar(const nlohmann::json &config, const nlohmann::json &language, image_height[PngRenderedCnt] * iconsSacle))) { for (const auto &[device, values] : captureData) if (!loadedFiles.contains(device)) - liveDvcs.emplace(device, values); // extract live devices data + liveDvcs.emplace(device, values); // extract live devices (the little overhead) if (sampler.has_value()) ImGui::OpenPopup(appLanguage[Key::Save_Recorded_Data]); @@ -555,7 +555,6 @@ void PopupStyleEditor() { // For Development } void SetHorizontalSepeareatorColours() { - ImGuiStyle &style = ImGui::GetStyle(); style.Colors[ImGuiCol_Separator] = ImVec4(1.0f, 0.0f, 0.0f, 1.0f); } \ No newline at end of file From dc99f077608eb4aee73616d811db83b7df864e2d Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Fri, 14 Jun 2024 11:17:32 +0330 Subject: [PATCH 46/47] little cleanup --- src/languages.hpp | 2 +- src/saves_popup.cpp | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/languages.hpp b/src/languages.hpp index b4692eda..ccc4449c 100644 --- a/src/languages.hpp +++ b/src/languages.hpp @@ -247,7 +247,7 @@ inline const std::map germanLan{ {Key::Saving, "speichern ..."}, {Key::Load_file, "Datei laden"}, {Key::Load_file_data, "Alte Daten laden"}, - {Key::Load_another_file, "Eine andere Datei laden"}, + {Key::Load_another_file, "Eine weitere Datei laden"}, {Key::Path, "Pfad"}}; inline auto appLanguage = englishLan; diff --git a/src/saves_popup.cpp b/src/saves_popup.cpp index a1413cf2..e2426f67 100644 --- a/src/saves_popup.cpp +++ b/src/saves_popup.cpp @@ -82,19 +82,13 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, ImGui::Separator(); SetHorizontalSepeareatorColours(); ImGui::NewLine(); - ImGui::Text(appLanguage[Key::Select_Devices]); ImGui::NewLine(); if (ImGui::BeginCombo("##Combo", appLanguage[Key::Devices_Menu])) { - //std::stringstream ss; - for (size_t i = 0; i < devicesSz; i++) { - //ss << "Device " << i + 1; - // ImGui::Checkbox(ss.str().c_str(), &(dvcCheckedArr[i].b)); + for (size_t i = 0; i < devicesSz; i++) ImGui::Checkbox(fmt::format("Device {}", i + 1).c_str(), &(dvcCheckedArr[i].b)); - //ss.str(std::string()); - } ImGui::EndCombo(); } @@ -157,7 +151,7 @@ void saves_popup(nlohmann::json const &config, nlohmann::json const &language, } ImGui::SameLine(); - if (ImGui::Button("OK")) + if (ImGui::Button(appLanguage[Key::OK])) ImGui::CloseCurrentPopup(); ImGui::EndPopup(); From 617a024fb9af82edb04884cd3a8bc655bd448b1c Mon Sep 17 00:00:00 2001 From: R-Abbasi Date: Fri, 14 Jun 2024 13:55:37 +0330 Subject: [PATCH 47/47] setting different colors for files data --- src/main.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index c576ca11..9aea268b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -122,8 +122,17 @@ int main() { ImGui::PushID(&it->first); // make unique IDs if (ImGui::Checkbox("##", &loadedFilesChkBxs[it->first].b)) if (loadedFilesChkBxs[it->first].b) { // if checked - if (!captureData.contains(it->first)) + if (!captureData.contains(it->first)) { captureData.emplace(it->first, it->second); + // set different colors for files data + if (!colorMap.contains(it->first)) { + ImPlot::PushColormap(ImPlotColormap_Dark); + auto color = + ImPlot::GetColormapColor((colorMap.size() % 7) + 1); + colorMap[it->first] = {color.x, color.y, color.z}; + ImPlot::PopColormap(); + } + } } else captureData.erase(it->first); ImGui::SameLine();